在MySQL中存储多个属性

时间:2014-08-23 19:46:00

标签: mysql database-design data-modeling

我有一个数据库(用于PHP Web应用程序),其中包含具有各种属性的表client。 两个此类属性为phone_numbersemails

一个客户可以拥有零个或多个电话号码以及零个或多个电子邮件。

我希望将客户端表存储为:

create table client (
  id int not null auto_increment primary key,
  ...
  text phone_numbers,
  text e-mails) default character set utf8

电话号码的格式为"pn1:type1,pn2:type2,...,pnN:typeN" 和电子邮件的格式为"e1,e2,...,eN"

我以后可能会遇到这种设计的一些重要问题吗?

这些问题有更好的设计吗?为什么?

1 个答案:

答案 0 :(得分:3)

您正在考虑的结构没有标准化,并且会在您搜索,显示数据时以及在许多其他情况下给您带来问题。

最好有3个表:

client      (id, ...)
phonenumber (id, client_id, phone_type, phone_number)
email       (id, client_id, email)

...或只是2个表:

client  (id, ...)
contact (id, client_id, contact_type, contact_text)

我更喜欢后者,因为它提供了更大的灵活性(它可以处理社交网络帐户,网页和许多其他联系人的方式)。搜索比3表结构更容易,并且当您想要管理新的联系人类型时,不需要更改它。

相关问题