`

关于分类数据表格的设计

阅读更多

在一个系统设计中经常遇到分类数据表格设计,而且分类层数可能是不确定的。比方说一个商场的产品分类可以如下:

    上图的数据结构就是一个树,数据表格设计有多种方法。每个分类可能在系统运行时需查询、增加、删除、修改、移动。不同的设计可能使各个功能点的性能不同,有些使查询快速和便利,有些新是增快速和便利,有些是删除、修改快和便利。针对上图可以有以下各种设计:

 

 

方案一:( 经常使用)

:Id:类型的唯一标识符;name:类型名称;parentId:父类ID(参照本表id)
查询 :单一查询方便;但查询某分类的全部子类就不方便(需迭代查询 ),不同的数据库有不同的语句,有些数据库还不支持迭代查询。


新增、修改、删除 :新增、修改、删除比较便利(删除某分类时可能得逐级向上删除或者设置CASCADE )

 

方案二:

 

注: Id:类型的唯一标识符;name:类型名称;code:类型编码

查询 :单一查询方便,查询某分类的全部子类也方便(使用 like)
修改 、删除:修改、删除比较便利
新增 :新增还需查询其父类code,然后再加上此类#id(不很便利)

致命缺点 :code长度有限,只支持层数有限的树形结构,树形不大时可以使用此结构

 

方案三:(综合方案二方案一)

 

此方案综合了方案一、二,弥补了方案一的一些缺点但也带进了方案而的缺点

 

最想说的是方案四
先看看下面这个数据结构:

 

表结构:

Left:左支标识 Right:右支标识

这个数据结构的查询需要一定的算法来支持,
查询:单一查询方便

查询分类根节点:

Select * from kind_table where left=1;
 



查询分类(left=pleft, right=pright)所以子类(此处不需迭代查询):

Select * from kind_table where left> pleft and right<pright;
 



修改:
修改一个分类(得连带修改其所有子类),只需遵循一条原则:

where left> pleft and right<pright;
 



新增:

新增一个分类(其父类为id=pid,left=pleft, right=pright)

Update kind_table set right  = right+ 2  where  right >= pright;
Update kind_table set left  =left+2     where  left > pright;
Insert into  kind_table values($id,$name,pid, pright, pright+1);
 



删除:
删除一个分类(id=cid,left=cleft, right=cright)

Delete from kind_table where left>= pleft and right=<pright;
Update kind_table set right  = right-( cright- cleft+1)  where  right > cright;
Update kind_table set left  =left-( cright- cleft+1)     where  left > cleft;
 



一些特殊查询:


查询一个父类 (id=pid,left= pleft, right=pright)的所有子类的个数:---不需查询数据库
所有子类的个数:(Pright- pleft-1)/2


判断一个节点是否为叶子节点 :(Pright- pleft-1)/2 ==0 或者Pright- pleft==1


缺点:较复杂的算法

  • 大小: 13.3 KB
  • 大小: 13.1 KB
  • 大小: 12.7 KB
  • 大小: 6.1 KB
  • 大小: 6.3 KB
  • 大小: 7 KB
  • 大小: 8.5 KB
0
1
分享到:
评论
2 楼 hailiang0901 2011-10-18  
fnet 写道
左右值在插入和更新的时候,做的事情多点,查询还是很快的。

这个应该变动的几率远小于查询的几率。
1 楼 fnet 2011-10-17  
左右值在插入和更新的时候,做的事情多点,查询还是很快的。

相关推荐

    行业与职位分类数据表

    本主题涉及的“行业与职位分类数据表”就是一个典型的案例,它用于存储和管理关于不同行业和职位类别的信息。这样的数据表对于人力资源管理、招聘、市场研究以及业务分析等应用场景具有很高的价值。 首先,我们来看...

    数据库设计漫谈 元数据设计

    数据库设计是一个系统而复杂的工程,它不仅仅是创建几个数据表那么简单。优秀的数据库设计能够确保数据的有效存储、高效检索和方便维护,对于支撑现代信息系统至关重要。随着信息技术的发展,数据库在商业领域的应用...

    pytorch 分类用于表格数据分类

    在本项目中,我们主要关注的是使用PyTorch进行表格数据的分类任务。PyTorch是一个流行的开源深度学习框架,以其灵活性和易用性而受到广大开发者和研究人员的喜爱。在这个"表格分类demo"中,我们将探讨如何利用...

    AI动物识别图像分类数据集

    这个名为“AI动物识别图像分类数据集”的资源正是为了培养和提升AI模型进行动物识别能力而设计的。它包含了50多种不同动物的丰富图像,这些图片可以用来训练深度学习模型,帮助计算机学习并理解各种动物的特征,从而...

    数据中心方案设计 .doc

    资源分类是数据中心建设的基础,主要包括元数据库、政务叙词表和分类体系与代码表: 1. 元数据库:定义并公开元数据是确保跨部门数据交换的关键。这涉及对数据元素的标准化,以便在未来的信息联接和交换中避免障碍...

    数据模型设计方法和样例详解

    举例来说,一个数据模型设计样例可能是关于受托业务的支付领域。业务概念数据模型会包括员工信息、受益人信息、支付申请等多个实体,每个实体包含一系列属性,如员工编码、姓名、领取原因等。这些实体之间可能存在一...

    服装图像分类问题数据集csv

    CSV文件,全称是Comma-Separated Values,是一种常见的数据存储格式,通常用于存储表格数据。 在这个数据集中,`fashion-mnist_train.csv`可能包含了训练集的数据,用于教授神经网络如何识别不同类型的服装。...

    实用的PPT数据表格模板.rar

    本文将深入探讨如何利用“实用的PPT数据表格模板”来优化你的演示文稿,并提供一些关于设计和使用数据表格的关键知识点。 1. 数据可视化的重要性:数据表格是数据可视化的基础形式,它们能够帮助观众快速捕捉关键...

    简单无限级分类(表格、下拉列表)源码

    - **树形结构**:分类数据通常以树形结构存储,每个节点代表一个分类,包含自身的属性(如ID、名称)和一个指向子节点的引用。 - **层级标识**:为了表示每个分类的层级,通常会有一个字段(如`parent_id`或`level...

    全国学校数据表格加mysql数据库.rar

    在这个场景中,我们看到一个关于全国学校信息的压缩包文件,名为“全国学校数据表格加mysql数据库.rar”,它包含了对我国高等教育机构的详细统计。描述中提到,全国共有3005所高等学校,分为普通高校和成人高校两...

    PyTorch构建分类网络模型(Mnist数据集,全连接神经网络)

    MNIST是一个非常有名的手写体数字识别数据集(手写数字灰度图像数据集),在很多资料中,这个数据集都会被用作深度学习的入门样例 MNIST数据集是NIST数据集的一个子集,由0~9的数字图像构成的,每一张图片都有对应的...

    物理化学实验数据处理程序包的设计及应用实例.pdf

    在设计物理化学实验数据处理程序包时,将所有实验的处理程序集成于一个Microsoft Excel 2003工作簿中,为每个实验设置独立的工作表,便于数据的分类、管理与调用。实验数据处理程序包的设计需要考虑到数据处理的系统...

    精美的PPT数据表格.rar

    数据表格是一种组织和呈现大量信息的有效方式,特别是在比较、分类或分析数据时。它们可以使复杂的统计数据变得易于理解,通过结构化的布局帮助观众快速抓住关键点。"表格.pptx"文件很可能包含了各种预设计的表格...

    行业与职位分类数据sql表

    本主题涉及的“行业与职位分类数据表”就是一个典型的案例,它用于存储和管理关于不同行业和职位类别的信息。这样的数据表对于人力资源管理、招聘、市场研究以及业务分析等应用场景具有很高的价值。 我们来看“行业...

    工资管理系统 课程设计 数据结构 C/C++

    《工资管理系统:基于数据结构与C/C++的课程设计》 在信息技术日益发达的今天,管理系统的开发已经成为计算机科学教育的重要组成部分。其中,“工资管理系统”是常见的一种实践项目,它结合了数据结构与C/C++编程...

    汽车整车参数表数据结构设计基本研究.pdf

    六、数据分析在整车参数表设计中的应用 数据分析技术在整车参数表的设计中起着重要的作用,可以帮助识别数据中的模式、趋势和异常。通过分析现有的整车参数数据,可以指导数据模型的优化,确保数据结构设计满足实际...

    案例集Chap10_小麦籽粒分类_python_

    标题中的“案例集Chap10_小麦籽粒分类_python_”表明这是一个关于使用Python进行农业数据处理和分析的案例,特别是针对小麦籽粒的分类问题。这通常涉及到机器学习和数据分析,可能涵盖特征工程、预处理、模型选择和...

    简洁实用的紫色数据表格PowerPoint素材下载.rar

    标题中的“简洁实用的紫色数据表格PowerPoint素材下载”表明这是一个关于PowerPoint设计素材的资源包,特别是含有紫色调的数据表格。在商业演示、报告或教育演讲中,使用设计精良且色彩协调的表格能够有效地呈现数据...

    毕业论文-城市垃圾减量分类系统前台的设计与实现(万字最终稿)

    为了改善这一状况,本毕业设计着重于构建一套基于信息化技术的垃圾减量分类系统,其前端设计与实现是整个系统的关键部分。 前端开发主要依赖于HTML、CSS和JavaScript这三种基础语言,它们是构建任何Web应用的核心...

    分类与整理教学设计.doc

    教学目标旨在引导学生掌握分类的方法,理解分类的意义,并经历数据收集和整理的过程,能用多种方式(如文字、图画、表格)呈现数据。教学重点在于让学生掌握分类方法,而难点在于学会根据不同的分类标准进行分类。 ...

Global site tag (gtag.js) - Google Analytics