我目前正在設計一個數據庫模型,並且遇到了一個問題,在哪裏我想了解更多有關什麼是正確的做事方式的輸入。數據庫設計 - 關聯實體
在下面的例子中,我有兩個表,人員和角色。 現在1人可能被分配0個或更多角色。 這與多對多的關係相當直接,但棘手的部分來自於當你想允許用戶選擇他當前「操作」的角色時。
假定用戶有一個選擇5個角色可供選擇,並且根據他目前選擇了哪個角色,應用將呈現與他不同的意見/菜單/按鈕/等
我看到了兩個解決方案在這裏:
1:(見下面鏈接的圖像的頂部)
在個人表,你有一個可以爲空FK的許多一對多的關係(關聯實體)。
維基百科上Associative entity
它似乎確定爲「其他實體」來引用這種關係。我只是不完全確定這是否包括角色和人員實體。
我對這個設計的喜歡是,很容易得到一個人所有允許角色的列表,然後你只需指向其中一個允許的角色,說「你是當前/活動的角色」 。這也是一種很好的方式,以確保用戶只能擁有最新的角色,如果他有權訪問該角色......只有我也看到了潛在的災難: 如果在persons表中的FK引用另一個用戶的關係。數據庫設計將允許這樣做。這隻會是防止它的代碼。
2:(見下面鏈接的圖像的底部)
我把關聯實體簡單,而是我有FK在指向的角色表中的特定角色的人表。
這裏的問題是我從DB設計中獲得的幫助更少,確保一個人的「當前角色」是一個實際上「允許」的角色。
任何對此的思考,將不勝感激=)
更新:我有同樣的問題的另一種變體。
兩個實體:工作訂單和站點
- 1網站可以訪問許多工作單
- 1工單可以被很多網站訪問
因此,我們有一個多TO-許多關係
問題:我們如何最好地在數據庫中存儲哪個站點是工單的所有者,哪些站點只能擁有一個擁有工單的站點。
我們是否將「OwnerSiteId」作爲WorkOrder表中的列,或者是否可以引用多對多關係,而是說「那一個」是所有者。
類似於:http://stackoverflow.com/questions/12652152/mysql-circular-dependency-in-foreign-key-constraints –