<1>一个具有树状结构的实体在数据库里如何保存?
1、层次码
实体编码采取层次码的结构,如
ID Name
01 A
0101 B
010101 D
010102 E
0102 C
010201 F
优点:查询方便。在已知编码规则的情况下,查询一个节点的父子节点是很容易的。
缺点:“移枝”困难。如把B及B的子节点移到C下,必须必须改变B及B的子节点的编码。
2、父节点字段
增加一个字段表示该节点的父节点,如:
ID Name ParentID
1 A 0
2 B 1
3 C 1
4 D 2
5 E 2
6 F 3
优点: “移枝”容易,改变树的形状容易。
缺点:查询某节点的子树复杂。
<2>当树状结构的组成节点是不同实体如何存储?
如:产品由部件和零件组成。他们是不同的实体。产品树该如何存储?
装配模式:有实体表和装配结构组成。
如:
实体表:
ID Name
1 A
2 B
3 C
4 D
5 E
6 F
注:上表的每条记录可能代表不同实体(如可能是零件,也可能是部件,这里将他们放入一张表中)。
装配结构:
ParentID ChildID Quantity
1 2 1
1 3 1
2 4 1
2 5 1
3 6 1
注:Quantity(或其他属性)标明该边所具有的属性。
装配结构也可以这样表示:
ID EntityID Quantity
01 1
0101 2
010101 4
010102 5
0102 3
010201 6
采用装配模式结构定义数据模型具有结构关系重定义的灵活性。
<3>树状结构在程序中的操作
1、展开树
2、修改某一节点的属性
3、在某节点下增加节点
4、移动子树