我正在使用實體框架的「模型優先」方法設計數據庫。根據這裏的excellent feedback I recieved,我對數據庫的一部分採用了超類型/子類型模式。我可以獲得實體框架(模型優先)生成組合鍵嗎?
此模式需要基於至少2個表中的2列的組合鍵(請參閱下面的模式)。
我在論壇搜索了「實體框架」和「複合鍵」,但是我發現的問題都沒有在這個更基本的層次上: 我可以設置一個實體模型,以便它會生成一個表(使用「從模型生成數據庫...」),在兩列上使用複合主鍵,這樣第二個表上的外鍵就是一個?而在另一張桌子上,除FK以外的相同情況是基於第一個表中的2列?
或者,讓EF生成沒有組合鍵的數據庫,然後進入SQL Server,(重新)設置主鍵,刪除模型,&創建一個基於新實例化的數據庫?當然,我知道該怎麼做。但是由於我仍然在研究數據結構中的一個小細節或2個細節,所以我寧願放棄任何基本上導致在此結構中烘焙數據庫結構的東西。
以下是推薦的超類型/子式結構,這是我在我的實體模型已經鏡像(W/O還沒有搞清楚如何讓產生的組合鍵):
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)
);