2

我刚加入这个网站,这是我的第一个问题,我希望我的问题符合 StackOverflow 问题政策。

我正在设计一个具有以下能力的电话簿数据库

  • 联系人有 2 种类型(公司或个人)->ContactType
  • 我希望每个联系人都拥有尽可能多的电子邮件、电话号码和地址。
  • 而且我想指定哪个 Person 在哪个 Company 工作,因此我不仅可以显示 Company 联系方式的详细信息,还可以显示其员工列表及其在该公司中的工作及其联系人(CoEmpJob 表)

我设计了一个 db 图,如下面的链接所示,它的结构是否良好,或者我能以更好的方式实现我想要的吗?

提前致谢。

我的电话簿设计

4

1 回答 1

0

就设计而言,您缺少一些东西,例如 Companies 表和 ContactTypes 表。CoEmpJob 表中似乎没有链接到 Contacts 表的外键。

在 Phones 表中,我个人不会使用前缀字段(除非您希望按电话前缀显示联系人),在这种情况下,每个电话号码都保证是唯一的,在这种情况下,PhoneNum 字段将成为主键,而PhoneID 字段是不必要的 - 但您可能会遇到夫妻在同一个数据库中的情况;虽然他们几乎可以肯定有不同的手机号码,但他们几乎可以肯定共享同一个家庭电话号码!在这种情况下,您的设计是正确的。

我不知道有多少人拥有多个地址(如果有的话,我认为很少),这意味着地址表的字段可以移动到联系人表中。

(添加)关于公司,如果您想指定哪个 Person 在哪个 Company 工作,那么您将需要一个公司表(缺失)和一个连接表(CoEmpJob)。在现实世界中,这种设计还需要更多的表——连接表可以显示哪些联系人与哪些公司相关联以及他们当前的工作是什么,但人们会更换工作(和公司),因此这样的设计不会存储任何历史记录. 此外,习惯上将人员(员工)连接到一个部门 - 一个人可能一次连接到多个部门,这意味着您将需要另一个连接表。这可能会变得非常复杂——这取决于你想要什么。

您的评论表明您希望将公司数据存储在联系人表中 - 这是一个非常糟糕的主意;他们应该分开。

于 2013-01-07T05:36:58.187 回答