2011-05-24 33 views
0

我有一個數據庫設計問題。數據庫設計:用戶與聯繫信息

在我的應用程序,用戶必須聯繫信息,包括

  • 電話號碼
  • 電子郵件
  • ADRESS線1
  • 郵政箱子
  • 地區(城市)

這是當前位於另一個「用戶」表中的當前位置信息如用戶名,名字,...

事情是,用戶必須擁有相同類型的信息(電話,電子郵件,...),但他的公司。

向「用戶」表中添加其他字段似乎是多餘的。由於數據是相似的,我可以做一個 「的ContactInfo」 表中的字段:

  • 電話
  • 電子郵件
  • 地址
  • 郵政箱子
  • ...

這是一個好主意,我應該如何做「用戶」表和這個「contactInfo」表之間的關係?

編輯:我忘了說公司聯繫信息不是強制性的。用戶根本沒有公司。

回答

0

單獨的表格是正確的選擇。

CREATE TABLE users (
    id INT UNSIGNED NOT NULL, 
    foo VARCHAR(50), 
    PRIMARY KEY (id)); 

CREATE TABLE user_contact_info (
    id INT UNSIGNED NOT NULL, 
    user_id INT UNSIGNED NOT NULL, 
    contact_type VARCHAR(40) NOT NULL, 
    phone VARCHAR(20), 
    email VARCHAR(200), 
    address VARCHAR(200), 
    postal_box VARCHAR(20), 
    PRIMARY KEY (id, user_id)); 

如果你的數據庫支持外鍵,應該有一個外鍵從user_contact_info.user_idusers.iduser_contact_info.contact_type將設置爲workhome或您需要的任何其他類別。

+0

這實際上是我想要做的。這似乎是正確的選擇 – 2011-05-24 18:33:20

+0

只有那件事是可選的工作信息。我想知道當用戶刪除他的公司信息時該怎麼辦。 user_contact_info中的行將爲空。 – 2011-05-24 18:34:33

+0

你是說你想跟蹤公司的聯繫信息?如果是這樣,只需添加一個「公司」表。如果一家公司可以有多個電話,地址等,可以像上面的user_contact_info表一樣製作一個'company_contact_info'表。如果你想將一個'user'關聯到'company',那麼創建一個支持多對多關係的'user_company'表(關係類型爲'employee','customer',都是? )。 – 2011-05-24 18:35:31

1

任何用戶之間的1:M關係應該在它自己的表上。如果您只關心用戶的主要聯繫信息,那麼您可以將其保留在用戶表上。

例如:如果可以接受兩個電話號碼(或更多),那麼您將擁有另一個帶有用戶表的外鍵的表格,並且電話號碼,電話類型和聯繫順序優先級。

0

你應該有一個單獨的電話表,一個單獨的電子郵件表和一個單獨的地址表。人們有三個以上的人。