作家
登录

MySQL树状数据的数据库设计

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

  • 每增长的一个子节点,祖先路径都是在要增长的子节点的父节点的祖先路径上增长父id和',';参考的表构造如下:
    1. CREATE TABLE `t_node` ( 
    2.   `node_id` int(11) NOT NULL AUTO_INCREMENT, 
    3.   `node_name` varchar(50) NOT NULL
    4.   `p_id` int(11) NOT NULL
    5.   `ancestor_path` varchar(100) NOT NULL
    6.   PRIMARY KEY (`node_id`) 
    7. ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8; 

    2 祖先路径的萌芽

    设计的树节点的萌芽,重要有两种,一种是萌芽某个节点的所有后代节点(与萌芽祖先节点为某个已知节点的所有节点集合是一个意思),这种也是最常用的一种萌芽;一种是萌芽某个节点的所有祖先节点,这种不太常用。

       1. 萌芽某个节点的所有后代节点 参考示例如下:

    1. SELECT * FROM t_node  
    2. WHERE ancestor_path LIKE CONCAT( 
    3. (SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?)wt), 
    4. ?,',%'

    以上sql等于对id为?的某个节点的所有后代节点的萌芽方法一,还可应用以下方法:

    萌芽方法二的方法加倍简洁。但推敲到萌芽方法一只用到了右模糊萌芽,可以应用索引,所以照样建议应用方法一进行萌芽。

    须要留意的是以上两种方法查到的节点集合都不包含子节点,如不雅须要包含该节点的信息,还须要加上

    1. ... OR node_id=? 

        2. 萌芽某个节点的所有祖先节点

    以下为机构表的一个重置存储过程,供以参考:

    1. SELECT * FROM t_node WHERE node_id REGEXP  
    2. CONCAT('^('
    3. WordStr((SELECT * FROM (SELECT ancestor_path FROM t_node WHERE node_id=?) wt),',','|'), 
    4. '0)$'

    以上方法萌芽祖先节点的效力确切不是很高,但推敲到该萌芽本身并不消,便姑且用之了。

    3 祖先路径的插入,更新和删除

    分别分插入,更新和删除来讲:

       1. 插入

    1. INSERT INTO t_node (node_name,p_id,ancestor_path) 
    2. VALUE('node?',?, 
    3. CONCAT((SELECT * FROM (SELECT ancestor_path FROM t_node WHERE

        推荐阅读

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

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


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

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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