我有实体关系模型(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