我有一个表(X),它有10列,其中6列是可空的外键(bigint数据类型),在每一行中,其中5列为空。
解决方案:将表(X)分为两个表:(X)和(XType),以便(X)包含一个大int列(而不是外键),用于插入6个ID中的一个,以及一个用于确定6个数据类型的XType_id列。
这个解决方案是最优的还是第一个有10列的表更好?
发布于 2012-12-16 08:21:02
我更喜欢你的第一个选择。
当您拥有这6个单独的外键列时,您可以通过对这6个引用表的实际外键约束来强制执行引用完整性。
如果您有一种具有单个ID和ID_Type的超级智能方法,则不能再强制执行引用完整性了。
对我来说,能够真正执行引用完整性的好处远远超过的“好处”,只有一个ID列;有几个带有NULL值的列并不坏。
发布于 2012-12-16 15:39:30
s's answer是绝对正确的,让我再补充一点:第二种方法不太可能节省空间(通过扩展,改进缓存)。represented将在一个位字段中对字段的“空”进行编码,而6个可空的列可以用一个字节表示。第二种方法中的"type“字段将不少于一个字节。
顺便说一句,如果您的FKs是不同类型的,那么您的第二种方法将需要将FK值存储为“最低公共分母”类型(可能是字符串)并手动进行类型转换,因此您也会失去域的完整性。
https://stackoverflow.com/questions/13898925
复制相似问题