`
xiaolaogong
  • 浏览: 66857 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

数据库设计模式-自联结模式

阅读更多

(六)自联结模式
自联结模式,也可以看作是“主从模式”的一种特殊情况(或者说是“变形”),它在一张表内实现了“一对多关系”,并且可以根据业务需要实现“有限层”或者“无限层”的主从嵌套。
这种模式用得最多的情况就是实现“树形结构”数据的存储,比如各大网站上常见的细分类别、应用系统的组织结构、Web系统的菜单树等都能用到这种模式。
自联结模式有很多变体,且每种变体的优缺点同样鲜明。由于本连载的重点在于对跨行业通用数据库模型设计进行分析,所以对每种具体模式的细节方面的设计技巧不能作详细论述,请大家原谅。这里仅举两个例子说明:
 
1.       简单自联结
简单自联结,就是在一个表里设置当前类ID、父类ID,同时规定最顶层类的父类ID为一个固定值(比如0),在生成树的时候使用递归算法,记录的前后顺序通过“排序号”字段来确定。
图9
这个表用来存储菜单树很方便。首先会有一个主菜单,主菜单下有子菜单,子菜单下面又有孙菜单……菜单的数量不确定、层级不确定,用户可以在任意菜单下增加新的子菜单,或者删除某个子菜单及其下的所有孙菜单……这种设计方式很多人都会用到,短小精悍、维护方便、且完全满足用户需求,而且树的层次不限,扩展起来非常容易。这些都是它的优点。
它的缺点就是树结构的生成由于使用了递归算法,必然要对该表进行多次读取(读取的次数 = 表内的记录数 – 最深层级的记录数),多次读取就来了比较低的运行效率,当表里的记录很多的时候,这个缺点可以称得上是致命的。
于是就有了下面的这种设计模式。
2.       扩展自联结
扩展自联结,与简单自联结的最大区别就是通过附加冗余字段来避免递归运算,所要实现的主要目标就是一次读取就能生成整个树,一次提高树的生成效率。
但是,鱼与熊掌不可兼得,凡事都有两面性。
生成树的效率提高了,增删改表内记录的算法就会相应复杂,并且树的层数也变为有限的了。
所以在此类设计的时候,大家还是要认真分析业务需求,看看实际业务的重点在什么地方,然后再作具体设计。比如一些门户网站在首页显示产品类别是业务重点,那么我们在设计的时候就要尽可能的提高生成树的效率,采取扩展自联结模式;相反,一些基于Web的业务系统,要求对菜单树的增删改维护操作尽量简单,由于菜单的数目不多,所以菜单树的生成效率不是瓶颈,那么我们设计的时候就可以采取简单自联结模式。
关于附加冗余字段实现扩展自联结的方法很多,网上也有很多这方面的帖子,大家可以到Google上搜一下。
在这里仅举一个例子如下:
图10
这个设计与前面的设计最大的区别就是排序字段,前面的简单自联结用了一个整数型的字段来实现排序,这里用了一个Varchar20型的字段“层级代码”来实现大排序。这个字段的取值两位一组,代表一层,假定最深为5层,初始值为0000000000。
按照这样的设计,表内的数据记录可能就是这样的:
ID           TypeName           ParentID            TypeLevel
1             根类别               0                 000000
2             类别1                1                 010000
3             类别1.1              2                 010100
4             类别1.2              2                 010200
5             类别2                1                 020000
6             类别2.1              5                 020100
7             类别3                1                 030000
8             类别3.1              7                 030100
9             类别3.2              7                 030200
10            类别1.1.1            3                 010101
……
现在按TypeLevel字段进行排序,执行如下SQL语句:SELECT * FROM TMP_Type ORDER BY TypeLevel
列出记录集如下:
ID           TypeName           ParentID            TypeLevel
1             总类别               0                 000000
2             类别1                1                 010000
3             类别1.1              2                 010100
10            类别1.1.1            3                 010101
4             类别1.2              2                 010200
5             类别2                1                 020000
6             类别2.1              5                 020100
7             类别3                1                 030000
8             类别3.1              7                 030100
9             类别3.2              7                 030200
……
在控制显示类别的层次时,只要对“层级代码”字段中的数值进行判断,每2位一组,如大于0则向右移2个空格。

分享到:
评论

相关推荐

    西南交通大学数据库原理作业-第6章 关系数据库设计理论.docx

    在数据库设计中,我们需要将关系模式分解到不同的范式,以消除数据异常。第一范式(1NF)确保每个属性都是原子性的,第二范式(2NF)消除了非主属性对键的部分函数依赖,第三范式(3NF)进一步消除了非主属性对键的...

    数据库设计模式.pdf

    数据库设计模式是构建高效、可扩展的数据库结构的关键方法,主要目标是优化数据存储和查询效率,同时确保数据的一致性和完整性。以下是几种常见的数据库设计模式及其适用场景的详细解释: 1. **主扩展模式**: 主...

    数据库原理习题-(1)l.doc

    《数据库原理习题解析》 在IT领域,数据库是存储和管理信息的...通过解答这些习题,我们可以深入理解数据库原理,掌握数据库设计、管理和查询的基础知识,这对于从事IT行业,特别是涉及数据存储和处理的工作至关重要。

    关系数据库模式规范化设计.pdf

    关系数据库模式规范化设计是关系数据库设计中的一种重要技术,旨在解决数据库设计中的数据冗余和数据不一致问题。该技术通过将关系模式中的数据分解成更小的、独立的数据单元,从而提高数据的完整性和一致性。 关系...

    数据库试题-SQLSERVER试题

    4. 规范化:规范化是数据库设计中优化关系模式的过程,主要依据是关系规范化理论。它通过分解关系以消除异常,提高数据的一致性和减少冗余。 5. E-R模型转换:在E-R模型转换成关系模型的过程中,每个实体类型、M:N...

    Delphi数据库编程习题答案

    【Delphi数据库编程习题答案】的章节涵盖了数据库系统的基础知识和关系数据库的基本理论,以及实体...以上就是Delphi数据库编程中涉及的关键知识点,涵盖了数据库系统基础、数据库设计和操作、以及数据建模等多个方面。

    关系数据库模式规范化设计.pptx

    关系数据库模式规范化设计是关系数据库设计的核心内容之一,旨在确保数据库模式的正确性、完整性和一致性。规范化设计的目的是将关系模式分解为更小的、更易于管理的部分,以避免数据冗余和数据不一致。 5.1 规范化...

    南京邮电大学数据库系统课后习题答案2.ppt

    数据库系统课后习题答案2.ppt 这份PPT文件是南京邮电大学数据库系统...这份PPT文件涵盖了关系数据库系统的基本概念、函数依赖、关係模式的分解、数据库系统的设计、规范化、查询和索引、安全和备份等方面的知识点。

    软件的架构与设计模式之什么是架构

    类似于建筑领域的模式,软件架构模式提供了一套标准的解决方案,可以应对常见的设计问题。例如,微服务架构模式可以提高系统的可扩展性和可维护性;事件驱动架构模式可以实现异步通信,提高系统的响应速度。 同时,...

    课程ERUP数据库设计.pdf

    在ERUP(Rational Unified Process)框架下,数据库设计是一个关键的技术环节,其目的是确保数据的高效、一致和有效存储。本课程主要关注如何通过一系列步骤优化数据库设计,以满足性能需求和业务逻辑。 首先,将...

    数据库原理复习题及答案A卷

    数据库原理复习题主要涵盖以下几个方面的知识点: ...以上内容详细解释了数据库原理复习题中的各个知识点,包括关系代数、关系数据模型、事务处理、并发控制、数据库设计、数据库恢复、SQL 语句以及数据库管理等方面。

    数据库技术习题同步练习ppt课件.ppt

    3. 关系数据库设计的工具:实体关系图、关系模式图等。 五、数据库应用 1. 数据库应用的类型:数据库应用包括OLTP(Online Transactional Processing)和OLAP(Online Analytical Processing)等。 2. 数据库应用...

    Northwind数据库

    1. 数据库设计:Northwind数据库展示了如何设计符合现实世界业务逻辑的表结构。包括如Customers(客户)、Orders(订单)、Products(产品)、Employees(员工)等表,这些表之间通过外键建立关联,体现了关系数据库...

    数据库编程基础知识习题答案

    数据规范化是通过属性的分解和关系模式的分解来提高数据库设计的质量,减少冗余和异常。常见的范式有第一范式(1NF)、第二范式(2NF)、第三范式(3NF)和更高的BCNF(Boyce-Codd范式)等。关系范式级别越高,数据...

    mysql大纲资料.txt

    MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),由瑞典的MySQL AB...这些知识点详细介绍了MySQL数据库系统的安装、操作、高级查询、数据库设计、性能优化和安全性等关键方面,是MySQL学习和应用的全面指南。

    Java面试题

    - 设计模式的好处,如何在项目中合理地运用设计模式。 6. 实际项目经验 - 项目中遇到的技术难题以及解决方法。 - 如何使用Java进行Web开发、数据库交互、文件操作等。 - 代码版本管理工具的使用,如Git、SVN的...

    数据库技术及应用知识点总结.doc

    本文总结了数据库技术及应用的知识点,涵盖了数据库的基本概念、数据模型、关系模型、E-R 模型、数据库设计、Access 数据库操作等方面的内容。 一、数据库基本概念 * 数据:对客观事物的数量、属性、位置及其相互...

    Delphi数据库编程_侯太平著_习题答案.

    外模式-模式映射实现了数据的逻辑独立性,即使数据库的物理结构或逻辑结构发生变化,应用程序也不必调整,从而降低了维护成本。 **6. 三层C/S结构** 三层客户端/服务器(C/S)架构包括客户机、应用服务器和数据库...

Global site tag (gtag.js) - Google Analytics