树形结构

参考 : 

http://cnn237111.blog.51cto.com/2359144/1226911

http://www.cnblogs.com/huey/p/4518979.html

我们经常会使用到树形结构,比如做产品分类,国家和州,等等等

 

那么用关系数据库来实现树形的方式也有很多,各有好坏(我最讨厌就是不统一),所以我们得依据我们的项目需求来采取不同的策略

第一种法案 :

id name parentId

特点:记入的关系少

 

比起其它方案优势是简单理解,在添加,修改时都不需要批量修改。

坏处就是在select的时候如果想要把子孙也找出来就需要用到递归了。SQL Server 的递归可以参考 : http://database.51cto.com/art/201010/229272.htm

适合项目 :

-如果你的树不大棵(比如你可以控制它的深度),那么就可以使用. 当需要做子孙select的时候先把整颗树拿出来,然后用 where id in (1,2,...)的方式去查询 

 

第2种是使用 :

id name parentId path 

特点是path可以保持子孙的关系

好处是我们可以使用 path like = parent% 获取到所有的child

坏处是insert 需要2个query, 第一是创建,第二是把new id 写进path 里头 

还有一个麻烦是在当需要修改parent时,它的所有子孙的path也需要修改 (如果项目可以限制这个需求那么就可以使用啦)

适合项目 : 

需要select子孙,不会修改parent,树小颗

 

第3种是使用另一个表来记入关系

好处是树可以很大颗, 查询子孙也很好

坏处是在做任何修改的时候,语句复杂,操作多

 

第4种 

left right key 

这和第3种差不多,都是支持大棵树,查询子孙友好

坏处也是一样,修改时有点复杂,操作比较多.

经过实验,我觉得这个还是不错的 .

table : ID,parentID,layer,leftKey,rightKey,text 

大家就依据项目来做吧

 

posted @ 2015-09-25 11:35  兴杰  阅读(281)  评论(0)    收藏  举报