我有2個實體:用戶和組。最簡單的模型是用戶(id,名稱等),組(id,名稱),user_group_rel(user_id,group_id)。但我需要將團體納入其他團體。一個用戶可以在許多組中,並且組可以包括具有自己的用戶和子組的用戶和子組! 需要數據庫模型幫助!數據庫用戶和組模型
回答
儘管我同意Ken Down的命名法,但我並不一定同意用戶和角色是同一個實體。
基地的實體:
Users (user_id, user name, real name, user_status, etc)
Role (role_id, role name, role_password, etc)
Privilege (priv_id, base object, functionality, what have you)
關聯實體:
User has Role (0 - n) (user_id, role_id)
Role has Role (0 - n) (role_id, has_role_id)
User has Privilege (0 - n) (user_id, priv_id)
Role has Privilege (0 - n) (role_id, priv_id)
這些天,這是由用戶和組坍陷進入「角色」來完成。你所擁有的只是角色,並將角色鏈接到其他角色。有些角色的「登錄」標誌設置爲true,使其成爲有效用戶,而沒有設置「登錄」標誌的角色更像組。
其主要思想是這使得一切都更簡單。您不必維護兩個單獨的概念或實體(用戶和組),但只有一個概念:角色。然後你使用該用戶的「登錄」標誌。
編輯:對於表結構來看@XIVSolutions提供的第一個選項,他詳細說明了我在上面提到的內容。它回答了你將一個角色放入其他任何角色的問題。第二個表格是交叉引用,列出了一個角色及其父代。如果一個角色有多個父母,意味着該表中有多個條目,那麼這就像在許多組中有一個用戶。
#DIT:還有:@XIVSolutions表設計,第三個表是將用戶(登錄)作爲單獨管理實體的完全合法方式。
重:肯·唐斯的解決方案:
我已經與這兩個版本的播放(和會喜歡聽,如果這是在目標或不...):
選項1:
**tblRole**
RoleID PK
RoleName
**tblRoleIndex**
ParentRoleID FK on tblRole
ChildRoleID FK ON tblRole
NOTE: ParentRoleID and ChildRoleID form a composite Primary key in the above table.
**tblLogIns**
LogInID PK
RoleID
PassWord
或者,選擇2:
**tblRole**
RoleID
ParentRoleID Recursive FK on tblRole.RoleID
RoleName
NOTE: A top-level role in the table above has a default ParentRoleID of -1 or 0
**tblLogIns**
LogInID PK
RoleID
PassWord
我越來越近了。對於它的價值,Adam的解決方案也很有趣,而且可能比我的更好。 – XIVSolutions
我受騙 - 這是Oracle在內部使用的用戶和組的模型。 8-) –
@亞當 - 嗯,這不就是生活的全部嗎?避免重新發明車輪? ;-) – XIVSolutions
主要癥結建模,這是如何既用戶和組當作組的成員。 Ken Downs的方法將解決這個問題。另一種方法是治療用戶和和組作爲派生類型的公共基類型的:
這種方法的create table groupmemberbase
(
memberid int,
--optional flag to idicate the type of the derived entity
--this is similar to the login flag used by Ken Downs
membertype int,
primary key (memberid)
)
create table users
{
memberid int,
--more user attributes here
primary key (memberid),
foreign key (memberid) references groupmemberbase (memberid)
)
create table groups
(
memberid int,
--more group attributes here
primary key (memberid),
foreign key (memberid) references groupmemberbase (memberid)
)
create table groupmembers
(
groupid int,
memberid int,
primary key (groupid, memberid),
foreign key (groupid) references groups (memberid)
foreign key (memberid) references groupmemberbase (memberid)
)
一個優點是,它可以防止用戶或組從偶然成爲用戶的成員 - 該限制在模式級別執行。
我也喜歡。從來沒有想過這種方法,但它似乎簡單,乾淨,優雅。 – XIVSolutions
- 1. 用戶和組數據庫
- 2. 用戶訂閱的數據庫模型
- 3. 設計用戶/組ACL數據模型
- 4. ZF2 - 數據庫和模型
- 5. 用戶和數據庫模式衝突
- 6. 組和用戶的數據建模
- 7. Django模型:數據庫設計爲用戶和跟隨
- 8. 數據庫建模與2型用戶(網頁和Twitter)
- 9. 應用數據庫模型
- 10. 數據庫消息爲多個模型類型 - 用戶,組,全局
- 11. 製作用戶支持票據系統的數據庫模型
- 12. 用戶和組連接模型驗證
- 13. CakePHP 2.0模型關係(組和用戶)
- 14. Rails:模型和數據庫表
- 15. Ruby模型和數據庫表
- 16. 數據庫模型和性能
- 17. 數據庫和網絡服務模型
- 18. 安全模型和現有數據庫
- 19. yii和非數據庫模型
- 20. Exrin:數據庫模型,服務和MainModels
- 21. Django的,模型和多個數據庫
- 22. Cakephp模型和數據庫約定
- 23. Django模型和數據庫同步
- 24. Zend模型和數據庫關係
- 25. EF中的模型和數據庫
- 26. 數據庫模型和擴展方法
- 27. oracle數據庫和用戶
- 28. 域模型和分組數據
- 29. 使用數組對象驗證非數據庫模型
- 30. 在使用數據庫的strongloop中獲取用戶模型
好的。我如何將羣組或用戶包含到多個羣組中? – VeroLom
我需要例子,因爲我是數據庫建模的新手。 – VeroLom
舉例來說,我建議以另一種方式進行:編輯您的問題以提供您想組織的特定安全性通配示例,然後我們可以修改答案以顯示這些解決方案是否適合這些問題。 –