小编bto*_*own的帖子

EAV 是否​​适合针对对象的共存的富含元数据的“事实估计”集合进行设计?

我正在尝试构建一个系统,该系统将收集对许多(30 万+)个对象中的每一个的各种数量(10+)的估计,并根据这些估计的历史记录做出决策。例如,我们有许多人工和自动化流程可能试图确定一个对象的,例如 PowerLevel,并且当它们报告的结果可能(或可能不会)相互替代时,我们想跟踪历史这些报告以及来自流程的元数据(日期、调整参数、代码版本等)。具体来说,我们可能想要执行诸如“按实体 id 分组,对于每个不同的属性,查找最新估计”或“查找其属性具有由代码库 573ae4 运行的任何更新的所有实体”之类的查询。

作为从未在生产中实际使用实体属性值模式的人,这似乎是 EAV 之类的完美用例,为源提供额外的元数据列。具体来说,我会设想一个这样的表格:

entity_id | attribute_id | string_value | numeric_value | datetime_value | discovery_time | discovery_source | discovery_tuning_parameters | discovery_code_hash

但是我听到了很多对这些类型架构的批评,例如这个答案。我很难找到在非遗留系统上使用 EAV 的人,这让我非常犹豫,我可能会重新发明一个非常过时的轮子......

另一方面,我能想到的唯一其他选择是完整的 NoSQL (bleh) 或一些邪恶的混合体,例如:

id | power | power_current_discovery_date | power_current_discovery_source | power_history (an array of hstores?) | foobar | foobar_current_discovery_date | ...

因为我们需要每个属性的元数据。

有什么想法吗?这是 EAV 适合的少数几次之一吗?谢谢你的帮助!

schema database-design metadata eav

4
推荐指数
1
解决办法
459
查看次数

标签 统计

database-design ×1

eav ×1

metadata ×1

schema ×1