9

次のように、テーブル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)の一意の値のみを有効にする制約(制限)を定義することは可能ですか?または、アプリケーションでこれを確認する必要がありますか?

4

3 に答える 3

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

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

または、主キー列を省略して(使用しているのが一意性だけの場合)、との組み合わせで主キーを作成することもできt1_idますt2_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インデックスの特殊なケースです。複合PRIMARYKEYを使用すると、1つの列と1つのインデックスが節約されますが、アプリケーションは両方を認識し、テーブルから1つの行を取得する必要がありt1_idますt2_id

于 2012-05-08T15:25:51.297 に答える
8

createtableステートメントに一意の制約を追加できます。これは主キーである必要はありません。

UNIQUE(t1_id, t2_id),
于 2015-03-26T19:26:05.763 に答える
0

これらのオプションを使用してUNIQUEプライマリインデックスを作成し、プライマリキーと一意の制約を保持することができます。SQLLiteの新しいインデックスオプション

于 2016-07-05T10:13:38.260 に答える