作家
登录

MySQL树状数据的数据库设计

作者: 来源: 2017-09-27 12:54:21 阅读 我要评论

0 树状数据的分类

我们在mysql数据库设计的时刻,会碰到一种树状的数据。如公暗琅绫擎分开数个部分,部分下面又各自分开数个科室,以此形成树状的数据。关于树状的数据,按层级数大年夜致可分为一下两类:

分类 特点 固定命量层级 层级数量固定,每一层级都有各自的意义,如集团-分公司-部分-科室,省-市-区等 可变数量层级 层级数量不固定,前几层级可能会有特别含义,但整体在相昔时夜典范围内是浮动的

前者的长处在于,因为每一层级均有各自含义,数据库的┞符体设计更为便利,可将某一子节点的不合上级节点均存储在数据库中,同样以某集团为例:

节点code 节点名称 节点层级 父级节点code 1级祖先code 2级祖先cdoe 010000 公司1 1 000000 null null 020000 公司2 1 000000 null null 010300 制造部 2 010000 010000 null 010400 品德部 2 010000 010000 null 010301 前工程制造 3 010300 010000 010300 010303 组装制造 3 010300 010000 010300

如许设计的表格冗余较多,但在各类类型萌芽的时刻效力较高.在插入,更新(含子机构,因为营业逻辑特点,机构之间的更新一般是平行转移),删除(含子机构)的时刻,因为冗余信息较多,数据操作时所需进行的萌芽获得也较简单。根据情况,部分冗余信息也推敲删去,如父级节点code,删去一些设计必定会导致部分萌芽的效力或复杂度晋升,这个就须要根据实际情况来弃取均衡了。

缺点有两个:

  1. 一个是当层级数量较多的时刻,须要存储大年夜量的冗余信息.当然也可以推敲节约筹划:1)不存储像n级祖先code如许的字段,但如许就无法应用固定层级设计带来的高效萌芽特点,是不建议这么做的;2)n级存储不应用code而改用id,如许做主如果在数据迁徙或者他表应用的时刻不便利。
  2. 另一个缺点是,当需求方给出请求,须要对当前机构从新洗牌,变革层级数的时刻,你会异常头疼。

后者的优缺点则与前者的优缺点正好相反,非固定的层级限制异常灵活,而缺点就是萌芽及数据操作上两方面的不便,这也是本文所要讲述的重点,即若何设计非固定层级的树状数据。

1 非固定层级树状数据的设计方法--祖先路径

树状数据最简单的一种设计方法是,只增长父级id。但这种设计方法给萌芽后代节点带来了极大年夜的不便,据我所知,尚没有一种不经由过程函数/存储过程如许轮回遍历的萌芽方法,来一次获取某个节点的所有后代节点或是祖先节点。(此前找到过一个较复杂的萌芽后代节点的sql,应用的也是祖先节点的id大年夜于后代节点id的特点,但有可能存在经由过程更新节点使后代节点id大年夜于祖先节点id,所以也不严谨,在此一向行胪陈)

对于非固定层级树状数据的一种设计方法是:增长祖先路径(ancestor_path),具体可参考下表:

id | 节点名称 | 父id | 祖先路径

  1. --- | --- | --- | --- 
  2. 1 | node1 | 0 | 0, 
  3. 2 | node2 | 0 | 0, 
  4. 3 | node1.1 | 1 | 0,1, 
  5. 4 | node1.2 | 1 | 0,1, 
  6. 5 | node2.1 | 2 | 0,2, 
  7. 6 | node1.1.1 | 3 | 0,1,3, 
  8. 7 | node1.1.2 | 3 | 0,1,3, 
  9. 8 | node1.2.1 | 4 | 0,1,4, 
  10. 9 | node2.1.1 | 5 | 0,2,5, 

Mysql树状数据的数据库设计

实际设计时,还可推敲参加层级这个冗余字段,但我在实际应用的过程中很罕用到这个字段。

如许,在加了这个字段之后,随便率性节点的所有祖先节点信息就都可经由过程如许一条数据全部获取。

  1. SELECT * FROM t_node WHERE ancestor_path LIKE CONCAT('%,',?,',%'

祖先路径的设定具有以下特点:

  1. 没有父节点的根节点,父id默认为'0',祖先路径默认为'0,';
  2.  1/7    1 2 3 4 5 6 下一页 尾页

      推荐阅读

      每个程序员都该知道的五大定律

    定律-或称轨则,可以指导我们并让我们在错误的缺点中进修。这篇文┞仿中,我将介绍我每次设计或实现软件时涌如今我脑海的五大年夜定律。个中有些和开辟有关,有些和体系组织有关。它们可以赞助你成为合>>>详细阅读


    本文标题:MySQL树状数据的数据库设计

    地址:http://www.17bianji.com/lsqh/37612.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)