亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將好友列表實現到數據庫中的最佳方法?MySQL

將好友列表實現到數據庫中的最佳方法?MySQL

繁花不似錦 2021-12-01 19:06:58
所以我的項目有一個“朋友列表”,在 MySQL 數據庫中我創建了一個表:姓名A姓名B主鍵(名稱A,名稱B)這將導致大量條目,但為了確保我的數據庫規范化,我不知道如何實現這一目標?我的項目也使用 Redis。我可以將它們存儲在那里。當一個人加入服務器時,我必須搜索所有條目,看看他們的名字是nameA還是nameB,然后將這兩個名字放在一起作為朋友,這也可能效率低下。干杯。
查看完整描述

1 回答

?
慕工程0101907

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

這為配對中的兩個用戶提供了相等的價值。但是為了找到朋友,你需要通過:為用戶找到朋友,在這些朋友中找到朋友。但是,設計非常清晰,甚至可以擴展,即您可以擁有三個四個或更多用戶的友誼。


沒有一種方法確實比另一種好得多。


查看完整回答
反對 回復 2021-12-01
  • 1 回答
  • 0 關注
  • 366 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號