您在上面的评论中写道:
daccess-ods.un.org daccess-ods.un.org“数据库系统基础”一书中说,如果外键列中有很多NULL值,则建议使用交集表(例如:如果98%的员工不管理部门)
当外键列中有很多NULL值时,您的程序将不得不为其处理的每条记录处理这个几乎为空的列。即使在所有情况下98%的列为空,该列也可能会占用一些磁盘空间,查询关系意味着查询该列会为您提供更多的网络流量,并且如果您使用的是从表中生成类的ORM,则程序客户端所需的空间也将超出必要。使用交集表可以避免这种情况,否则只有等效的外键不为NULL的链接记录才是必需的。
与此相反,如果您不只是几个NULL值,可以说50%或更多的关系不是NULL,则使用相交表会产生相反的效果-更大的磁盘空间,更高的复杂度导致更多的网络流量等。
因此,使用交集表只是一种优化形式,仅在特定情况下才有意义,尤其是在如今磁盘空间和内存变得更便宜,不再需要频繁使用的今天。请注意,“数据库系统基础知识”最初是20多年前写的(我发现是1994年第二版的参考),我想当时已经有建议了。在1994年之前,空间优化可能比今天更为重要,因为大容量存储仍然更加昂贵,并且计算机和网络比今天慢得多。
作为一个挑剔的注释的一个旁注:以上陈述只是试图预期“数据库系统基础知识”作者的建议时所想到的内容,我想他正在做出一个粗略的,概括性的陈述,适用于大多数系统。在某些数据库中,还有其他一些可能的优化方法,例如“稀疏列”,这使交叉表的使用变得过时了。
因此,不要误解该建议。这本书并没有告诉您{0,1}:n
通常对于关系而言更喜欢使用交集表,或者-如您所写的-这是“正确的方法”。使用这样的优化,只有在您真正需要它们时,它们才会使您的程序更加复杂。