我一個集成系統的朋友,我的網站的多個值的問題...MySQL表的佈局,關於同一列
我有一個問題關於MySQL表是如何被建立。
我會爲他們添加的每個朋友添加許多列,例如freind 1,2,3,4,5等,並且該行將是添加它們的用戶。
有沒有更好的方法來做到這一點?我的第一個想法是這樣做,這意味着有人可以擁有的朋友數量的上限......
我一個集成系統的朋友,我的網站的多個值的問題...MySQL表的佈局,關於同一列
我有一個問題關於MySQL表是如何被建立。
我會爲他們添加的每個朋友添加許多列,例如freind 1,2,3,4,5等,並且該行將是添加它們的用戶。
有沒有更好的方法來做到這一點?我的第一個想法是這樣做,這意味着有人可以擁有的朋友數量的上限......
您對多列的建議將違反first normal form。除了人爲地限制朋友的數量之外,這些結構是繁瑣的,並且效率低下。
您需要一個聯結表,用於形成複合主鍵的2列(userid1
,userid2
)的朋友。兩列都與user
表有FK關係。
在許多RDBMS中,你也會有一個檢查約束userid1 > userid2
,所以一個關係只能以一種形式存儲,但我相信檢查約束是somewhat broken in MySQL。
+1:只有警告是複合主鍵不會停止反向重複。 IE:1,2和2,1被認爲是有效的複合PK值 –
好吧你有什麼鏈接,我可以學習這種技術,謝謝 – carlgcoder
@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)正常形式。 –
您將需要一個額外的表格,其中包含會員每個朋友的記錄。例如:
members (id, name)
friends (member1, member2)
這樣做,你會有一個1行表,不是嗎?這不是很聰明的DB設計。我正在考慮像1表(id,friend.id,friend_id_who_added)和其他表友(ID,名稱) – Trefex