扩展列表的数据库设计

时间:2011-11-26 16:29:23

标签: database database-design

不可否认,我只是在寻找一些方向。我有一个特定的情况,作为数据库设计的新手我迷失了如何开始解决这个问题。首先让我解释一下我的情况。

我有一个名为contacts的mysql表。顾名思义,它存储了一个联系人列表以及每个联系人的名称,如名字,姓氏,电子邮件,电话号码等。我希望我的应用程序的用户能够添加无限量的确定每个联系人的属性。因此,例如,而不是具有一个电话号码的联系人,用户可以添加另一个号码,如果他们选择其他号码,则基本上,我的数据库中的联系人可以具有与用户需要的电话号码一样多的电话号码。对于表格中的其他字段也是如此,但为了简单起见,我们仅以电话号码为例。

那么最好的方法是什么?我应该有一个名为contactsPhone的单独表,并且具有匹配的id列,以便电话表中的任意行数可以与联系人表中的一行相关联吗?或者有没有办法在联系人表格中存储某种ArrayList,这样我就可以在一个字段中拥有多个电话号码?

2 个答案:

答案 0 :(得分:3)

你应该在document database中看一下这样的建模 - 关系数据库对于灵活的模式来说是一个糟糕的选择。您可以将这些特定部分数据放在文档数据库中。

如果你必须,常见的解决方案就是entity-attribute-value pattern - 请注意,这需要多个连接,这使得广告查询很困难并且通常很慢。


更新

我误解了一下这个问题 - 如果你确实知道你想要保存多个值的属性,并且这个列表不会改变(或者不会改变太多),那么entity-attribute-value可能不是最好的前进方式。

每个这些属性的一对多表将起作用(并且是这种问题的标准关系解决方案) - 每个这样的表都需要一个外键到你的联系人表和一个列来保持一个属性值。这允许您针对单个联系人拥有多个属性值。

答案 1 :(得分:1)

  

我希望我的应用程序的用户能够添加无限制   每个联系人的某些属性的数量。所以,比如说   与具有一个电话号码的联系人相比,用户可以添加另一个   数字,另一个,如果他们选择等基本上,我的联系人   数据库可以包含用户需要的电话号码。

您没有为每个联系人描述无限数量的属性。 (这是一件好事。)您正在描述单个属性的无限数量的行,在这种情况下是联系人的电话号码。

所以,是的,联系电话号码表可以很好地运行。您可能想要考虑用户如何识别电话号码。例如,他们是否需要区分家庭电话号码和工作号码等。