2012-07-16 91 views
2

我有一个数据库,需要存储客户数据,我试图弄清楚我需要什么表。到目前为止,我想是这样的:我应该如何拆分数据库?

客户表:

  • ID
  • 公司名称
  • 名字
  • 笔记
  • 电话
  • ALT电话

地址表:

  • 一号线
  • 2号线
  • 邮编

网站表(实物网站,工作需要做)

  • 网站名称
  • 笔记

一位顾客将有1个联系地址和1个+站点地址。这两个地址可能相同(如果客户使用公司地址作为联系人)。但有时联系地址将与站点地址不同。

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

回答

1

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

+0

该网站是一个物理的地方所特有的一个客户。 – dan 2012-07-16 18:19:27

+0

这是有道理的(我只是用看到网站指网站)。为客户和站点建立连接表,然后为地址创建连接表。例如:customer_address:(customer_id,address_id)或站点地址:(site_id,address_id) – 2012-07-16 18:27:11

+0

嘿,我不明白连接表是如何与地址表中的Customer_ID和地址中的Address_ID连接到客户地址表 – dan 2012-07-17 19:32:24

0

如果您有客户表和地点表,则可以在其中引用地址表。

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

客户表:

  • ID
  • 公司名称
  • 名字
  • 笔记
  • 电话
  • ALT电话
  • 地址ID(外贸科Y)

站点表:

  • ID
  • 站点名称
  • 笔记
  • 地址ID(外键)

地址表:

  • ID
  • 一号线
  • 2号线
  • 邮编

至于电话号码,该表已经能够处理2个电话号码。你的意思是他们会有2个主要数字,然后交替?

+0

对于电话号码他们不会总是有2,所以一个字段可能会被留空。我认为这是糟糕的设计? – dan 2012-07-16 18:24:12

+0

我会离开它的方式,我以前就这样做过。我们的DBA从来没有反对过它。也许有人可以详细阐述糟糕的设计,因为我也没有意识到这一点。 – Zadam 2012-07-16 20:11:31

1

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

电话表:

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