私は、アプリケーションのための友人リストを構築していると私はそれができるようにテーブル上のキー/インデックスを定義することが可能かどうか疑問に思っていたキーの逆の組み合わせは許されません。どのようにリバースの組み合わせを許可しないコンポジットプライマリキーを
たとえば、のは、表には、このような列を持っているとしましょう:
user_id1, user_id2, status, [..timestamps]
主キーがuser_id1
とuser_id2
で作られた複合キーです。今のところ特別なものはありません。あなたはこれに類似したデータ格納しますがあります
+----------+-----------+----------+---------------------+---------------------+
| user_id1 | user_id2 | status | created_at | updated_at |
+----------+-----------+----------+---------------------+---------------------+
| 3 | 1 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 2 | 3 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----------+-----------+----------+---------------------+---------------------+
をしかし、この方法では、それぞれuser_id1
とuser_id2
ため1, 3
または3, 2
を挿入するために否定する何の制約が存在しない - そうのように:この中
+----------+-----------+----------+---------------------+---------------------+
| user_id1 | user_id2 | status | created_at | updated_at |
+----------+-----------+----------+---------------------+---------------------+
| 3 | 1 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 2 | 3 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 1 | 3 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
| 3 | 2 | 1 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 |
+----------+-----------+----------+---------------------+---------------------+
誰がuser1かuser2かどうかは関係ありません。重要なのはリンクされているかどうかです。重複は必ずしもコードを破壊するとは限りませんが、MySQLでもルールを適用するとよいでしょう。
あなたの要件を明確にするために使用してください。それはほとんど作られていない。 – philipxy
私はここに赤い旗を掲げています。私がみえますか?同じテーブルに複数の列があり、その値が同じ情報ドメインから来る場合はいつでも、リレーショナルモデルに違反している可能性があります(間違いなく)あなたが嫌うクエリをすぐに設定しますまたはそれ以降。 –
@ Michael-sqlbot私は気分があった。代わりの構造をお勧めできますか? – zedling