2012-05-08 26 views
8

私は次のようにテーブルT1T2を接続テーブルT1T2を作成した:組み合わせユニーク制約

CREATE TABLE t1t2(
id integer primary key, 
t1_id integer, 
t2_id integer, 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

のみ一意可能制約(制約)を定義することが可能ですタプルの値(t1_id、t2_id)?または、アプリケーションでこれをチェックする必要がありますか?

答えて

14
CREATE UNIQUE INDEX idx_twocols ON t1t2(t1_id, t2_id) 

おそらく、2つの列のそれぞれの宣言にNOT NULLを追加する必要があります。

また、あなたは(あなたのためにそれを使用しているすべてが一意である場合)、主キー列を放棄することを選択するとt1_idt2_idの組み合わせに主キーを作成することができます。

CREATE TABLE t1t2(
t1_id integer NOT NULL, 
t2_id integer NOT NULL, 
PRIMARY KEY (t1_id, t2_id), 
foreign key(t1_id) references t1(id), 
foreign key(t2_id) references t2(id)); 

PRIMARY KEY UNIQUE索引の特殊なケースです。複合PRIMARY KEYを使用すると、1つの列と1つのインデックスが保存されますが、テーブルから単一の行を取得するには、アプリケーションにt1_idt2_idの両方が分かる必要があります。

+0

それは(私はt1t2.id列を必要とする)一意性のためではないだけだが、私は興味があります別の方法で。あなたはテーブルを見せることができますか?私はこれが正しいことを確信するために受け入れる前に、しばらくお待ちしております、ありがとうございます。 – xralf

+1

編集された回答を参照してください。 –

6

create table文に一意制約を追加できます。 これはプライマリキーである必要はありません。

あなたの主キーを維持するために、これらのオプションを使用してUNIQUEプライマリインデックスを作成することができ
UNIQUE(t1_id, t2_id), 
0

とユニーク制約SQL Lite New Index option

+0

このリンクは質問に答えるかもしれませんが、答えの本質的な部分をここに含めて参考にしてください。リンクされたページが変更された場合、リンクのみの回答は無効になります。 – mathielo

関連する問題