在一个系统设计中经常遇到分类数据表格设计,而且分类层数可能是不确定的。比方说一个商场的产品分类可以如下:
上图的数据结构就是一个树,数据表格设计有多种方法。每个分类可能在系统运行时需查询、增加、删除、修改、移动。不同的设计可能使各个功能点的性能不同,有些使查询快速和便利,有些新是增快速和便利,有些是删除、修改快和便利。针对上图可以有以下各种设计:
方案一:(
经常使用)
注
: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
分享到:
相关推荐
本主题涉及的“行业与职位分类数据表”就是一个典型的案例,它用于存储和管理关于不同行业和职位类别的信息。这样的数据表对于人力资源管理、招聘、市场研究以及业务分析等应用场景具有很高的价值。 首先,我们来看...
数据库设计是一个系统而复杂的工程,它不仅仅是创建几个数据表那么简单。优秀的数据库设计能够确保数据的有效存储、高效检索和方便维护,对于支撑现代信息系统至关重要。随着信息技术的发展,数据库在商业领域的应用...
在本项目中,我们主要关注的是使用PyTorch进行表格数据的分类任务。PyTorch是一个流行的开源深度学习框架,以其灵活性和易用性而受到广大开发者和研究人员的喜爱。在这个"表格分类demo"中,我们将探讨如何利用...
这个名为“AI动物识别图像分类数据集”的资源正是为了培养和提升AI模型进行动物识别能力而设计的。它包含了50多种不同动物的丰富图像,这些图片可以用来训练深度学习模型,帮助计算机学习并理解各种动物的特征,从而...
本文档“重点题型补充题库实验数据表格设计性实验优质资料”针对这一需求,提供了一系列精心设计的实验数据表格和实验设计实例,涵盖了多个基础物理实验领域。 实验数据表格的设计是实验工作的基础,它能够帮助学生...
资源分类是数据中心建设的基础,主要包括元数据库、政务叙词表和分类体系与代码表: 1. 元数据库:定义并公开元数据是确保跨部门数据交换的关键。这涉及对数据元素的标准化,以便在未来的信息联接和交换中避免障碍...
举例来说,一个数据模型设计样例可能是关于受托业务的支付领域。业务概念数据模型会包括员工信息、受益人信息、支付申请等多个实体,每个实体包含一系列属性,如员工编码、姓名、领取原因等。这些实体之间可能存在一...
CSV文件,全称是Comma-Separated Values,是一种常见的数据存储格式,通常用于存储表格数据。 在这个数据集中,`fashion-mnist_train.csv`可能包含了训练集的数据,用于教授神经网络如何识别不同类型的服装。...
在现代社会,信息处理已成为我们日常工作和生活中不可或缺的一部分,而WPS表格作为一种强大的电子表格软件,其提供的数据分类汇总功能,无疑大大提高了数据处理的效率和准确性。本文将深入探讨WPS表格中的数据分类...
本文将深入探讨如何利用“实用的PPT数据表格模板”来优化你的演示文稿,并提供一些关于设计和使用数据表格的关键知识点。 1. 数据可视化的重要性:数据表格是数据可视化的基础形式,它们能够帮助观众快速捕捉关键...
- **树形结构**:分类数据通常以树形结构存储,每个节点代表一个分类,包含自身的属性(如ID、名称)和一个指向子节点的引用。 - **层级标识**:为了表示每个分类的层级,通常会有一个字段(如`parent_id`或`level...
在这个场景中,我们看到一个关于全国学校信息的压缩包文件,名为“全国学校数据表格加mysql数据库.rar”,它包含了对我国高等教育机构的详细统计。描述中提到,全国共有3005所高等学校,分为普通高校和成人高校两...
MNIST是一个非常有名的手写体数字识别数据集(手写数字灰度图像数据集),在很多资料中,这个数据集都会被用作深度学习的入门样例 MNIST数据集是NIST数据集的一个子集,由0~9的数字图像构成的,每一张图片都有对应的...
在设计物理化学实验数据处理程序包时,将所有实验的处理程序集成于一个Microsoft Excel 2003工作簿中,为每个实验设置独立的工作表,便于数据的分类、管理与调用。实验数据处理程序包的设计需要考虑到数据处理的系统...
数据表格是一种组织和呈现大量信息的有效方式,特别是在比较、分类或分析数据时。它们可以使复杂的统计数据变得易于理解,通过结构化的布局帮助观众快速抓住关键点。"表格.pptx"文件很可能包含了各种预设计的表格...
本主题涉及的“行业与职位分类数据表”就是一个典型的案例,它用于存储和管理关于不同行业和职位类别的信息。这样的数据表对于人力资源管理、招聘、市场研究以及业务分析等应用场景具有很高的价值。 我们来看“行业...
《工资管理系统:基于数据结构与C/C++的课程设计》 在信息技术日益发达的今天,管理系统的开发已经成为计算机科学教育的重要组成部分。其中,“工资管理系统”是常见的一种实践项目,它结合了数据结构与C/C++编程...
六、数据分析在整车参数表设计中的应用 数据分析技术在整车参数表的设计中起着重要的作用,可以帮助识别数据中的模式、趋势和异常。通过分析现有的整车参数数据,可以指导数据模型的优化,确保数据结构设计满足实际...
标题中的“案例集Chap10_小麦籽粒分类_python_”表明这是一个关于使用Python进行农业数据处理和分析的案例,特别是针对小麦籽粒的分类问题。这通常涉及到机器学习和数据分析,可能涵盖特征工程、预处理、模型选择和...
标题中的“简洁实用的紫色数据表格PowerPoint素材下载”表明这是一个关于PowerPoint设计素材的资源包,特别是含有紫色调的数据表格。在商业演示、报告或教育演讲中,使用设计精良且色彩协调的表格能够有效地呈现数据...