我有一个数据库(用于PHP Web应用程序),其中包含具有各种属性的表client
。
两个此类属性为phone_numbers
和emails
。
一个客户可以拥有零个或多个电话号码以及零个或多个电子邮件。
我希望将客户端表存储为:
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"
。
我以后可能会遇到这种设计的一些重要问题吗?
这些问题有更好的设计吗?为什么?
答案 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表结构更容易,并且当您想要管理新的联系人类型时,不需要更改它。