我想为树创建数据库模式。除根记录外,每条记录都有一个父记录。
tree_table
id | name
-------------
1 | tree1
2 | tree2
3 | tree3
将给出每棵树中的节点。
tree_node_table
id | name | tree_id | parent_id
---------------------------------
1 | a | 1 | NULL
2 | b | 1 | 1
3 | c | 1 | 2
4 | d | 1 | 2
5 | e | 1 | 4
6 | f | 2 | NULL
7 | g | 2 | 6
8 | h | 2 | 7
9 | i | 2 | 7
10 | j | 2 | 9
我觉得它没有优化,任何人都有更好的设计?
更新:tree_id
用于快速识别记录所属的树。
答案 0 :(得分:1)
用一张桌子保持简单:
create table trees (
id integer primary key,
name varchar not null,
parent_id references trees)
这为您提供了所需的所有逻辑元素。如果您需要更多特定优化,那么在确定真正需要它们之后再考虑它们
答案 1 :(得分:0)
不要使用第一张表,并在第二张表中留下“tree_id”列。
除此之外,你的设计非常好。对于几个不提供递归/循环查询的数据库,有一个“嵌套集”树模型更适合用非递归或循环查询读取,但我会远离它 - 它在改变时性能非常糟糕大树。