创建社交网络关系表

时间:2017-08-18 16:56:56

标签: mysql sql

大家好我需要帮助来创建我的关系表。基本上它需要看起来像这样

enter image description here

user_one_id和user_two_id是来自用户表的外键,状态显示当前关系状态(0表示挂起,1表示好友,2表示拒绝,3表示阻止),action_user_id是最有效的用户的ID最新的状态字段更新。为了避免重复,我在user_one_id和user_two_id上添加了一个唯一的。现在我希望user_one_id 始终小于 user_two_id。这是我被困的地方。以下是我迄今为止提出的内容

CREATE TABLE IF NOT EXISTS relationship (
user_one_id NOT NULL,
user_two_id NOT NULL,
status ENUM ('0','1','2','3') NOT NULL,
action_user_id NOT NULL,
UNIQUE (user_one_id, user_two_id))

2 个答案:

答案 0 :(得分:0)

向表中添加约束(假设外键是整数?)

CREATE TABLE IF NOT EXISTS relationship (
    user_one_id INT NOT NULL,
    user_two_id INT NOT NULL,
    status ENUM ('0','1','2','3') NOT NULL,
    action_user_id NOT NULL,
    UNIQUE (user_one_id, user_two_id)
    CONSTRAINT CHK_users CHECK (user_one_id < user_two_id)
)

这将保证只存储唯一的id对。

答案 1 :(得分:0)

我将在INSERT级别上为您提供一个示例。

SET @id_one = 10;
SET @id_two = 20;
INSERT INTO relationship (user_one_id, user_two_id, status, action_user_id) VALUES (
    (CASE 
        WHEN @id_one >= @id_two THEN @id_two
        ELSE  @id_one
    END),
    (CASE 
        WHEN @id_one >= @id_two THEN @id_one
        ELSE  @id_two
    END),
    0,  <--- you need to set this one yourself
    10  <--- you need to set this one yourself
);