一個系統一定會有使用者,而複雜一點的系統就會讓不同的使用者有不同的存取權限,而要達成這樣的需求該如何設計呢?
在這之前工作上有稍微接觸,但終究沒有自己設計過,也不知道現實的實際應用情況為何,剛好最近在Facebook的Backend 台灣 (Backend Tw)社團看到有人提出下面問題,所以趁這機會也來設計看看。
請教大家在設計資料庫時,假設使用者帳號會有3種類型(管理員、員工、與公司),會如何去做設計呢? 我的做法是:分別會有『管理員、員工、公司』三張資料表,還有一張資料表儲存『角色』類型。
不過這種做法,在需要紀錄是哪個使用者進行資料庫操作時,會導致每筆資料需要額外儲存『角色類型』。 如:新增或修改一項產品時,都要記錄誰新增或修改 那麼在產品資料表就要有 『新增使用者』、『新增角色類型』、『修改使用者』、『修改者角色類型』
(藍色文字是我揣測作者原意做的修改,原文是"...那麼在產品資料表就要有 『新增者角色類型』、『新增者角色類型』、『修改者角色類型』、『修改者角色類型』")
因為管理員、員工、公司資料在不同資料表,他們有各自的流水號都是從1開始。 假設帳號不分開資料表儲存,就會有id為1的公司、id為1的員工還有id為1的管理員無法同時存在的帳號資料表的問題。...
不過想請問針對 每個需要紀錄『新增者與修改者』的資料表都會需要存他的role與id,有什麼更好的改善方式嗎?...
圖中的三個使用者存的資料都是id與name與phone,這是為了解釋而簡化過後的資訊,實際上員工可能會有職稱、性別、員工編號等欄位,如果將公司資訊一併儲存在同一張資料表,不是會違反正規化嗎?...
..................
依照原po的ER-Model應該如下。
所以我參考RBAC的設計改成如下。不過對於不同角色擁有不同的屬性的設計(user_role_attribute
資料表)也不知道這樣是否可行,希望高手能看到能幫我批改一下。至於role
對自己的一對多關係是階層(母子)關係。
但後來想想,上面的設計還是有問題,必須要有個表紀錄每個角色所擁有的屬性,也就是下面的role_attribute
,但不紀錄屬性值,因為同個角色但不同使用者的同個屬性值會不同,所以使用者的角色屬性要記錄在另一張表user_role_attribute
。
2 則留言:
想請問這個圖表是用什麼畫的?
MySQL Workbench的eer diagram功能
張貼留言