【发布时间】:2018-03-24 06:55:45
【问题描述】:
我正在设计一个模式,其中一个案例可以附加许多表单,并且一个表单可以用于许多案例。 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 是什么样的?
-
两者相比有什么好处或价值吗?
-
这取决于您是否需要caseform表,但我无法发表评论,因为我不知道您的数据库设计或要求
标签: sql sql-server database-design many-to-many database-schema