如何建模联系人信息数据库

How to modell contact information database

我正在尝试创建一个联系信息系统,但我对数据库建模非常困惑。

我今天想的是让一个人 table 了解一个人的基本信息(姓名、名字、姓氏、社会保障号码、性别、出生日期等)。 我正在考虑为地址、电子邮件地址、公司、phone 号码、昵称、别名等创建新的 tables

使用 FK 将这些创建到主要人员条目不是问题。但是,例如电子邮件地址。对于多个用例,用户将拥有多个电子邮件地址。 一个是私人的,一个是与公司有某种联系的。

我想知道是否有任何明智的方法可以将公司电子邮件地址与公司中的公司条目联系起来 table?

我想我可以得到从电子邮件地址到公司 table 的 FK,但是如果 link 不应该发给公司,而是发给其他实体怎么办?比如只在特定情况下使用的组织、别名或电子邮件地址?

同样的情况会发生。还可以申请 phone 号码,postal/visit 地址等

您无法为 "a person has an email address which is linked to just about anything" 之类的东西建模。您需要具体说明这些关系。

如果您希望能够在不修改现有 table 的情况下添加特定关系(您应该这样做),那么您最好不要从电子邮件地址添加 FK 到公司。毕竟,实体 "email address" 不知道它与公司有关系,因为某些电子邮件地址可能有其他关系。属于公司的电子邮件地址不是本质上的,而是您要添加的附加方面。

也就是说,您可以添加关系 table,它们表示这些关系类型。对于每个新关系,您需要添加另一个 table(IMO 还不错),或者使用单个 table 并在非电子邮件地址端添加列,指向公司、组织或其他任何内容.