【问题标题】:Redundant data in sql server?sql server中的冗余数据?
【发布时间】: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


【解决方案1】:

您应该做什么取决于您的需求。如果您要经常查看当前国家/地区并且性能需要良好,我会将当前国家/地区放在 CD 表上。否则,您将不得不每次都查询移动表并获取最大日期 - 对性能不是很好。

另一方面,如果您很少需要该信息,我会将其规范化并仅将其保留在移动表中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多