UNIQUE KEY
この場合、制約を使用できます。
CREATE TABLE users (id int not null, primary key (id));
INSERT INTO users VALUES (1), (2), (3);
CREATE TABLE orders (id int not null, primary key (id));
INSERT INTO orders VALUES (1), (2), (3);
CREATE TABLE users_orders (uid int NOT NULL, oid int DEFAULT NULL,
FOREIGN KEY (uid) REFERENCES users (id),
FOREIGN KEY (oid) REFERENCES orders (id),
UNIQUE KEY (uid, oid));
INSERT INTO users_orders (uid) VALUES (1);
ここにデモがあります。
ただし、(おそらく) の複数の組み合わせをspecific UID - NULL
テーブルに挿入できることに注意してください (ここでは を使用していると仮定しますInnoDB
)。たとえば、このクエリ...
INSERT INTO users_orders o (uid) VALUES (1), (1);
... 同様に成功します (既存の制約を壊さないため)。
これを厳密に禁止する必要がある場合は、とテーブルの両方でダミー値を使用して、交差テーブルの制約を使用できるようにすることをお勧めします。users
orders
foreign key
補足として、私はこの状況に少し驚いていることを認めます。交差テーブルは通常、NULL 可能なフィールドがないように設計されています。たとえば、注文を持たないユーザーを含めるために使用する必要があるのは、クエリの LEFT (または RIGHT) JOIN です。(OID を null 可能にするという) この決定が最初に選択された理由を少し説明していただけますか?