2010-08-28 52 views
1

這裏給MySQL數據庫新手。我有一張USERS表和一張TEAMS表。用戶可以在多個團隊中。存儲用戶與他所在的團隊之間的關係的最佳方式是什麼?假設有數百個團隊,每個團隊由大約20個用戶組成,平均而言,一個用戶可能在大約10個團隊中,同時也注意到用戶可以不時更換團隊。mysql:處理用戶和團隊之間關係的正確方法?

我想到可能會添加一列到我的TEAMS表中,該表包含用戶標識的列表,但是我不得不向我的USERS表中添加一個列,其中包含團隊標識列表。雖然這可能是一個解決方案,但更新成員資格似乎很麻煩。似乎可能有更聰明的方式來處理這些信息......也許像另一張桌子一樣?思考?

謝謝!

ps,什麼是存儲列表的最佳字段類型,以及最好的劃分方式是什麼?

回答

4

什麼是存儲列表的最佳字段類型,以及最好的分隔方式是什麼?

嘗試將多個值存儲在單個列中通常是一個非常糟糕的主意。這是地獄處理,你永遠不會得到適當的參考完整性。

你真正想要的是join table。例如:

CREATE TABLE user_teams (
    user_id INT NOT NULL FOREIGN KEY REFERENCES users(id), 
    team_id INT NOT NULL FOREIGN KEY REFERENCES teams(id), 
    PRIMARY KEY (user_id, team_id) 
); 

所以不可能有任何數量的team_id S表示一個user以及用於一個team任何數量的user_id秒。 (但是主鍵確保有沒有重複相同的用戶和組的映射。)

然後選擇你可以說一個用戶團隊的細節是這樣的:

SELECT teams.* 
FROM user_teams 
JOIN teams ON teams.id= user_teams.team_id 
WHERE user_teams.user_id= (...some id...); 
+0

+1但爲什麼你是否聲明兩者都是主鍵? – Eldelshell 2010-08-28 21:10:18

+0

完美。正是我在找的東西。謝謝。 – ctown4life 2010-08-28 21:23:21

+0

@Ubersoldat:因爲它會停止user_id/team_id組合的重複項,但仍允許user_id與各種team_id的不同組合,反之亦然。 – 2010-08-28 21:35:45

相關問題