2010-06-11 71 views
1

我有一個關於數據庫'風格'的問題。這種關係的最佳數據結構

我需要一種存儲用戶帳戶的方法。某些用戶「擁有」其他用戶帳戶(子帳戶)。然而,並非所有用戶帳戶都是擁有的,只是一些。

是不是最好使用此表結構像這樣表示...

TABLE accounts (
ID 
ownerID -> ID 
name 
) 

...即使會出現在OWNERID列一些NULL值不具有所有者帳戶。

或者在風格上最好有兩個表格,像這樣。

TABLE accounts (
ID 
name 
) 

TABLE ownedAccounts (
accountID -> accounts(ID) 
ownerID -> accounts(ID) 
) 

感謝您的意見。

+0

它可以比一個層次更深嗎? 帳戶1擁有帳戶2擁有帳戶3和4嗎? – 2010-06-11 14:30:29

+0

不,只有1層深。 – Travis 2010-06-11 14:31:30

+0

我會與mdma的迴應。確定它是否擁有一個所有者,並且如果他們擁有一個所有者,那麼這個記錄很容易獲得,這仍然很好,很容易。 – 2010-06-11 14:33:19

回答

2

我會保持表格分開。

自引用外鍵可能會導致更新/刪除的很多痛苦。

對於組合表,所有者的級聯刪除將刪除所有擁有的帳戶。 (可能或不可取)。使用單獨的表格,級聯刪除只會刪除帳戶擁有的關係,而不是帳戶本身。

0

第二選擇是最好的。

從理論的角度來看,它是一個'n-m'(或'多對多')關係的迴歸,其中'n'和'm'邊表合併成一個獨特的'帳戶'表,並且'OwnedAccount'表是鏈接表。

使用此模型將允許您在服務器級別實施數據完整性規則,而不會出現任何問題。除了#mdma參數之外,它還會使查詢和報告更容易。所有權規則的進一步「擴展」(一個賬戶的多個所有者,級聯所有權)也可以在此模型中實施。