【发布时间】:2013-12-01 21:34:43
【问题描述】:
我和我的同事正在尝试确定哪种方法是为两个数据库表设计架构和键的更好方法。一个是很少更改的查找表。它有大约 700 行。另一个表引用查找表。随着时间的推移,该表将有数千行。在设计 B 中,查找表有一个由 3 个 varchar 组成的主键。另一个表的主键由相同的 3 个 varchars 和两个日期字段组成。在设计 A 中,3 个 varchar 被替换为代理键。这 3 个 varchar 对它们有一个唯一约束 (UC)。
哪个设计更好?我的同事说,如果我们有一个代理键,当我们需要向用户显示数据时,在表上进行连接会变得非常慢。此外,拥有仅用于使行唯一的键是浪费的。我的论点是连接速度很快,并且为 3 个 varchar 存储额外数据是浪费的,因为它将这些数据复制到两个表中。
我们在 T-SQL Server 2008 中使用 EF 5 的 WPF 桌面应用程序中使用它。代理键还是自然键?附图显示了两种不同的设计。
【问题讨论】:
-
马上,
A将比B更高效,因为您将加入单个int与 3nvarchars。您可能仍希望为 3 列包含一个复合唯一键并包含一个代理键。 -
@FreshPrinceOfSO 我不同意。 “表演者”不是一个词。
-
@ypercube I found something that agrees with me 在互联网上。
-
我确实在 3 列上包含了唯一约束。它只是没有显示在图表中。另外,我认为Performant是一个词。重构也是一个词(我最喜欢的词之一)。
标签: sql entity-framework tsql database-design