1 回答

TA貢獻1887條經驗 獲得超5個贊
任務很普通。您想存儲 A|B 與 B|A 具有相同含義的對。由于表有列,兩者之一將存儲在第一列中,另一個存儲在第二列中,但是誰先存儲誰第二,為什么?
一種解決方案是始終首先存儲較小的 ID,然后存儲較大的 ID:
用戶 ID1 | 用戶名2
--------+--------
1 | 2
2 | 5
2 | 6
4 | 5
這樣做的好處是您每對只存儲一次,感覺很自然,但缺點是您必須在兩個 couns 中查找一個人,有時在第一列中找到他們的朋友,有時在第二列中找到他的朋友。這可能會使查詢變得笨拙。
另一種方法是冗余存儲對(通常使用觸發器):
用戶 ID1 | 用戶名2
--------+--------
1 | 2
2 | 1
2 | 5
2 | 6
4 | 5
5 | 2
5 | 4
6 | 2
在這里查詢更容易:在一個列中查找此人并在另一列中找到他們的朋友。但是,將所有對都復制看起來有點奇怪。而且你依賴于一些人不喜歡的觸發器。
第三種方法是存儲編號的友誼:
友誼 | 用戶身份
-----------+--------
1 | 1
1 | 2
2 | 2
2 | 5
3 | 2
3 | 6
4 | 4
4 | 5
這為配對中的兩個用戶提供了相等的價值。但是為了找到朋友,你需要通過:為用戶找到朋友,在這些朋友中找到朋友。但是,設計非常清晰,甚至可以擴展,即您可以擁有三個四個或更多用戶的友誼。
沒有一種方法確實比另一種好得多。
添加回答
舉報