У меня есть модель отношений сущностей (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)
);
Эта комбинация Внешний ключ и Первичный ключ гарантирует, что для каждой Individual_category
будет соответствующая запись в Category
«супер» таблица (или «родительская» таблица?).И будет только одна запись IndividualCategory
для конкретной записи Category
.То же самое для Team_category
.
Для обеспечения наследования мне нужно еще одно ограничение: ограничение, гарантирующее, что для каждой записи в Category
будет либо запись в IndividualCategory
(X) ИЛИ запись в TeamCategory
, но не оба.
Как создать такое ограничение?
РЕДАКТИРОВАТЬ: Это то, что я имел в виду под «наследованием в модели ER».Это из слайдов моего учителя БД (там они называют это «подтипом сущности», но иногда они называют это просто наследованием):