2012-07-16 146 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(外鍵)
  • 電話號碼