EAV - 在电子商务案例中,它真的是一种反模式吗?

EAV - in an ecommerce case, is it really an anti-pattern?

我正在构建一个需要可扩展数据模型的新系统。它相当复杂,但是系统中需要这种结构的部分与电子商务系统的产品部分非常相关,因此我将以它为例。

想象一组公司。每个公司都有一系列产品,这些产品具有一些基本属性,例如 nameskudescriptionprice 等。除了这些基本属性外,公司还应该能够创建属于公司的 n 自定义产品属性(即 Foo Corp. 不应该看到 Acme Inc. 的 自定义属性)。除此之外,每个公司都应该能够为每个产品翻译这些属性;所以每个自定义属性值基本上都是由 attributeproductlanguagevalue.

构成的

我确实理解,如果您存储固定数量的属性并且需要扩展属性数量的人不是系统所有者,那么 EAV 结构是一种反模式。

所以我的问题是 - 你将如何实现这一目标?在这种情况下,EAV 结构真的是反模式吗? Magento 是使用这种设计的典型例子,看起来他们建造了一个怪物并且不得不 'fix' 它通过实现平面索引表。但是是否有任何其他数据库设计模式允许这种灵活性?

理解为什么 EAV 经常被认为是一种反模式,以及这些批评对您的案例的适用性是很有用的。了解为什么这么多人被 EAV 吸引,以及他们从中看到了哪些积极的好处也很有用。

大多数 EAV 数据库的最大问题是几乎不可能编写任何类型的系统和集成的提取或报告系统,以将数据转化为有用的信息。

如果在设计良好的关系数据库中提供管理良好的数据,可以在不到一个小时的工作时间内开发出相同类型的报告,而在 EAV 数据库中开发则需要数周时间。原因是数据根本上是未经分析的数据,没有考虑其固有的逻辑结构就被存储了。

事实证明,这与其他一些人对 EAV 如此着迷的原因密切相关。您可以完全绕过数据分析。逻辑数据库设计实际上是自动的,因为所有 EAV 数据库都具有相同的 table 结构。当你构建了一个,你就构建了它们。

这可以让您了解在您可能考虑的任何情况下要查找的一些事项。数据库的逻辑结构真的是动态不可知的吗?还是因为日程安排没有时间进行数据分析和数据库设计,所以就草草下结论了?

数据将如何使用?人们是否期望对数据库中的数据进行传统上期望的那种检索?还是他们计划将每次尝试的检索视为对未知领域的探索?

在您的具体情况下,我想问的是要过多久才会有人 "important" 要求跨公司合并产品数据,即使他们每个人都维护自己的产品和属性知识库?如果那真的永远不会发生,也许你会没事的。如果没有,你最好在管理层意识到使用这些数据有多么困难之前继续前进。