【发布时间】:2013-10-06 15:39:14
【问题描述】:
假设 Microsoft 有很多 CD,它需要跟踪(包括历史)每张 CD 的位置。
所以可能会有一个CDs 表,例如:
CD_ID | title | ...
_________________________
... | ... | ...
还有另一个代表“moves”的表格:
CD_ID | dateMoved | DestinationCountryID |
___________________________________________
... | ... | ...
这是我的问题:
如果微软想知道 cd Y 当前在哪里:
它可以扫描moves 表并获取它的最后一个county。
但是(这是我的问题):
某事在我的脑海中告诉我,我应该在CDs 表中添加一列,如下所示:
CD_ID | title | CurrentCountryID | ...
________________________________________
... | ... | ... | ...
因此,每个 Cd 项目会更具描述性。 (而且很容易找到)。
CurrentCountryID 将在每次移动后更新。
但是
这将导致冗余数据!
因为现在我们有 2 个地方代表它的当前位置。
我说的对吗?我应该添加此列吗?
(请注意,如果您要询问数量:假设我们有数百万张 cd)
【问题讨论】:
-
@MitchWheat 是的。我已经添加了标签。我猜它是关于标准化的。 (加上最佳实践解决方案)
-
如果问题是“我应该标准化吗?”答案是“是”!
-
@MitchWheat 我的数据库确实已标准化。我只是要求那个特定的场景!我应该添加列还是不添加。 (并每次扫描 - 移动表)
-
为什么不为 CurrentCountry 创建一个存储过程?
标签: sql-server database-normalization