Oracleでは次のことができました。最後のインサートがどのように失敗するかに注意してください。
CREATE TABLE product (
id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
PRIMARY KEY (id),
CONSTRAINT uq_prod_cat UNIQUE (id,category_id)
);
INSERT INTO product (
id,
category_id
) VALUES (
1,
1
);
CREATE TABLE tags (
id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
PRIMARY KEY (id),
CONSTRAINT uq_tag_cat UNIQUE (id,category_id)
);
INSERT INTO tags (
id,
category_id
) VALUES (
1,
1
);
INSERT INTO tags (
id,
category_id
) VALUES (
2,
1
);
INSERT INTO tags (
id,
category_id
) VALUES (
3,
2
);
CREATE TABLE product_tags (
id INTEGER NOT NULL,
product_id INTEGER NOT NULL,
category_id INTEGER NOT NULL,
tag_id INTEGER NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (product_id,category_id)
REFERENCES product (id,category_id),
FOREIGN KEY (tag_id,category_id)
REFERENCES tags (id,category_id)
);
INSERT INTO product_tags (
id,
product_id,
category_id,
tag_id
) VALUES (
1,
1,
1,
1
);
1 row inserted.
INSERT INTO product_tags (
id,
product_id,
category_id,
tag_id
) VALUES (
2,
1,
1,
2
);
1 row inserted.
INSERT INTO product_tags (
id,
product_id,
category_id,
tag_id
) VALUES (
3,
1,
1,
3
);
Error starting at line : 35 in command -
INSERT INTO product_tags (id, product_id, category_id, tag_id) VALUES (3, 1, 1, 3)
Error report -
ORA-02291: integrity constraint (SYS_C008023) violated - parent key not found
ちょうどあなたの製品の二次キーに入れていないのはなぜ?したがって、デュアルSIMには製品ID Xがあり、カテゴリID Yなどで使用する必要がありますか?次に、さまざまなカテゴリの製品を再利用することはできませんが、それはあなたのニーズを解決します。 – ssn
申し訳ありませんが、私はそれを取得していません。 productsテーブルに新しいフィールドを追加することをお勧めしますか? – kYuZz
はい。あなたの商品/タグが特定のカテゴリに属するようにします。これは、新しい商品/タグをカテゴリに追加するときに維持されます – ssn