MySql与NoSql - 用户定义的字段

时间:2014-03-18 15:36:40

标签: php mysql mongodb

我正在构建一个主要是关系概念(一对多关系)的php应用程序,其中90%的字段/列是预先确定的。这对于mysql db来说听起来很完美。我的挂断是我需要允许用户定义一些字段,以便应用程序可以满足用户的需要。

我在mysql和nosql之间往返(mongodb是具体的)但我讨厌将整个应用程序移动到mongodb,当我需要的是我的表中大约10个用户定义字段。是的,如果我转移到nosql然后我有能力让每个用户拥有自己的架构但是我失去了连接表的能力,这会打开另一个问题世界。仅当嵌入文档具有可管理的大小时才建议嵌入文档,而在我的情况下则不建议嵌入文档。此外,我的整个应用程序都是关系型的,所以即使我在必须链接到另一个集合时嵌入了一个没有解决问题的文档。

我想我的问题是,有没有人知道一种简单的mysql方式,允许用户添加5-10个可搜索和可排序的自定义字段/列。这将限制在5-10个字段,以防止我的模式在未来爆炸,具有无限的用户定义字段(如许多关于EAV模型的文章中所述)。

我知道堆栈上有一些文章,但其中很多是2009-2011,所以我只是想看看是否有任何新的解决方案/模型。请帮忙。如果我必须去nosql / mongo路线,我的下一篇文章将是关于如何使用引用从两个集合构建一个表(如左连接)。感谢。

1 个答案:

答案 0 :(得分:1)

请提供有关用户确定字段的更多信息,例如数据类型,大小,每个用户的字段数等。

由于您已经提到90%的字段是预定义的,我认为MySQL仍然适合您需要更好。也许尝试将这些用户定义的数据存储在一个单独的表中,让我们称之为user_defined_fields

这个user_defined_fields表应该有4列(如果需要,还有更多):

  • id:数据库默认主键(不是必需的)
  • user_id:该行所属的用户,指向原始users
  • attr_name:字段名称
  • attr_value:该字段的任意数据

(user_id, attr_name)添加唯一索引。 添加更多索引,以便更容易地使用不同的查询方式。

然后您可以照常加入,获取预定义信息和特定用户的所有用户定义数据。