0

次の表を検討してください。

+---------------------------------------------------------+
|               relationships                             |
+---------------------------------------------------------+
| id | user_id_1  |  user_id_2   |  status_1  |  status_2 |
+----+------------+--------------+------------------------+
|    |            |              |            |           |
|    |            |              |            |           |
|    |            |              |            |           |
|    |            |              |            |           |
+---------------------------------------------------------+

user_id_1 と user_id_2 を制約したいのですが、次のような重複は望ましくありません。

user_id_1 = 1 and user_id_2 = 2
user_id_1 = 2 and user_id_2 = 1

これら 2 つは、私のアプリケーションでは基本的に同じです。

重複を避けるための私の戦略は、挿入する前に user_id を注文し、常に小さい方を user_id_1 に、大きい方の ID を user_id_2 に入れて、元の問題を効果的に回避することです。

しかし、同じ結果を達成するためのより良い、よりクリーンな方法はありますか?

4

3 に答える 3

0

ユーザーを別々の行の同じ列に格納する場合、PRIMARY KEY を利用して一意性を確保できます。

CREATE TABLE relationships (
  rel_id INT,
  user_id INT,
  status INT,
  PRIMARY KEY (rel_id, user_id)
);

このテーブルにユーザーを入力する順序は関係ありません。

INSERT INTO relationships (rel_id, user_id) VALUES (1234, 1), (1234, 2);

以下と同じです:

INSERT INTO relationships (rel_id, user_id) VALUES (1234, 2), (1234, 1);

それらは別々の行になってしまうからです。これらの列は主キーの一部であるため、最終的には自動的に並べ替えられます。

于 2013-11-03T13:58:26.800 に答える