添加列或连接表?

时间:2016-05-09 15:47:27

标签: sql-server

我有下表:

材料表(待构建)

MaterialID
ProductID
ProductDescription
OtherPropetries...

产品表(已存在)

ProductID
ProductDescription

Material表格中,我应该离开ProductDescription,还是将其删除,然后通过Material列加入ProductProductCode表?哪一个更好的表现?

我认识到添加Description列的冗余,但想知道性能增益 - 是否有 - 是值得的。

2 个答案:

答案 0 :(得分:2)

向表中添加冗余字段可提高读取性能,但在写入(插入或更新)时速度变慢,使用更多磁盘空间并可能导致更复杂的代码(用于插入)。

因此,这取决于您的用例。如果快速查询对您的应用程序非常重要,您可以这样做。

然而,有一句谚语说:让它运行,使它正确,快速。所以你可能应该推迟这样的性能优化,直到找到你确实需要它为止。

答案 1 :(得分:1)

假设你有索引,你的系统必须扩展非常大,以便考虑性能。

我会避免重复数据。管理重复数据是一场噩梦。当您更正产品代码的描述时会发生什么?你是通过两个表填充它吗?如果您碰巧编写了导入和更新Product表的内容,您是否总是记得更新Material表,反之亦然?或者您是否允许Material表具有不同的描述?当产品和材料在完全相同的产品代码的产品描述上存在分歧时,您的用户是否会理解为什么会发生这种情况?有没有用过这种情况的用例?如果您的用户决定使用第三方应用程序与数据库进行交互,会发生什么? 应用程序是否记得更新这两个位置,或者您是否需要设置触发器或某些东西以某种方式同步它们?如果您不这样做,您的用户是否能够分辨哪个描述是最近使用过的?

我的另一个问题是:我假设ProductCode必须是唯一的,因为您在样本设计中将它用作Material中的外键。如果是这样的话......为什么Product有ProductID字段?如果您实际上没有使用代理键(这是我假设的产品ID),那么ProductID的用途是什么?