为数据库提供可自定义类别的首选方法是什么?

时间:2014-08-29 17:33:57

标签: mysql database

例如,我有一个联系人数据库,其中包含有关联系人的一些基本信息。名字,姓氏,电话号码等。

虽然我的选项可以包含一些明显的联系人详细信息,但是需要有一种方法可以让用户添加自己的自定义字段,例如“网站”,“widget_1”等。

我的第一个想法是在first_name,last_name等之后在contacts表中添加一些杂项列,并使它们成为一个大的varchar数据类型,以便有人可以在那里存储任何信息。这似乎很草率,甚至我们无法通过杂项领域的数量扩大联系方式。

最理想的是,我希望用户点击“添加自定义字段”之类的内容,然后使用数据填充它。在不混淆数据库的情况下,这样做的智能方法是什么?

2 个答案:

答案 0 :(得分:1)

最简单的方法是使用另一个看起来像这样的表:

contact_id INT PK, field_name VARCHAR(64)PK, field_value TEXT

您可以将contact_id字段作为联系人表的外键,然后只要您想要读取自定义字段,就可以加入此表。

答案 1 :(得分:1)

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

然而,您所描述的是数据驱动应用程序的常见要求。我做了一个演示文稿,展示了各种选项,以及它们的优点和缺点:Extensible Data Modeling

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

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