我有一个实体关系模型(ERD),其中的实体IndividualCategory
和TeamCategory
与实体Category
相关联。现在我想在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)
);
这个 Foreign key 和 Primary key 的组合保证了每个
Individual_category
都有对应的 Category
"super" 表(或者 "parent" 表?)。并且每个特定的 Category
记录只有一个 IndividualCategory
记录。同样适用于 Team_category
。为了强制实现继承,我需要一个额外的约束条件:确保每个
Category
记录要么有一个 IndividualCategory
记录(X),要么有一个 TeamCategory
记录,但不会同时拥有两者。如何创建这样的约束条件?
编辑: 我所说的 "E-R 模型中的继承" 如下图所示,来自我的数据库老师的幻灯片(他们称之为 "Entity sub-type",但有时仅称其为继承):
Category
的所有列都应该被继承到两个子表中。但是怎样做呢?这就是问题所在。 - RastoCategory
(父级)和IndividualCategory
、TeamCategory
(子级)之间存在继承关系。Category
实体具有一些属性(例如:category_name
)。IndividualCategory
和TeamCategory
都会从Category
中添加一些内容。我必须编写SQL以创建与E-R模型中的实体相对应的表。我如何处理这种继承,以便我的... - Rasto