Sta*_*bie 3 mysql database-design normalization denormalization denormalized
假设TABLE-A在TABLE-B中可以有一行或多行,它们可以在TABLE-C中有一行或多行,它们可以在TABLE-D中有一行或多行......依此类推.
假设我在TABLE-Z并且需要知道有关TABLE-A的详细信息.我是否从TABLE-Z一直到TABLE-A进行SQL查询?在某些时候,如果说TABLE-Z有一个FK到TABLE-A那么也许会很好,所以查询不会那么痛苦.但是,如果我把那个FK,我想我会破坏正常化,对吧?
关于如何处理这个问题的一般建议?
如果使用复合主键(如果在创建任何表之前正确地对设计进行建模,则实际会发生这种情况),TableA中的键已经包含在TableZ中(作为最左侧的列).
然而,民间通常添加代理键而不理解为什么.因此,您需要连接所有26个表以建立TableA和TableZ之间的链接
TableA和TableZ之间的额外FK可能与某些中间外键冲突;这就是非规范化(或非规范化)数据具有固有风险并应明智使用的原因.
但是,通常不会有26级嵌套表.使用2个,3个甚至6个主键意味着我可以将TableA连接到TableF而不使用任何中间表.
就个人而言,我会使用复合键并避免额外的FK,除非我有一个已知的,可重现的和可证明的瓶颈.大多数数据库都没有注意到任何差异..所以不要优化