簡體   English   中英

mysql存儲動態列表的最佳方法

[英]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返回所有ScrutineersUserID 然后,遍歷成員變得非常簡單,無需進行解析。

User:
  UserID

Group:
  GroupID

Membership: (user is member of a group)
  GroupID
  UserID
  IsScrutineer
  IsPresident

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM