2011-05-06 30 views
0

我正在寫一個後端調查數據庫。數據庫是用於收集調查類型數據的多個應用程序的後端。我有一個架構,其中包含一個指定應用程序的表以及哪些問題屬於該應用程序。複雜的user_roles多對多設置

現在我需要設置用戶和...的UserRole

每個用戶可以訪問到1個或多個應用程序 每個應用程序都有1個或多個用戶

每個用戶可以在應用1個角色他們有權訪問 每個角色可能存在於1個或多個應用程序中每個用戶在每個應用程序中可能具有不同的角色。

APP1具有15個用戶1個用戶是管理員 APP1具有用於用戶的訪問定義2個角色

APP2具有從APP1 30級的用戶管理用戶具有訪問權限,但是一般使用者 2 APP2管理員用戶在APP1存在正常用戶 app2具有爲用戶訪問定義的4個角色。

警告自由形式的思維過程

,所以我有

應用程序 - > ApplicationUsers < -Users

也許我只需要一個連接表,然後這樣嗎?

enter image description here

這是正確?它會在EF 4.0中工作嗎?

什麼是使這項工作正確的方法?

回答

0

讓我們假設這個

每個用戶可以在他們訪問每個 角色可以在1個或多個 應用程序存在於每個用戶可以在每個應用程序 不同的角色 應用1層的作用。

應該這樣打斷。

每個用戶可以具有在它們有機會獲得 應用程序1層的作用,各 角色可以存在1個或多個應用程序 ,每個用戶可以具有在每個應用程序 不同的角色。

如果第一條意味着每個用戶必須有一個和他們有權訪問每個應用程序不超過一個角色,那麼你的模式將無法正常工作。 ApplicationUserRoles中的複合主鍵{ApplicationId,UserID,RoleID}允許每個用戶有多個角色。

要限制「每個應用程序每用戶一行(和一個角色)」約束,ApplicationUserRoles的主鍵應該只是{ApplicationID,UserID}。另外,如果UserID在表Users中是唯一的,那麼它可能應該是主鍵,並且您應該從該表中刪除「ID」列。

1

我認爲可能有幾種不同的方式來實現這些關係,而決定最佳方式的最大因素是您打算如何使用這些數據。可以按照你所描述的四個表格完成,我更喜歡單數,而不是所有表格的複數 - 對於個人而言,但你應該保持一致,如果其他表格是複數,則應該是一致的。由於關係是由所有三個實體定義的,所以這應該是表格的結構。但是,要問的問題是這些關係的順序?我認爲很明顯,無論用戶是否擁有用戶,應用程序都可以存在,而不管用戶當前是否與應用程序相關聯。但是,如果與應用程序無關,是否會存在角色?可能不是一個角色(即使它可能共享同一個名稱)在每個應用程序中可能都不完全相同。

另一個選項,也許更清楚(更好?)在邏輯上,將有一個角色(AppRole?)表與其中的應用程序FK和UserAppRole表使用戶與它相關聯。這將允許您定義一個相對於其應用的應用程序的角色,並通過適當的角色將用戶與應用程序相關聯。

應用 AppRole 用戶 UserAppRole

就像我說的,很多方法做到這一點,很多決定因素。

+0

+1給jdcook72有兩件事:(a)使用單數表名。這是更好的做法,但在EF中尤其如此,因爲您的模型將要複用導航屬性,這些導航屬性是相關子實體的集合,(b)ROLE屬於APP,因爲App A中的admin與admin中的admin不同應用程序B.這是一個直接的父母/子女關係,而不是一個十字路口。對於什麼值得,什麼jdcook調用「UserAppRole」,我會打電話給ROLE_MEMBER。 – 2011-05-06 23:17:12

+0

絕對是。我是從我當前工作環境的標準中思考的,表中的關係結構以及OP對UserAppRole的描述僅僅是它的第一個例子。鑑於我的druthers,我會使用RoleMember,因爲它有意義的語義,我認爲這是表名的優先級。雖然我必須說,從表名中提取一些結構是很方便的,但這是ERD真正的目的。 – jdcook72 2011-05-09 14:13:07