比方說,我有一個包含兩個表(User和Store)的數據庫。 讓制定規則:數據庫中的外鍵或布爾值
- 用戶必須屬於一個商店
- 商店可以有一個或多個用戶
一個店雖然可能有一家商店的經理。什麼是最好的方法呢? 在Users表中添加'is_store_manager'布爾列,或者在Store表中創建一個類似manager_user_fk
的外鍵?我想這會創建一個多對多的關係,但這會很糟糕,但這對於選擇我認爲的用戶來說是一個穩固的限制。最好的方法是什麼?
比方說,我有一個包含兩個表(User和Store)的數據庫。 讓制定規則:數據庫中的外鍵或布爾值
一個店雖然可能有一家商店的經理。什麼是最好的方法呢? 在Users表中添加'is_store_manager'布爾列,或者在Store表中創建一個類似manager_user_fk
的外鍵?我想這會創建一個多對多的關係,但這會很糟糕,但這對於選擇我認爲的用戶來說是一個穩固的限制。最好的方法是什麼?
請勿在Store
上創建fk。這有點多餘,會使一些未來的SQL查詢更難。
您可以添加另一個表,UserType
與Manager
和Non-Manager
類型。然後,您可以在指向UserType的Users表上添加一個fk。
編輯:
如果你想要一個用戶被允許多個角色,你得找別的join table
:
讓我們叫的,而不是UserType
上表表Role
,並添加另一個表,UserRole
即User
和Role
之間的連接(它只有2列:一個外鍵User
和外鍵Role
採用這種設置,你不會有User
選項卡上的任何FK le,因爲這個連接表將包含關係的所有信息。然後,用戶可以擁有儘可能多的角色。
看起來像個好主意。但是如果我想要一個用戶同時擁有「store_manager」和「system_admin」這個角色呢?我會怎麼做? – Markinson
替代接受的解決方案,只允許用戶屬於一種類型,您可以使用我一直在做的工作來替換布爾狀態字段。創建一個名爲UserManager
的表,主鍵也是用戶的外鍵。
任何用戶UserManager
中的條目都是經理。要讓管理員只需加入UserManager
的用戶表。這也可以讓你存儲更多的元數據(即你可以在用戶成爲經理時存儲)。
然後,如果你想要一個AdminUser
表,你可以做同樣的事情。 AdminUser表中的任何用戶也是管理員。你可以有一個用戶(或沒有,或一個)。隨着存儲更多關於類型的元數據。
我個人建議添加一個名爲'Role'的表和一個名爲'UserRole'的鏈接表。基於標誌的方法肯定不會擴展,例如,您可能在大型商店中有一位副店經理。擁有鏈接表UserRole將允許用戶擁有多個角色。 – Jaco