我见过一种设计,在数据库里面有一张用户关系表,表结构如下
CREATE TABLE relation (
relation_id private key AUTO_INCREMENT,//关系id
relation_fans text,//粉丝数据
relation_black text,//黑名单数据
relation_action text//关注数据
);
这样的设计有什么用意,如果要取得用户的关系数据 怎么取得?
迷茫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;
黑名單同理。
這是按照你給的表的方式處理的。我自己在做設計的時候,其實是給 關注/粉絲 建了一張表,黑名單又建一張表。依照自己的需求和習慣來就好了,無所謂選哪一種。
希望有用。