Database design 多对多关系

Database design 多对多关系,database-design,Database Design,我有两个表,customers和bank accounts,具有多对多关系(每个用户可以有多个帐户,一个帐户可以属于多个用户)。但是,该表的某些属性(如customers表中的电子邮件)为空(大多数客户没有电子邮件)。我怎样才能解决这个问题?是否创建新表?否。在表中,客户允许字段为空或0。如果一个客户有多封电子邮件,请创建一个新表“emails”,并以一对多关系将其链接到“customers”表。让数据库列大部分由空值组成没有什么错。它被称为稀疏列 您可以将可选列放在单独的数据库表中。如果附加键

我有两个表,customers和bank accounts,具有多对多关系(每个用户可以有多个帐户,一个帐户可以属于多个用户)。但是,该表的某些属性(如customers表中的电子邮件)为空(大多数客户没有电子邮件)。我怎样才能解决这个问题?是否创建新表?

否。在表中,客户允许字段为空或0。如果一个客户有多封电子邮件,请创建一个新表“emails”,并以一对多关系将其链接到“customers”表。

让数据库列大部分由空值组成没有什么错。它被称为稀疏列

您可以将可选列放在单独的数据库表中。如果附加键和主索引的开销小于所有空值“浪费”的存储量,那么您甚至可以使用更少的存储空间。这不太可能,因为现代数据库优化稀疏列以使用最小的存储空间


您必须为客户表和/或银行帐户表中的每个稀疏列定义一个单独的数据库表。

虽然创建稀疏列不会损坏数据库,但我建议不要这样做。首先,允许空值违反了更高的标准形式,出于数据完整性的原因,应该避免使用空值

其次,一个客户可能有多个电子邮件地址,因此电子邮件地址不是关系代数中客户的“属性”,不能由单个客户列处理


我建议创建一个单独的电子邮件表,使用唯一的主键和customerID作为非唯一的外键。添加尽可能多的客户电子邮件记录。

您应该完善您的问题……您到底想修复什么?是否设置了客户的电子邮件字段?是否使用电子邮件列连接表?或者?你说的“修复”是什么意思。。。在一个表中有不需要总是包含数据的列是可以的。这个“问题”似乎与您正在对多对多建模的事实也没有关系。也许你可以重新措辞?我的意思是修复,在一个表中有这么多空的列可以吗