1

2 つの同じものを相互にリンクするルックアップ テーブルが必要です。「Person」テーブルがあり、2 人の関係を調べたいとします。ルックアップの列 1 を「PersonId1」、列 2 を「PersonId2」、3 列目を「関係」にします。関係は双方向であるため、PlayerId を切り替えてレコードを重複させる必要はありません。PlayerId1 と PlayerId2 の組み合わせの順序に関係なく、MySQL に一意性を強制させる方法はありますか?

それは理にかなっていますか?

4

3 に答える 3

2

簡単な答え:いいえ。

長い答え:2番目のIDが最初のIDよりも小さい場合は、2人のIDの順序を入れ替えるトリガーを設定し、それらを書き込んで、複合キーを使用できます。

さらに長い答え:すべての対人関係が可換であるわけではありません(すべての関係が双方向になるわけではありません)。「従業員」または「母」の関係はどうですか?おそらくピアツーピアである「友達」関係でさえ、AがBの友達であり、BがAの友達であるという別々の行がある場合は、より適切に表現される可能性があります。したがって、このテーブルに3フィールドの複合キーが必要な場合があります。

于 2013-03-16T14:53:57.083 に答える
0

複合pkの場合は+1。重複する組み合わせを防ぐために、たとえば、personid1+personid2に一意の制約がある追加のvarchar列が解決策になる場合があります...

参照:個人データモデルの例

于 2013-03-18T09:53:56.390 に答える
0

(列に関係なく)PersonID1と列から一意の行レコードを取得したいということですか? その場合は、複合キー (複数列キー) を使用できます。PersonID2Relationship

次に例を示します。

CREATE TABLE Person (
    PersonId1 INT,
    PersonId2 INT,
    PRIMARY KEY (PersonId1, PersonId2)
) 
于 2013-03-16T14:35:25.193 に答える