我对数据建模很陌生,所以如果我错过了一些明显的东西,请原谅。我试图决定一个模式(或者可能是一个 DBMS)来处理一些数据,其中有很多可能的属性(可能是 60-100),但只有少数适用于每条记录。这是我看到的选项。
只需将每个属性包含为列,对于任何给定记录,大多数属性将为 NULL。
优点:保持架构简单,保持查询简单
缺点:不优雅,笨拙,添加/删除属性需要更改架构
用于列出属性及其值的单独表格。这就是我之前看到这个问题的处理方式。例如,WordPress 在他们的*meta
表格中使用了这样的东西。
优点:概念上易于理解,灵活
缺点:查询构造变得很痛苦,性能受到影响,最终会得到大量重复数据(即一遍又一遍地列出相同的属性名称)。
使用专为处理无模式数据而构建的 DBMS。我看过 MongoDB、RethinkDB 和 OrientDB。OrientDB 看起来很酷,但我不懂 Java,而且它似乎主要是 Java 的东西(例如,PHP 驱动程序看起来有问题)。
优点:专为处理灵活的模式而构建,速度快
缺点:关系似乎很困难,我没有使用它们的经验,似乎有很多重复的数据(例如,如果我想更改属性名称会发生什么?),查询似乎更复杂
附带说明一下,此应用程序不会获得很多流量,并且并发连接也很少。因此,可扩展性是一个相当小的问题。感谢您的任何建议。