Mysql 我是否应该打破标准化规则并添加额外的FK

Mysql 我是否应该打破标准化规则并添加额外的FK,mysql,sql,database,foreign-keys,relational-database,Mysql,Sql,Database,Foreign Keys,Relational Database,在MySQL中,我有许多相关的表: 表A在表B中有许多行 表B在表C中有许多行 tableC在tableD中有许多行 我需要定期地从一个表遍历到另一个表,例如,在列出表中的记录以及表中相关记录的计数时。这将导致繁琐的代码和潜在的性能瓶颈 另一种方法是在tableD中创建一个引用回tableA的FK。严格地说,这将是一个冗余密钥,但我认为我可以很容易地管理值的更新(以避免数据完整性问题)。我认为性能的提高将是显著的,代码将更具可读性 我这样做是不是要进入一个痛苦的世界?或者这是其他地方的模式?

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

  • 表A在表B中有许多行
  • 表B在表C中有许多行
  • tableC在tableD中有许多行
我需要定期地从一个表遍历到另一个表,例如,在列出表中的记录以及表中相关记录的计数时。这将导致繁琐的代码和潜在的性能瓶颈

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


我这样做是不是要进入一个痛苦的世界?或者这是其他地方的模式?我计划给钥匙贴上标签,这样就可以清楚地看到,这只是一种方便,而不是规范性参考。

这不是您通常会做的事情。如果在
tableB
tableC
上有正确的索引,那么连接的性能应该足够好

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