В терминологии ORM и EF эта настройка называется «Таблица на тип» парадигмы наследования, где есть таблица для каждого подкласса, таблица базового класса, и первичный ключ используется совместноподклассы и базовый класс.
например. В этом случае Securities_Stock
и Securities_MutualFund
являются двумя подклассами Securities
базового класса / таблицы (возможно, абстрактного).
Отношениебудет 0..1 (subclass) to 1 (base class)
- т.е. для каждой базовой таблицы Securities
строка будет существовать только одна из записей в Securities_MutualFund
или Securities_Stock
.
В базовой таблице также часто имеется столбец дискриминатора, который указывает, какиетаблица подклассов от join
до, но, похоже, что это не так.
Также обычно для обеспечения ссылочной целостности между подклассами к базовой таблице используется внешний ключ.
Чтобы ответить на ваш вопрос, причина отсутствия FK между двумя таблицами подкласса instance
заключается в том, что каждая instance
(с уникальным идентификатором) будет когда-либо только в ОДНОЙ из таблиц подкласса - онаНельзя, чтобы один и тот же Security
был и взаимным фондом, и акцией.
Вы правы, для добавления новой конкретной записи Security
необходимо, чтобы в обеих базовых таблицах Securities
была строка (сначала необходимо вставить, поскольку они являются FK из таблиц подкласса).в базовую таблицу), а затем в одну из таблиц подклассов вставляется строка с остальными «конкретными» данными.
Если внешний ключ был добавлен между Stock
и Mutual Fund
,было бы невозможно вставить новые строки в таблицы.
Полный шаблон часто выглядит так:
CREATE TABLE BaseTable
(
Id INT PRIMARY KEY, -- Can also be Identity
... Common columns here
Discriminator, -- Type usually has a small range, so `INT` or `CHAR` are common
);
CREATE TABLE SubClassTable
(
Id INT PRIMARY KEY, -- Not identity, must be manually inserted
-- Specialized SubClass columns here
FOREIGN KEY (Id) REFERENCES BaseTable(Id)
);