作为他需要的描述的一部分,一位客户要求能够添加要保存的属性。
我对如何做到这一点有两个想法:
- 创建EAV表。
- 将存储额外数据的 XML 文档。
我不太喜欢这两种方法:
第一种是我应该避免阅读的所有内容。(例如:这里,第三件事)
第二个我想避免,所以我不会混合。
有没有更好的方法来做到这一点?
(我使用的是 c#,linq to sql,vs 2010)
这是一个很难问的问题。
如果您的客户的数据真正或有效地无模式 - 即每条记录的属性可能因每一行而变化不可预测 - 那么关系模型在这种情况下不适合,您需要查看不同的解决方案 - NoSQL,也许,或者以文档为导向。
如果您的客户真的说“我希望以后能够向数据模型添加属性,并且我还不想对这些属性下定决心”,但它基本上是一个关系数据模型,您可能会考虑自动化模式生成过程;这很痛苦,但是在 Ruby on Rail 中,有一个 Active Record 模式迁移的示例。您的编程语言可能有一个已建立的库。
如果您的客户说“我们有这个固定的数据核心,但根据具体情况,我们希望添加我们现在无法描述的额外数据”,那么我会选择 XML/Jason /YAML 样式的记录,附加到核心关系记录。大多数数据库引擎现在原生支持 XML,包括通过 XPath 等进行查询。
根据我的经验,关系模型中包含的 XML 文档提供了很大的灵活性和合理的性能。编程模型有点笨拙,但在大多数情况下远没有 EAV 笨拙。