java - 社交网站的用户关系数据是怎么设计的,比如关注数,黑名单数,粉丝数等等。
怪我咯
怪我咯 2017-04-17 13:04:32
0
2
464

我见过一种设计,在数据库里面有一张用户关系表,表结构如下

CREATE TABLE relation (
relation_id private key AUTO_INCREMENT,//关系id
relation_fans text,//粉丝数据
relation_black text,//黑名单数据
relation_action text//关注数据
);
这样的设计有什么用意,如果要取得用户的关系数据 怎么取得?

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(2)
迷茫

text型?是存些什麼呢?很好奇。另外 private key 是筆誤還是?

你列出的這個 demo 裡,我看不出來如何取得使用者的關聯式資料。我自己設計時(當然也是我認為合理的方式)是這樣的(不完全照搬我自己的,是根據你的這個表改了一下):

CREATE TABLE relation (
id PRIMARY KEY AUTO_INCREMENT, //主键,自增
from_user_id big integer, // 用户 A 的 id
to_user_id big integer,// 用户 B 的 Id
rel_type enum(1,2) //关注数据
);

封鎖/粉絲/關注,在資料庫裡,存的都是一個映射關係的數字。例如,拉黑是 1,粉絲/關注是一個東西,是 2。那麼,一筆記錄裡的關鍵數據是:

  • from_user_id // 本筆記錄是哪個使用者啟動

  • to_user_id // 本筆記錄的接受方是哪一個使用者

  • rel_type // 發起者對接受者,做了什麼事情?存事情的類型

場景舉例

使用者 A 追蹤使用者 B

插入資料:

INSERT INTO relation (rel_type, from_user_id, to_user_id) VALUES(2, A.id, B.id)

用戶 A 的粉絲數:

select COUNT(*) from relation 
where rel_type=2 and to_user_id=A.id;

黑名單同理。

這是按照你給的表的方式處理的。我自己在做設計的時候,其實是給 關注/粉絲 建了一張表,黑名單又建一張表。依照自己的需求和習慣來就好了,無所謂選哪一種。

希望有用。

小葫芦

樓上說的差不多了
高並發下的話 最好把粉絲數 放到redis裡面哦~

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!