1

ツリーのデータベース スキーマを作成したいと考えています。各レコードには、ルート レコードを除く親があります。

ツリーテーブル

 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

最適化されていないと思いますが、より良いデザインを持っている人はいますか?

UPDATE: はtree_id、レコードが属するツリーをすばやく識別するために使用されます。

4

2 に答える 2

1

1つのテーブルでシンプルに保ちます。

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

これにより、必要なすべての論理要素が得られます。特定の最適化がさらに必要な場合は、それらの真の必要性を特定した後で検討してください。

于 2012-11-07T13:34:32.803 に答える
0

最初のテーブルを残して、2 番目のテーブルの「tree_id」列を残します。

それに加えて、あなたのデザインはかなり良いです。再帰/ループクエリを提供しないいくつかのデータベースには、非再帰クエリまたはループクエリでの読み取りに適した「ネストされたセット」ツリーモデルがありますが、私はそれを避けます-変更時のパフォーマンスは非常に悪いです大きな木。

于 2012-11-07T13:28:09.060 に答える