我有實體關係模型(ERD),其中實體IndividualCategory
和TeamCategory
與實體Category
有關。現在我想在Oracle DB中創建表。我一開始是這樣的:Oracle中的外鍵約束
CREATE TABLE Category(
category_id INT PRIMARY KEY,
...
);
CREATE TABLE Individual_category(
category_id INT CONSTRAINT fk_cat_indivcat REFERENCES Category(category_id),
...,
CONSTRAINT pk_indivgamecat PRIMARY KEY (category_id)
);
CREATE TABLE Team_category(
category_id INT CONSTRAINT fk_cat_teamcat REFERENCES Category(category_id),
...,
CONSTRAINT pk_teamcat PRIMARY KEY (category_id)
);
的外鍵和主鍵約束,該組合保證了每一個Individual_category
會有Category
「超級」表中的相應記錄(或「父」表?)。並且將只有一個IndividualCategory
記錄爲特定的Category
記錄。 Team_category
也一樣。
要強制繼承我需要多一個約束:即確保在Category
每個記錄都會有IndividualCategory
(X)無論是記錄或在TeamCategory
記錄但不能同時約束。
如何創建這樣的約束?
編輯:這就是我說的 '於E-R模型的繼承'。這是我的數據庫老師的幻燈片(他們稱之爲「實體分型」的存在,但他們有時稱之爲它只是繼承):
「繼承」意味着分層數據,這個例子沒有提示。只是外鍵...... – 2011-05-05 00:42:03
@OMG小馬:我不明白你的意思......確實在所有3個表格中有更多的列。並且'Category'中的所有列都應該被繼承到兩個子表。但怎麼做呢?就是那個問題。 – drasto 2011-05-05 00:51:00
您的術語會阻止您找到您所尋求的答案。沒有「繼承」,就像您對對象所使用的那樣 - 外鍵僅驗證列中的值是否已存在於約束所指的table.column中。 – 2011-05-05 00:54:46