2011-01-13 67 views
2

我們正在設計一個名爲Person的簡單表的數據庫。每個人都可以有幾個與他有關的角色,比如客戶,員工,經理等等。每個角色都會附帶一個屬性列表,因此我們也爲每個角色提供一張表。將人際關係設計爲角色

現在我們需要將一個人連接到他的角色集。這樣做的最好方法是什麼?

到目前爲止,我們已經提出了兩種設計方案,我們不確定哪一種方案在擴展方面具有最佳性能,並且可能會引入更多角色並保持數據庫內的數據完整性。

我們的第一個設計應該有一張表,用於映射具有特定角色的人員和該角色表中的ID。在這個表中的條目看起來像

personid: 5 
role: 2 (manager) 
roleid: 6 (the id to look for in the manager table) 

雖然這種解決方案將與以後它通過使用外鍵不自然地實施數據完整性的缺點的過程中添加的進一步職責規模。

其他設計將有一個映射表每個角色。所以就用一個條目類似

personId: 5 
staffMemberId: 12 

該解決方案StaffMemberMapping表強制通過FKS數據的完整性,但也要求我們在幾個表,分別查找我們的人,看看哪個角色,他是與時間去看看。

這些解決方案哪一個有利?或者更好,如果還有第三種更好的解決方案,請提供建議。

回答

1

第二種解決方案似乎是自然選擇,因爲角色是對象之間的關係,並且您可以使用單獨的表爲關係數據庫中的單獨關係建模。我建議只有在有理由這樣做時,纔會偏離標準化的數據庫設計,所以我會選擇(2),並且只有存在性能問題時,纔會對數據庫進行非規範化並在(2)之外添加(1)以便查詢。