3

我正在尝试找出为我正在为学校俱乐部制作的网站设计这些表格的最佳方式。我想设置它,以便每个用户可以拥有多个与其帐户相关联的电子邮件、电话号码和地址。为此,我尝试将所有这些内容与联系人表联系起来,并将联系人 ID 作为外键存储在用户表中。联系人 ID 也是电子邮件、电话号码和地址表中的外键。这是关联这些表的可行方法还是我应该去掉中间人(联系人表)并将用户 ID 存储在电子邮件、电话号码和地址表中?

以防我对关系的描述还不够,这里是表格的 ERD:

ERD

对于这样一个“菜鸟”的问题,我很抱歉,因为我不得不构建一个比 2 个表更复杂的数据库已经有一段时间了。任何关于数据库设计的一般技巧都非常受欢迎。

4

4 回答 4

3

您需要做的就是删除Contacts 表并将user_id 存储在右侧的表中,而不是contact_id。

也从用户中删除contact_id。

于 2012-09-08T17:23:15.123 回答
3

我过去已经处理过这个问题。我们做错了,我们很抱歉。

决定因素应该是这些:

  1. 您是否有任何其他类别的人不是用户,您需要为其存储联系信息?

  2. 这些人会以某种方式与用户“互换”吗?

如果您对这两个问题都回答“是”,请保留您的联系表。否则摆脱它。

我工作的一个团队所犯的错误是我们对第二个问题的回答。我们有医疗患者和医生/护士/等作为我们的人群。我们将他们的联系信息存储在一起。但我们不应该这样做,因为患者的联系信息非常敏感和保密,但医疗保健提供者的信息则要少得多。我们一直希望在系统成功后,我们不会将这两种数据放在一组表中。

我说,除非你能说服自己你需要你的联系表,否则请摆脱它!

于 2012-09-08T17:26:16.290 回答
2

是的,我会删掉中间人:

虽然我很想走 'contact_type' 路线,但我发现通常有验证和不同的数据类型,当联系人是通用的时,它们会变得更加复杂。例如,具有地址字段的表格与电话号码不同,并且两者都具有更高的复杂性和更少的可读性。

该模型侧重于简单性,例如,一个用户有很多电子邮件,而一个电子邮件属于一个用户。

在此处输入图像描述

于 2012-09-08T17:35:59.063 回答
1

根据我的说法,您可以相应地设计数据库

Table 1 : Users
UserID //PK
Name

Table 2 : Contacts
ContactID  //PK
UserID  //FK to Users
ContactTypeID   // FK to ContactType
Value

Table 3 : ContactType
ContactTypeID   //PK
ContactTypeName
Description

表 1 非常清楚地存储了用户信息 表 3 包含有关联系人类型的信息,即电子邮件、家庭电话、手机、家庭地址、送货地址等 表 2 包含有关用户、联系人类型及其值的信息,例如 cinatacttypeid 对应于手机而不是值是,等等

于 2012-09-08T17:34:37.823 回答