可以为N的外键与N:M关系的关系表

Emi*_*lás 4 mysql database performance database-design

我是一位存在怀疑的数据库设计师.

如果你有一个table1必须与table2或(独占或一个或另一个)table3有关系,

  • 什么是aproach,为什么你会选择高读取性能?在此输入图像描述

知道可以为空的索引字段(选项A table1)是一个错误的决定(参见O'Reilly高性能MySQL第3章或MySQL手册),但也知道连接需要花时间执行(选项B)......

学术选择将是B,但我想要一个现实世界的解释,如果它真的更好的高性能与否.

提前致谢!!

nvo*_*gel 5

避免可以为空的"外键".它们有许多缺点.

当外键包含null时,并不总是强制执行引用行的约束.但是,不同DBMS之间的默认行为不一致.某些DBMS支持配置选项以更改可以为空的外键的行为,而有些则不支持.因此,从数据完整性的角度来看,SQL开发人员和用户可能不清楚可以为空的外键约束实际意味着什么.使用相同产品在DBMS产品之间或甚至在不同服务器之间移植数据库可能会产生不一致的结果.

数据库设计工具,集成工具和其他软件并不总是正确地支持它们,它们产生的结果可能是错误的.

外键经常在连接和其他查询逻辑中使用,为那些认为约束有效的用户复杂化问题.

从逻辑上讲,可以为空的"外键"约束并没有太多的逻辑意义.根据SQL标准,即使被引用的表为空,也不会违反这样的约束.这与使用空的最常见的理由之一相矛盾 - 它代表了"未知"的情况.如果没有X的有效值,则任何"未知"X当然不能是有效值 - 而SQL将允许它.

这是不必要的.您始终可以构造表,以便不需要null.因此,为了简单和准确,最好不要使用空值而不是放入空值.