1

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

树表

 id | name 
-------------
  1 |  tree1
  2 |  tree2
  3 |  tree3

将给出每棵树中的节点。

树节点表

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

4

2 回答 2

1

用一张表保持简单:

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

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

于 2012-11-07T13:34:32.803 回答
0

离开第一个表,离开第二个表中的“tree_id”列。

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

于 2012-11-07T13:28:09.060 回答