数据库
首页 > 数据库> > mysql – 表链,何时进行非规范化?

mysql – 表链,何时进行非规范化?

作者:互联网

假设TABLE-A在TABLE-B中可以有一行或多行,它们可以在TABLE-C中有一行或多行,它们可以在TABLE-D中有一行或多行……依此类推.

假设我在TABLE-Z并且需要知道有关TABLE-A的详细信息.我是否从TABLE-Z一直到TABLE-A进行SQL查询?在某些时候,如果说TABLE-Z对于TABLE-A有一个FK,那么查询也不会那么痛苦.但是,如果我把那个FK,我想我会破坏正常化,对吧?

关于如何处理这个问题的一般建议?

解决方法:

如果使用复合主键(如果在创建任何表之前正确地对设计建模,则实际会发生这种情况),TableA中的键已经包含在TableZ中(作为最左侧的列).

然而,民间通常添加代理键而不理解为什么.因此,您需要连接所有26个表以建立TableA和TableZ之间的链接

TableA和TableZ之间的额外FK可能与某些中间外键冲突;这就是非规范化(或非规范化)数据具有固有风险并应明智使用的原因.

但是,您通常不会有26级嵌套表.使用2个,3个甚至6个主键意味着我可以将TableA连接到TableF而不使用任何中间表.

就个人而言,我会使用复合键并避免额外的FK,除非我有一个已知的,可重现的和可证明的瓶颈.大多数数据库都没有注意到任何差异..所以不要优化

标签:denormalization,mysql,database-design,normalization,denormalized
来源: https://codeday.me/bug/20190902/1792549.html