[英]Foreign key on different tables
我有一張圖片表:
圖片
我如何創建外鍵,如果image_type
為foo
, type_id
應該與foo
表相關,如果image_type
是bar
到bar
表。
您想要做的是創建一個超類型。 在SQL中,最好像下面這樣建模(至少是IMO)。 如果語法不適用於MySQL,我深表歉意。 我通常使用MS SQL Server。
CREATE TABLE Image_Types (
image_type_id INT NOT NULL,
image_type CHAR(3) NOT NULL CONSTRAINT CHK_Image_Types_image_type CHECK (image_type IN ('Foo', 'Bar')),
CONSTRAINT PK_Image_Types PRIMARY KEY (image_type_id, image_type)
)
CREATE TABLE Foo (
image_type_id INT NOT NULL,
image_type CHAR(3) NOT NULL CONSTRAINT CHK_Foo_image_type CHECK (image_type IN ('Foo')),
some_foo_specific_column VARCHAR(100) NOT NULL,
CONSTRAINT PK_Foo PRIMARY KEY (image_type_id),
CONSTRAINT FK_Foo_ImageTypes FOREIGN KEY (image_type_id, image_type) REFERENCES Image_Types (image_type_id, image_type)
)
CREATE TABLE Bar (
image_type_id INT NOT NULL,
image_type CHAR(3) NOT NULL CONSTRAINT CHK_Bar_image_type CHECK (image_type IN ('Bar')),
some_bar_specific_column VARCHAR(100) NOT NULL,
CONSTRAINT PK_Bar PRIMARY KEY (image_type_id),
CONSTRAINT FK_Bar_ImageTypes FOREIGN KEY (image_type_id, image_type) REFERENCES Image_Types (image_type_id, image_type)
)
CREATE TABLE Images (
image_id INT NOT NULL,
image_type CHAR(3) NOT NULL CONSTRAINT CHK_Images_image_type CHECK (image_type IN ('Foo', 'Bar')),
image_type_id INT NOT NULL,
CONSTRAINT PK_Images PRIMARY KEY (image_id),
CONSTRAINT FK_Images_ImageTypes FOREIGN KEY (image_type_id, image_type) REFERENCES Image_Types (image_type_id, image_type)
)
如果RDBMS支持,則另一種方法是在Image_Types
上使用過濾的索引視圖,然后將FK放在Foo
並將Bar
指向這些視圖。 這使您可以從某些表中消除image_type
列。 即使過濾索引視圖可用,有些人還是喜歡上面的模式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.