`

关于分类数据表格的设计

阅读更多

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

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

 

 

方案一:( 经常使用)

: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  
左右值在插入和更新的时候,做的事情多点,查询还是很快的。

相关推荐

    网软志成分类信息网站系统.net官方商业版

    网软志成分类信息网站系统淡红色分类信息网站模板,人机交互数据输入界面十分干净清爽,我们坚信这是一流的设计思想。所有信息内容在线完成编辑,就象WORD一样简单、可视而又功能完善,几乎能完成你想要的所有效果。...

    Excel 2007数据透视表完全剖析 5/7

    本书首先介绍了数据透视表的基础,然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用宏和...

    Excel 2007数据透视表完全剖析 1/7

    本书首先介绍了数据透视表的基础,然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用宏和...

    基于多源海洋数据的信息平台开发与应用研究-毕业设计

    友好的界面交互与UI设计有助于激发公众对于海洋知识的热爱,有助于海洋知识的基础科普,在展示过程中采用数据集表格的形式,用户可以看到自己所选择数据集的所有数据,包括数据格式,数据上传时间,更新频率等相关...

    Excel 2007数据透视表完全剖析 3/7

    本书首先介绍了数据透视表的基础,然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用宏和...

    Excel 2007数据透视表完全剖析 4/7

    本书首先介绍了数据透视表的基础,然后逐步介绍创建数据透视表、自定义透视表、查看视图数据、在透视表内进行计算、使用数据透视图等可视化工具、分析数据源、共享数据表、使用和分析OLAP数据、在透视表中使用宏和...

    数据库课程设计机票预定系统

    概念设计阶段要完成数据抽象与局部视图设计还有视图的集成。逻辑结构设计阶段要把E-R图转化为关系模式并且把我输入的五张表结合在一起完成一个总关系表。最后就是要运行和实施数据库。要把查询结果与过程抓几张图

    生活分类信息发布网站的优秀网站管理系统正式版

    网软志成分类信息网站系统淡红色分类信息网站模板,人机交互数据输入界面十分干净清爽,我们坚信这是一流的设计思想。所有信息内容在线完成编辑,就象WORD一样简单、可视而又功能完善,几乎能完成你想要的所有效果。...

    基于信息熵和逻辑回归的特征提取分类python源码.zip

    3. 在归0,1化处理后导入计算信息熵的函数中求信息熵,将运算结果合同之前的几个值作为该数据的特征,写入表格。 4. 之后将完成特征提取后的100个MDD和100个SCZ数据合并作为分类的数据集,导入之后进行预处理,将...

    数据库原理与应用课程设计------多媒体教室申请管理系统

    在业务流程调查和分析的基础上,按照分层、概括、抽象的原则描述系统的数据流程图,要求数据流程图必须分层表达,图中所出现的数据对象分类顺序编号,以便进行编写对应的详细数据字典。该部分的数据流程图应至少3张...

    数据库设计规范-命名规范.docx

    3.1 数据表和程序模块的分类 根据"处理特点",将数据表和程序模块进行分类如下: 数据表分类:业务数据表、基本编码表、辅助编码表、系统信息表、累计数据表、结 算数据表、决策数据表。 程序模块分类:初始化、...

    《认识大数据》教学设计.docx

    例如,针对某产品的消费者评论,情感分类器通过对大量数据的机器学习,能够较准确地辨别正面和负面的评论 3.大数据分析 当数据超过一定的量或者数据类型太复杂,传统的数据处理方法会存在数据存储困难、计算时间太...

    毕设项目:scrapy抓取数据存储至本地mysql数据库-大众点评爬虫 后面制作数据分析,难度中等

    scrapy抓取数据存储至本地mysql数据库 基于python开发,采用scrapy,数据存储至本地数据库(或excel表格) 程序的主要目的是完成抓取和分析的任务同时学习爬虫相关知识,所以在细节处理上略有不足,但考虑到最终的...

    再就业服务中心管理信息系统数据库系统设计报告

    4)数据存储:职工申请表 数据量和存取频度:根据职工填写申请的具体情况来确定。 存取方式:联机处理;检索和更新;以更新操作为主。 (3)处理过程 1)申请过程 输入:职工编号,企业编号,岗位编号 输出:...

    数据挖掘与分析.doc

    报表:产生关系数据表格、复杂表格、OLAP表格、报告以及各种综合报表;可视 化:用易于理解的点线图、直方图、饼图、网状图、交互式可视化、动态模拟、计算机 动画技术表现复杂数据及其相互关系;统计:进行平均值、...

    DCNN-for-Tabular-data:DCNN对表格数据进行预测

    因此,我们决定制作一个将表格数据转换为图像的系统,随后将图像传递给DCNN模型进行分类。 这项研究工作是由很少的研究人员和编程人员执行的。 在所有这些产品中,我们设计的模型迄今为止可以提供最佳性能。 数据集...

    jQuery表格插件 所属分类:UI,输入-图表,定制和风格

    表格式网页设计中的一个重要元素,它们能够让用户直观的了解某些数据。在这个demo中使用的表格不是标准的表格html结构,而是使用无序列表来制作表格。这样做的目的是为了使表格具有很好的相应性。 HTML结构 ...

    毕业设计 基于springboot知识图谱(Neo4j)的科技政策管理系统源码+详细文档+全部数据资料(高分项目).zip

    毕业设计 基于springboot知识图谱(Neo4j)的科技政策管理系统源码+详细文档+全部数据资料(高分项目).zip毕业设计 基于springboot知识图谱(Neo4j)的科技政策管理系统源码+详细文档+全部数据资料(高分项目) ...

    AJ-Report是全开源的一个BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑.rar

    大屏图表动态数据集字典进行分类管理 文件管理上传问题 文件管理添加复制url功能 优化数据集清洗功能 新增图表:堆叠图 近期计划: 表格存在的问题,进行优化 编辑大屏数据集回显问题 大屏宽高动态适配问题 大屏...

    数据分析入门.pptx

    能用图说明问题的就不用表格,能用表说明问题的就不用文字。 数据展现 折线图:按照时间序列分析数据的变化趋势时使用。 柱状图:指定一个分析轴进行数据大小的比较时使用。 饼 图:指定一个分析轴进行所占比例的...

Global site tag (gtag.js) - Google Analytics