我应该将这些表合并为一个表吗?有什么棘手的替代方案吗?
Table Unit for a Template table:
Id (PK)
ParentId
Name
TemplateId (FK)
Table Unit2 for a Testplan table:
Id (PK)
ParentId
Name
TestplanId (FK)
编辑:
为什么不制作这样的表格:
[UnitId] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](50) NOT NULL,
[TemplateId] [int] NULL,
[TestplanId] [int] NULL,
[ParentId] [int] NULL,
更新2:
1 Template has N Unit
1 Template has N Testplan
1 Testplan has N Unit
这些是使用一个单位表的关系。但这只能与 Unit 表中的 TemplateId 和 TestplanId 一起使用。
最佳答案
不,不应合并相似但不相关的表。
它们的不同之处在于外键列。没有简单的方法可以使外键有时指向一个表,有时指向另一个表。
在您的更新中,您通过添加两列(每个外键一列)来处理这种情况,并且将它们都设置为可为空。但想象一下,您现在想要要求每个模板都只有一个模板 ID。在您的原始设计中,您可以通过将 TemplateId
列设置为 NOT NULL
轻松实现此目的。但您不能在组合表中执行此操作,因为这会阻止您创建测试计划。
现在想象一下,如果有人添加了一个同时具有 TestplanId
和 TemplateId
的项目...这是您想要允许的吗?在您的旧设计中这是不可能的,但在您的组合表中这是可以完成的。
这种情况可以通过添加 CHECK
约束来处理,但它会增加额外的复杂性,但几乎没有任何好处。
关于sql - 我应该合并 2 个只有一个字段不同的 sql 表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11127071/