数据库设计:用户提供联系信息

时间:2011-05-24 18:18:24

标签: database database-design

我有一个数据库设计问题。

在我的应用程序中,用户有联系信息,包括

  • 电话号码
  • 电子邮件
  • 地址第1行
  • 邮政信箱
  • 地区(城市)

这是currentl位于“用户”表格中,其他信息包括用户名,名字等......

事情是,用户必须拥有相同类型的信息(电话,电子邮件......),但对于他的公司而言。

向“user”表添加其他字段似乎是多余的。由于数据类似,我可以使用以下字段创建“ContactInfo”表:

  • 电话
  • 电子邮件
  • 地址
  • 邮政信箱
  • ...

这是一个好主意,我该如何处理“用户”表和这个“contactInfo”表之间的关系?

编辑:我忘了说公司联系信息不是强制性的。用户根本就没有公司。

3 个答案:

答案 0 :(得分:1)

用户之间任何具有1:M关系的东西都应该在它自己的桌子上。如果您只关心用户的主要联系信息,那么您可以将其保留在用户表中。

例如:如果可以接受两个电话号码(或更多),那么您将拥有另一张表,其中包含用户表的外键以及电话号码,电话类型和联系订单优先级。

答案 1 :(得分: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.id的外键。 user_contact_info.contact_type将设置为workhome或您需要的任何其他类别。

答案 2 :(得分:0)

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