2017-08-18 10 views
-1

こんにちは、私の関係テーブルを作成するのに助けが必要です。基本的にはこのソーシャルネットワーク関係テーブルを作成する

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)) 
+1

なぜユーザー1のIDは常にユーザー2のIDより小さくする必要がありますか? – axlj

+0

これを実現したいのですが、単にinsert文で条件を作ることができます。 –

+0

@PeterMあなたは私を見せてくれますか? – tien318

答えて

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) 
) 

これは、IDSの唯一のユニークなペアが格納されていることを保証します。

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 
);