2011-08-27 54 views
1

我一個集成系統的朋友,我的網站的多個值的問題...MySQL表的佈局,關於同一列

我有一個問題關於MySQL表是如何被建立。

我會爲他們添加的每個朋友添加許多列,例如freind 1,2,3,4,5等,並且該行將是添加它們的用戶。

有沒有更好的方法來做到這一點?我的第一個想法是這樣做,這意味着有人可以擁有的朋友數量的上限......

+0

這樣做,你會有一個1行表,不是嗎?這不是很聰明的DB設計。我正在考慮像1表(id,friend.id,friend_id_who_added)和其他表友(ID,名稱) – Trefex

回答

3

您對多列的建議將違反first normal form。除了人爲地限制朋友的數量之外,這些結構是繁瑣的,並且效率低下。

您需要一個聯結表,用於形成複合主鍵的2列(userid1userid2)的朋友。兩列都與user表有FK關係。

在許多RDBMS中,你也會有一個檢查約束userid1 > userid2,所以一個關係只能以一種形式存儲,但我相信檢查約束是somewhat broken in MySQL

+0

+1:只有警告是複合主鍵不會停止反向重複。 IE:1,2和2,1被認爲是有效的複合PK值 –

+0

好吧你有什麼鏈接,我可以學習這種技術,謝謝 – carlgcoder

+0

@carlgoder - 我的答案的要點是真正的正常化。值得在[第一](http://en.wikipedia.org/wiki/First_normal_form),[第二](http://en.wikipedia.org/wiki/Second_normal_form)和[第三](http: //en.wikipedia.org/wiki/Third_normal_form)正常形式。 –

2

您將需要一個額外的表格,其中包含會員每個朋友的記錄。例如:

members (id, name) 
friends (member1, member2)