2012-11-07 41 views
1

我想創建樹的數據庫模式。除了根記錄以外,每條記錄都有一個父節點。樹的數據庫模式

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

一旦開始將樹中的節點從樹移動到樹,tree_id可能會導致頭痛。這是多餘的,因爲你的父母已經定義了它。並且父母的父母也... – Argeman

+0

http://stackoverflow.com/questions/6567385/how-to-represent-a-tree-like-structure-in-a-db/6568146#6568146 –

回答

0

離開第一個表格,離開第二個表格中的「tree_id」列。

除此之外,你的設計是相當不錯的。對於少數不提供遞歸/循環查詢的數據庫,「嵌套集」樹模型更適合用非遞歸或循環查詢進行讀取,但我會遠離它 - 它在更改時具有極其糟糕的性能大樹。

1

保持簡單用一個表:

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

這給你所有你需要的邏輯元素。如果您需要更多的特定優化,那麼在您確定真正需要它們之後再考慮它們