Я проектирую базу данных с использованием подхода Entity Framework «сначала модель».Основываясь на превосходной обратной связи, которую я получил здесь, я принимаю шаблон супертипа / подтипа для части БД.
Для этого шаблона требуются составные ключи, основанные как минимум на 2 столбцах2 таблицы (см. Схему ниже).
Я искал на форуме слова "каркас сущностей" и "составные ключи", но ни один из вопросов, которые я нашел, не был на этом более базовом уровне: могу ли я установитьмодель сущностей, чтобы она генерировала одну таблицу (используя «Создать базу данных из модели ...») с составным первичным ключом на 2 столбца, так что один является внешним ключом для второй таблицы?А в другой таблице та же ситуация, за исключением того, что FK основан на 2 столбцах первой таблицы?
ИЛИ, лучше ли просто позволить EF генерировать БД без составных ключей, а затем перейти к SQLСервер, (заново) установить первичные ключи, удалить модель и создать новую модель на основе вновь созданной базы данных?Я знаю, как это сделать, конечно;но поскольку я все еще прорабатываю незначительную деталь или 2 в структуре БД, я бы предпочел отложить все, что по существу приводит к запеканию в структуре БД на данный момент.
Вот рекомендуемый суперструктура типа / подтипа, которую я отразил в моей модели сущности (пока не выясняя, как генерировать составные ключи):
CREATE TABLE publications (
pub_id INTEGER NOT NULL PRIMARY KEY,
pub_type CHAR(1) CHECK (pub_type IN ('A', 'B', 'P', 'S')),
pub_url VARCHAR(64) NOT NULL UNIQUE,
CONSTRAINT publications_superkey UNIQUE (pub_id, pub_type)
);
CREATE TABLE articles (
pub_id INTEGER NOT NULL,
pub_type CHAR(1) DEFAULT 'A' CHECK (pub_type = 'A'),
placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of articles
PRIMARY KEY (pub_id, pub_type),
FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);
CREATE TABLE stories (
pub_id INTEGER NOT NULL,
pub_type CHAR(1) DEFAULT 'S' CHECK (pub_type = 'S'),
placeholder CHAR(1) NOT NULL, -- placeholder for other attributes of stories
PRIMARY KEY (pub_id, pub_type),
FOREIGN KEY (pub_id, pub_type) REFERENCES publications (pub_id, pub_type)
);