我正在为我的应用程序的数据模型寻找一种良好的理智方法。大多数线程都专注于电子商务产品,我的情况有些不同。
目标是存储从客户那里收到的物品并报告它们。虽然初始报告将是简单的列表(这些是您的项目及其键/值对),但我想为将来对整个集合的查询做准备,所以我不确定 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这似乎是一个解决方案,但不确定,因为我的数字太低了。