2011-05-24 35 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

你应该有一个单独的电话表,一个单独的电子邮件表和一个单独的地址表。人们有三个以上的人。