我正在为我的应用程序的数据模型寻找一种好的方法。
大多数线程都专注于电子商务产品,而我的情况则有所不同。

目标是存储从客户那里收到的物品并对其进行报告。
尽管初始报告将是简单的列表(这些是您的项目及其键/值对),但我想为将来对整个馆藏的查询做准备,因此我不确定EAV是一个好方法。

每个项目都是(重复发生的)类型,并且每个项目都将具有灵活数量的键/值对。
我们大约有15种商品类型,它们增长不太可能很快。

键/值对的数量将很少,介于4到20之间,并且(根据要求)为,而不是基于商品类型,而是根据客户的需求,商品属于

为了明确起见,一个客户可能希望我存储项目的条件,而另一个客户可能希望我存储颜色或替换ID。真的要看
因此,很可能我的集合中总会有NULL值,因为每种商品类型总会获得该客户的所有键/值。这使我认为可以接受“单表继承”(具有NULL值),但必须是field_1 field_2等-进行某种映射,因为客户将决定所需键的名称。
在我看来哪一个不合适?

客户项目(及其键/值)的集合通常大于20而小于500,因此每个客户的数据集当然不是很大。

也许对应用程序本身(创建客户及其期望的字段)在MySQL中使用(半)EAV,但将实际收集的项目记录作为“文档”移动到NoSQL数据库中(Redis等),将是一个很好的方法。加工?

还是在RDBMS中过于复杂了可以/应该解决的事情?

我还遇到了这个http://backchannel.org/blog/friendfeed-schemaless-mysql,这似乎是一种解决方案,但由于我的人数太少,因此不确定。

最佳答案

在使用您列出的所有三种方法完成项目后,我不知道能不能给您一个艰难而快速的方向,但是我可以就继续前进并选择正确的方法提供一些建议。

尖端:

  • 如果可以,请尽量不要混合使用技术。根据个人经验,我发现这非常困难。另外,您会经常阅读需要扩展的大型站点,他们总是提到保持体系结构简单。他们将首先将MySQL和MongoDB之类的东西混合在一起,然后放弃MongoDB只是为了保持简单。
  • 您的问题似乎正遭受分析瘫痪的困扰。 “我可以做XYZ,但这意味着ABC是不可能的。”我建议您修复有关系统的一些问题/事实,然后开始构建原型(prototype)。您似乎有个好主意,但是直到您开始构建它们时,您才知道它们到底有多好。
  • 实现所有决定都会产生后果。您解决方案的前80%可能会相当快捷简便。最后20%包括妥协,可能很难看。只是为此做准备,就可以了。
  • 根据我的经验,文档数据库(NoSQL)方法仍然存在一定风险。在完成了坚实的文档开发工作之后,到目前为止,最困难的事情是对数据进行建模。如果您想走这条路,请确保您学习数据建模。这将减轻您的痛苦。
  • 关于database-design - 单表继承,EAV还是NoSQL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16882333/

    10-16 14:51