2011-10-02 184 views
1

這個問題我猜很微不足道。但是, 例如,我有實體:用戶(id,名稱),組(id,名稱),user_group(user_id,group_id)和圖庫(id,name,owner_id)。 畫廊的老闆可能用戶或組關係數據庫中的關係「OR」

什麼是關係數據庫中的最佳解決方案?

謝謝!

PS如果有人知道關係代數和模式優化。它會是什麼樣子?

我在想所有者(ID,USER_ID,GROUP_ID),但我沒有任何想法如何顯示「或」關係代數方面的關係。

回答

0

將所有者和組合爲一個表。所有者和組只應根據它們在此表中的屬性的不同而不同,或者將此新表與自身(「是」的成員)聯繫起來的關係表中存在/不存在行。

0

有一個用戶和一個組(僅一個概念的一個)之間沒有差別的技術。

把兩者到相同的表(user)和標誌的行的類型(組或用戶)在第二字段中。

使用應用程序邏輯確保只有一行可能在user_group表中有「有孩子」。

1

最簡單的解決方案將是一個關係Owner(id, user_id, group_id)其中可以設置user_idgroup_id - 用適當的約束來保護它。

摺疊GroupUser到一個表拖動從數據庫多項一致性檢查到應用程序中的邏輯:

  • 甲基團可具有不僅用戶,但其它基團(遞歸和/或INFINIT cylces前方)。
  • 如果UserGroup在一些地方使用了更adaptions可能是必要的。
  • 數據一致性不能再由數據庫強制執行。
0

引入一個新的實體OWNER並使其成爲集團的所有者。然後使USER和GROUP類別(即「繼承」它們)OWNER。

你ER模型是這樣的(僅顯示PK場):

enter image description here

從理論上講,存在實現在物理數據庫3類主要途徑。他們都有優點和缺點,但是你的模型中,溶液1可能是最合適的:

  1. 使用所有者,用戶和組單獨的表,並將其通過外鍵連接。
    • 在這種情況下,您可能會也可能不會在OWNER中使用鑑別器(即類型標識符)。
  2. 將USER和GROUP放在單獨的表中,其中OWNER的字段同時存在於兩個表中。
  3. 將OWNER,USER和GROUP放在同一個表中。