[英]mysql best way to store dynamic list
我對數據庫設計有一個小問題:
假設我有一個“(用戶)組”表。 在此表中,存在一些基本字段,其中包含有關該組的信息(創建日期,名稱等),以及一個應包含該組用戶列表的字段。
我有一個“用戶”表,其中包含有關用戶的信息(真的嗎?)。 該表未與組表鏈接,因為不強制用戶具有組。
在一個組中,用戶可以是“主席”(僅一個)或“監票員”(多個)
因此,在“組”表中,將有一個“總裁”字段,其中包含總裁用戶ID。 而且我需要一個“ scrutineer”字段,其中將包含審查員ID的列表。
我不知道該如何處理這份清單。 也許將每個ID存儲在一個文本字段中,並用一個字符(';'或'-')分隔...
制作另一個表似乎很奇怪,因為它只是站點的很小一部分。
您將如何解決?
我不知道該如何處理這份清單。 也許將每個ID存儲在一個文本字段中,並用一個字符(';'或'-')分隔...
不要這樣 請參閱在數據庫列中存儲定界列表真的那么糟糕嗎?
制作另一個表似乎很奇怪,因為它只是站點的很小一部分。
這是代表多對多關系的正確,規范化的方法。
如果一個用戶最多只能屬於一個組(多對一關系),則可以將其組成員身份存儲在users
表中(如果該用戶不在任何組中,則保留NULL
列),並在其中標記一個決定他們的成員身份是president
還是scrutineer
,或者假定他們是scrutineer
除非他們也是groups
表中的president
。 但是,在這種情況下,我可能仍然傾向於使用附加表並在user
列上定義UNIQUE
約束。
假設一個用戶可以屬於多個組,那么您將得到多對多關系。 通常可以通過創建關聯表來解決。
Groups
id, name
Users
id, email, etc.
Users_Groups
group_id, user_id
就像有些人說的那樣,它的數量很多,所以您需要一個中介表來存儲用戶與組之間的關系。 用戶所屬的每個組都是中間表中的一項,我將其稱為“成員資格”,這是我存儲成員資格的位置。 主席等描述了用戶與組的關系,因此,成員資格表是存儲的邏輯位置。
當您對稍微復雜一些的查詢(例如聯接)感到滿意時,這種架構就不再那么令人生畏了
與您的架構進行比較-獲取小組主席的ID
SELECT PresidentID FROM Groups WHERE GroupID=...
至:
SELECT UserID FROM Membership WHERE IsPresident=TRUE AND GroupID=...
或相同的查詢,僅對於IsScrutineer=TRUE
返回所有Scrutineers
的UserID
。 然后,遍歷成員變得非常簡單,無需進行解析。
User:
UserID
Group:
GroupID
Membership: (user is member of a group)
GroupID
UserID
IsScrutineer
IsPresident
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.