两个存储电子邮件地址的数据库表,其中一个地址要设置为默认值

时间:2013-12-04 16:39:12

标签: sql sql-server database database-design

我有一个SQL Server数据库,其中包含两个包含电子邮件地址的表。一个包含组织为用户创建的电子邮件地址,另一个包含用户个人电子邮件收件人。

我们希望为用户提供将其中一个设置为首选联系人电子邮件地址的选项。在数据库中表示这个的最佳方法是什么?

据我所知,我可以: -

  1. 在名为is_preferred的每个表上创建相同的字段。创建存储过程以在电子邮件地址所属的相应表中设置正确的字段,确保未将任何其他电子邮件地址设置为默认值
  2. 创建一个存储首选邮件地址ID的新表。我需要在这个表中有一个'邮件类型',以便知道我需要在哪个表中查找邮件地址.I.e。个人或组织电子邮件。
  3. 您认为哪种解决方案最好?

    用户可以拥有多个组织邮件地址以及多个个人电子邮件地址。

3 个答案:

答案 0 :(得分:2)

以下是模仿此方法的一种方法:

enter image description here

注意:如果没有(特定字段)(特定约束),只需将所有三个电子邮件表合并为一个。

EMAIL的复合PK建立了给定人员级别的电子邮件订购。然后,您可以简单地引入一个约定,即相对于该排序的第一行是“首选”电子邮件。


这是另一种方式(如果你想要更简单的键):

enter image description here

答案 1 :(得分:0)

我会创建一个包含email_idemail_addressemployee_idtype列(个人或组织标志)的电子邮件地址表。然后,我会将列preferred添加到我的员工表中,并让它存储相应的email_id

我认为电子邮件地址必须是DISTINCT,因此您可能会将ID全部废弃,并将地址作为密钥。

答案 2 :(得分:0)

我希望有一个单独的表

UserId, PreferredOrgEmailId, PreferredPersonalEmailId

这整个情况远非理想,但如果你不得不使用它......单独的表将起作用。因此,您可以使用FK确保您的数据不会失去同步。此外,可能是一个检查约束,以确保您只能填充一个电子邮件ID(组织或个人)。

实际上,在这个新表中存储电子邮件地址将是2NF。