存储相同的信息两次或加入外键?

时间:2014-01-19 20:15:34

标签: mysql sql database foreign-keys

说我有一张叫做“孩子”的桌子。包含引用另一个名为“父”的表的外键。如果父表包含我从子表中选择时经常要访问的列值,那么最好是在外键上加入表,还是存储经常从父表中第二次访问的列。儿童餐桌。

有时我也有第三个孙子'引用子表并希望所有3个表中的信息混合的表。一个三重JOIN似乎让我感到困惑。

我觉得有更好的方法来解决这个问题。如果有人对此主题有任何建议或一些好的资源,请告诉我。

1 个答案:

答案 0 :(得分:1)

这个问题是基于过早的优化,这是不好的。

你在谈论denornalization,这应该只是有一个真正和紧迫的性能问题。虽然你的想法听起来很诱人,但这几乎总是一个坏主意,因为:

  • 你只是出于性能原因这样做,但数据库速度非常快 - 无论如何你不太可能受益匪浅
  • 非规范化引入了复杂性 - 如果更改子值,则必须保持父级中的值更新。这是一个很大的麻烦(这里不再详述)
  • 你甚至不知道你是否有性能问题:如果它没有被破坏,请不要修复它