我正在使用实体框架的“模型优先”方法设计数据库。根据我在这里收到的优秀反馈,我正在为部分数据库采用超类型/子类型模式。
此模式需要基于至少 2 个表中的 2 列的复合键(请参见下面的架构)。
我在论坛中搜索了“实体框架”和“复合键”,但我发现的问题都不是这个更基本的问题:我可以设置一个实体模型以便它生成一个表(使用“生成数据库来自 Model...") 在 2 列上具有复合主键,这样一个是第二个表上的外键?而在另一个表上,除了 FK 之外的情况是基于第一个表中的 2 列?
或者,让 EF 生成不带复合键的 DB,然后进入 SQL Server,(重新)设置主键,删除模型,并基于新实例化的数据库创建新模型会更好吗?我当然知道该怎么做;但由于我仍在处理 DB 结构中的一个或 2 个小细节,我宁愿推迟任何本质上会导致 DB 结构烘焙的事情。
这是推荐的超类型/子类型结构,我已经在我的实体模型中进行了镜像(还没有弄清楚如何生成复合键):
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)
);