SQL - 使用分层模型设计电话簿数据库(主客户端)

时间:2013-01-06 14:32:45

标签: sql-server database-design

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

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

  • 联系人有2种类型(公司或个人) - > ContactType
  • 我希望每个联系人都能拥有所需数量的电子邮件,电话号码和地址。
  • 我想指明哪个人在哪个公司工作,所以我不仅可以显示公司联系人详细信息,还可以显示其员工名单及其在该公司及其联系人中的工作(CoEmpJob表)

我设计了一个db图,它显示在下面的链接中,结构合理还是可以以更好的方式实现我想要的?

提前致谢。

My Phone Book Design

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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