4

我在这里检查了这个问题,但不幸的是,图表的链接不起作用,所以我被卡住了。

我正在尝试为一个用户(工作、业务、个人等)发送多封电子邮件,但我不确定如何最好地处理这种情况。

我想有 4 个表:user、email、email_type 和 user_has_email(用户 N:M 电子邮件)。我做了两张图,但我不知道哪一张会更好。

如果一个用户有相同的工作和个人电子邮件(因为我不必存储它两次),第一个图表对我有帮助。第二个选项也不错,但即使一个用户将同一电子邮件用于工作、商务、个人等,我也必须存储两次或更多电子邮件。

我打算使用相同的想法来存储地址,它比电子邮件占用更多的空间,我认为图 1更适合于此。

你怎么看?

图 1
- user_has_email 的解释:我选择进行 email_type PK 是因为可能存在用户拥有相同的工作或个人电子邮件的情况。如果我不 PK email_type,我将只能为每个用户拥有一个 email_type。我是不是太复杂了?

图1


图 2 图 2

4

3 回答 3

3

相反,我会使用

user (user_id, first_name, last_name)
user_emails (user_id, email_type_id, email)
email_types (email_type_id, email_type)
于 2013-06-14T17:22:46.323 回答
1

出于以下原因,我更喜欢图 1。

  1. 您可以将电子邮件字段设为唯一,这样无论类型如何,您都只能存储一次。
  2. 如果您面临必须在用户和电子邮件之间建立一对一关系以获得其他功能的情况,那么将电子邮件和电子邮件类型紧密耦合似乎并不正确。
  3. 任何类型的用户-电子邮件关系验证都应该在业务逻辑中处理(即使您在数据库中有约束)。
于 2013-06-14T17:52:14.037 回答
1

以下结构应符合要求:

在此处输入图像描述

用户和电子邮件之间存在 1:N 的关系,每个用户的电子邮件可以有零个或多个类型,来自共享类型的集合

如果电子邮件类型不需要在用户之间共享,模型可以进一步简化:

在此处输入图像描述

顺便说一句,由于地址固有的“模糊性”,将 M:N 用于地址的情况也不清楚 - 请参阅这篇文章以了解有关该主题的一些思考。

于 2013-06-16T00:31:10.700 回答