首頁  >  問答  >  主體

java - 社交网站的用户关系数据是怎么设计的,比如关注数,黑名单数,粉丝数等等。

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

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

怪我咯怪我咯2763 天前482

全部回覆(2)我來回復

  • 迷茫

    迷茫2017-04-17 13:06:32

    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;

    黑名單同理。

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

    希望有用。

    回覆
    0
  • 高洛峰

    高洛峰2017-04-17 13:06:32

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

    回覆
    0
  • 取消回覆