我有一个数据库设计问题。
在我的应用程序中,用户有联系信息,包括
这是currentl位于“用户”表格中,其他信息包括用户名,名字等......
事情是,用户必须拥有相同类型的信息(电话,电子邮件......),但对于他的公司而言。
向“user”表添加其他字段似乎是多余的。由于数据类似,我可以使用以下字段创建“ContactInfo”表:
这是一个好主意,我该如何处理“用户”表和这个“contactInfo”表之间的关系?
编辑:我忘了说公司联系信息不是强制性的。用户根本就没有公司。答案 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_id
到users.id
的外键。 user_contact_info.contact_type
将设置为work
或home
或您需要的任何其他类别。
答案 2 :(得分:0)
您应该有一个单独的电话表,一个单独的电子邮件表和一个单独的地址表。人们有三个以上。