我该如何拆分数据库?

时间:2012-07-16 17:43:58

标签: database database-design

我有一个需要存储客户数据的数据库,我正在试图找出我需要的表格。到目前为止,我在想这样的事情:

客户表:

  • ID
  • 公司名称
  • 名字
  • 姓氏
  • 注释
  • 电话
  • alt电话

地址表:

  • LINE1
  • LINE2
  • 邮政编码

站点表(需要完成工作的物理站点)

  • 网站名称
  • 注释

客户将拥有1个联系地址和1个站点地址。两个地址可能相同(如果客户使用商家地址作为联系人)。但是,有时联系地址将与站点地址不同。

我需要两个地址表吗?一个用于客户地址,一个用于站点? 电话应该是一个单独的表,因为我有时会为每个客户存储2个?

3 个答案:

答案 0 :(得分:1)

你的设计看起来很不错,尽管你可能想要地址和网站中的id。我不确定您是否需要在客户表中打电话,除非您限制他们可以拥有的号码数量。一个站点是否需要一个地址(我是因为我不确定它是否是一个物理站点vs网站)?我提出这个问题是因为它可以影响设计。如果绑定到地址的唯一实体是客户,那么在地址中使用customer_id是有意义的。但是,如果地址在客户之间共享,或者在站点表中使用,那么我将为其创建连接表。

答案 1 :(得分:1)

您提到用户可以拥有的电话号码是可变的。在这种情况下,我不会像现在这样硬编码有两个电话号码的客户。拥有一个单独的电话号码表可以使这更灵活。

电话表:

  • 客户ID(外键)
  • 电话号码

答案 2 :(得分:0)

如果您有Customer表和Site表,则可以在其中引用Address表。

这将允许您为客户和站点使用相同的地址或不同的地址。请注意,更新地址将为客户和站点更新地址。

客户表:

  • ID
  • 公司名称
  • 名字
  • 注释
  • 电话
  • alt电话
  • 地址ID(外键)

网站表:

  • ID
  • 网站名称
  • 注释
  • 地址ID(外键)

地址表:

  • ID
  • LINE1
  • LINE2
  • 邮政编码

对于电话号码,该表可以处理2个电话号码。你的意思是他们会有2个主要数字,然后交替吗?