没有EAV的灵活数据库

时间:2013-09-17 10:40:40

标签: database entity-attribute-value

作为对所需内容的描述的一部分,客户要求能够添加要保存的属性 我有两个想法如何做到这一点:

  1. 创建EAV表。
  2. 将存储额外数据的XML文档。
  3. 我真的不喜欢这两种方法:
    第一个是我读到的东西,我应该避免。 (例如:here,第三件事)
    第二个我想避免,所以我不会混合。

    有更好的方法吗?

    (我正在使用c#,linq to sql,vs 2010)

1 个答案:

答案 0 :(得分:1)

这是一个很难问的问题。

如果您的客户端数据真正或有效地无模式 - 即每行记录的属性可能会因每行不可预测而变化 - 那么关系模型在这种情况下并不合适,您需要查看不同的解决方案 - 也许是NoSQL,或者是面向文档的。

如果您的客户真的在说“我希望以后能够为数据模型添加属性,而我现在还不想对这些属性做出决定”,但它基本上是一个关系数据模型,您可以考虑自动化模式生成过程;这很痛苦,但在Ruby on Rail中,有一个Active Record模式迁移的例子。可能有一个已建立的编程语言库。

如果您的客户说“我们有这个固定的数据核心,但是根据具体情况,我们希望添加我们现在无法描述的其他数据”,那么我会选择XML / Jason / YAML样式记录,附加到核心关系记录。大多数数据库引擎现在本身都支持XML,包括通过XPath等进行查询。

根据我的经验,关系模型中包含的XML文档提供了很大的灵活性和合理的性能;编程模型有点尴尬,但在大多数情况下远不如EAV笨拙。