2014-08-29 25 views
0

例如,我有一个联系人数据库,其中包含有关联系人的一些基本信息。名字,姓氏,电话号码等向数据库提供可定制类别的首选方法是什么?

尽管我的选项可以包含一些明显的联系方式,但它需要一种方法,用户可以添加自己的自定义字段,如'网站',' widget_1'等等。

我的第一个想法是在first_name,last_name等之后的contacts表中添加一些杂项列,并使它们成为一个大型varchar数据类型,以便有人可以在其中存储任何信息。这似乎马虎,甚至仍然无法扩大接触细节超过杂项字段的数量。

最好我希望用户点击'添加自定义字段',然后用数据填充它。什么是一个聪明的方法来做到这一点,而不会混淆数据库?

+2

另一张带有唯一ID的表,一个用于联系人id的外键,然后是键/值列。 – 2014-08-29 17:43:55

回答

1

要做到这一点,最简单的方法是让另一个表看起来是这样的:

CONTACT_ID INT PK, FIELD_NAME VARCHAR(64)PK, FIELD_VALUE TEXT

你可以有CONTACT_ID场成为联系人表的外键,然后在您想要读取自定义字段时加入此表。

1

没有什么好的解决方案真正适合关系数据库范例。允许每个用户选择他或她的自定义字段以补充常规列从根本上破坏了relation的定义。

尽管如此,您所描述的是数据驱动型应用程序的通用要求。我做了一个演示,显示选项,以及他们的优缺点:Extensible Data Modeling

您也可以阅读我对Product table, many kinds of product, each product has many parameters的回答,这是一个类似的数据管理问题。

所有的解决方案在SQL中似乎或多或少都很笨拙,因为SQL不是为这项任务设计的。这就是为什么有些人被NoSQL解决方案所吸引。但是通过这样做,他们放弃了SQL所具有的一些优点,例如表格标题,约束和正确的数据类型。

相关问题