我正在設計一個模式,其中一個案例可以附加多個表單並且表單可以用於很多情況。 Form
表基本上保存了在客戶端呈現的html表單的結構。提交表單時,字段的名稱/值對將分開存儲。如何保持名稱/值屬性與連接表分離如下有什麼價值?數據庫模式 - 多對多規範化
CREATE TABLE Case (
ID int NOT NULL PRIMARY KEY,
...
);
CREATE TABLE CaseForm (
CaseID int NOT NULL FOREIGN KEY REFERENCES Case (ID),
FormID int NOT NULL FOREIGN KEY REFERENCES Form (ID),
CONSTRAINT PK_CaseForm PRIMARY KEY (CaseID, FormID)
);
CREATE TABLE CaseFormAttribute (
ID int NOT NULL PRIMARY KEY,
CaseID int NOT NULL FOREIGN KEY REFERENCES CaseForm (CaseID),
FormID int NOT NULL FOREIGN KEY REFERENCES CaseForm (FormID),
Name varchar(255) NOT NULL,
Value varchar(max)
);
CREATE TABLE Form (
ID int NOT NULL PRIMARY KEY,
FieldsJson varchar (max) NOT NULL
);
我是我過分複雜的架構,因爲同樣的多對多的關係可以通過轉動CaseFormAttribute
表到連接表和獲得完全擺脫CaseForm
表如下的實現?
CREATE TABLE CaseFormAttribute (
ID int NOT NULL PRIMARY KEY,
CaseID int NOT NULL FOREIGN KEY REFERENCES Case (ID),
FormID int NOT NULL FOREIGN KEY REFERENCES Form (ID),
Name varchar(255) NOT NULL,
Value varchar(max) NULL
);
基本上我想問的是哪個更好的設計?
他們都會工作,但它取決於你需要什麼表。你的ERD是什麼樣的? –
有沒有比另一個更好的價值? – adam78
這取決於你是否需要caseform表或不,但我不能評論,因爲我不知道你的數據庫設計或要求 –