树的数据库模式

时间:2012-11-07 13:20:53

标签: database-design tree database-schema

我想为树创建数据库模式。除根记录外,每条记录都有一个父记录。

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用于快速识别记录所属的树。

2 个答案:

答案 0 :(得分:1)

用一张桌子保持简单:

create table trees (
  id        integer primary key,
  name      varchar not null,
  parent_id references trees)

这为您提供了所需的所有逻辑元素。如果您需要更多特定优化,那么在确定真正需要它们之后再考虑它们

答案 1 :(得分:0)

不要使用第一张表,并在第二张表中留下“tree_id”列。

除此之外,你的设计非常好。对于几个不提供递归/循环查询的数据库,有一个“嵌套集”树模型更适合用非递归或循环查询读取,但我会远离它 - 它在改变时性能非常糟糕大树。