多对多的关系

时间:2011-02-28 01:10:15

标签: database-design

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

3 个答案:

答案 0 :(得分:0)

没有。在表中,客户将该字段设为null或0.如果客户有多个电子邮件,请创建一个新表“emails”并以一对多的关系将其链接到“customers”表。

答案 1 :(得分:0)

拥有一个主要由NULL值组成的数据库列没有任何问题。它被称为稀疏列。

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

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

答案 2 :(得分:0)

虽然创建稀疏列不会破坏您的数据库,但我建议不要这样做。首先,允许空值违反较高正常形式,应该避免出于数据完整性原因。

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

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