我应该打破规范化规则并添加额外的FK

时间:2018-04-18 02:18:31

标签: mysql sql database foreign-keys relational-database

在MySQL中,我有许多相关的表:

  • tableA在tableB中有很多行
  • tableB在tableC中有很多行
  • tableC在tableD
  • 中有很多行

我需要定期从tableA遍历到tableD,例如列出tableA中的记录以及tableD中相关记录的计数。这将导致繁琐的代码和潜在的性能瓶颈。

另一种方法是在tableD中创建一个引用tableA的FK。严格来说,这将是一个冗余密钥,但我认为我可以轻松地管理值的更新(以避免数据完整性问题)。我认为性能改进很重要,代码更具可读性。

我是否正在前往这个充满痛苦的世界?或者是其他地方看到的模式?我打算给钥匙贴上标签,以便明确它只是方便,而不是规范性参考。

1 个答案:

答案 0 :(得分:1)

这不是你通常会做的事情。使用tableBtableC上的正确索引,连接的性能应该足够好。

如果您发现这还不够,那么您应该尝试更多英雄措施 - 例如重复的外键。在这种情况下,我认为即使在出现任何性能问题之前也没有理由过早地优化数据库。