我正在设计一个模式,其中一个案例可以附加多个表单并且表单可以用于很多情况。 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表或不,但我不能评论,因为我不知道你的数据库设计或要求 –