SQL反模式笔记2——分层存储与查询

这一章的“嵌套集”和“闭包表”,我赶脚着比较麻烦不实用,所以也就不细究了。

目标:分层存储与查询,比如地域字典表的存储

反模式:邻接表(总是依赖父节点)

  邻接表维护树比较方便,但是查询很笨拙,如果要找一个节点下的所有子节点,要关联很多次,这个关联次数取决于树的深度,所以,邻接表不能用于存储比较深的树。

识别反模式:

  我们的书一共有几层?

合理使用反模式:

  如果树结构不深,可以用。

解决方案:

  路径枚举:

    用一个path保存所有祖先的完整路径。

    优点:查询方便;

    缺点:1、不能保证存储的值的有效性。2、增、删时,要考虑对原位置下的子节点如何处理,比较麻烦。3、如果还要维护一个排序path,那就更麻烦了。

  嵌套集:

    用nsleft存储所有后台的nsleft中最小的数-1,用nsright存储所有后台的nsright中最大的数+1。

    优点:删除时,原来子节点的关系自动上移。

    缺点:1、查询一个节点的直接上级或下级,很困难。2、增、删,困难。

  闭包表:没看明白

结论:

  邻接表:简单,但不适用于很深的表

  枚举路径:无法保证引用完整性

  嵌套集:无法保证引用完整性,太复杂

  比报表:需要一个额外的表存储关系

个人意见:要么用邻接表,要么用邻接表+枚举路径。

  

posted @ 2012-05-03 08:01  日暮乡关何处是  阅读(672)  评论(0编辑  收藏  举报