社交系统中用户好友关系数据库设计
在社交類系統(tǒng)中,用戶與用戶的好友關(guān)系的設(shè)計(jì)必不可少,那么如何設(shè)計(jì)好友的數(shù)據(jù)庫至關(guān)重要,本篇文章帶大家學(xué)習(xí)一下相關(guān)的設(shè)計(jì)方案。
基礎(chǔ)分析
第一步,有一張用戶表,表內(nèi)包含用戶的基本信息,比如賬號、姓名、性別等信息。這里用tb_user表示用戶信息表。
ID 用戶名
1 張三
2 李四
3 王五
4 趙六
第二步,需要將用戶與用戶直接建立好友關(guān)系。這里有兩種情況:單向好友關(guān)系、互為好友關(guān)系。
- 單向好友關(guān)系就是張三在李四的好友列表中,但李四沒有在張三的好友列表中;
- 互為好友關(guān)系,如果張三和李四為好友,則雙方都在彼此的好友列表中;
好友關(guān)系設(shè)計(jì)
無論上面兩種關(guān)系的哪一種,好友關(guān)系表都可以使用下面的設(shè)計(jì),表tb_friend:
ID user_id friend_id
1 1 2
2 1 3
示例中,張三擁有李四和王五兩個(gè)好友。
單向好友模式
如果是單向好友模式,那么兩個(gè)人互為好友關(guān)系則插入的數(shù)據(jù)應(yīng)該是這樣:
ID user_id friend_id
1 1 2
2 2 1
也就是張三是李四的好友,李四也是張三的好友。此時(shí)使用sql語句查詢時(shí)只用限定user_id作為條件即可查詢出用戶的好友列表:
select * from tb_friend where user_id = 1
1
互為好友關(guān)系
因?yàn)槭腔楹糜殃P(guān)系,則只需要插入一條數(shù)據(jù)即可。對應(yīng)的查詢語句為:
select * from tb_friend where user_id = 1 or friend_id = 1
1
2
當(dāng)然也可以使用UNION ALL來實(shí)現(xiàn):
select friend_id as friends from tb_friend where user_id = 1
UNION ALL --使用UNION ALL,因?yàn)椴淮嬖谥貜?fù)的
select user_id as friends from tb_friend where friend_id = 1
1
2
3
注意事項(xiàng):
- user_id1–>friend_id2和user_id2–>friend_id1是相同的記錄,不需要重復(fù)插入;
- 為了快速判斷兩個(gè)人是不是好友,可在程序?qū)硬迦霐?shù)據(jù)前添加一個(gè)限制user_id1 < user_id2;
- 可加入緩存層(Redis或Memcached)來提高性能;
- 可從數(shù)據(jù)庫層限制(user_id,friend_id)不可重復(fù);
加入分組
如果好友數(shù)量比較多,關(guān)系比較復(fù)雜,可引入好友分組,可進(jìn)行如下改造:
ID user_id friend_id user_group friend_group
1 1 2 好友 同學(xué)
2 1 3 同學(xué) 同學(xué)
在數(shù)據(jù)庫中添加了user_group,當(dāng)前user給friend設(shè)置的分組,friend_group是當(dāng)前user的朋友對其設(shè)置的分組類別。
于是,查詢好友列表的SQL如下:
select friend_id as friends ,user_group as my_group from tb_friends where user_id = 1
UNION ALL
select user_id as friends , friend_group as my_group from friend_id = 1
1
2
3
4
5
小結(jié)
至此社交系統(tǒng)中好友關(guān)系的設(shè)計(jì)及SQL語句使用基本完成。可根據(jù)具體的業(yè)務(wù)情況進(jìn)行修改。在查詢除好友的id列表之后就可以進(jìn)行好友信息的查詢。此處需要注意的是如果用in語句來查詢會(huì)有不走索引、sql語句大小限制、性能等問題,可考慮使用左連接進(jìn)行查詢。
————————————————
https://blog.csdn.net/wo541075754/article/details/82733278
總結(jié)
以上是生活随笔為你收集整理的社交系统中用户好友关系数据库设计的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 沉浸式家庭影院!理想L9音响系统揭秘:共
- 下一篇: ant design pro : 依赖项