我正在为我的应用程序的数据模型寻找一种好的方法。
大多数线程都专注于电子商务产品,而我的情况则有所不同。
目标是存储从客户那里收到的物品并对其进行报告。
尽管初始报告将是简单的列表(这些是您的项目及其键/值对),但我想为将来对整个馆藏的查询做准备,因此我不确定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,这似乎是一种解决方案,但由于我的人数太少,因此不确定。
最佳答案
在使用您列出的所有三种方法完成项目后,我不知道能不能给您一个艰难而快速的方向,但是我可以就继续前进并选择正确的方法提供一些建议。
尖端:
关于database-design - 单表继承,EAV还是NoSQL?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16882333/