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

Database design EAV-在电子商务案例中,这真的是一种反模式吗?,database-design,entity-attribute-value,Database Design,Entity Attribute Value,我正在构建一个新系统,它需要一个可扩展的数据模型。这相当复杂,但系统中需要这种结构的部分与电子商务系统的产品部分非常相关,所以我将以它为例 想象一组公司。每个公司都有一系列产品,这些产品具有一些基本属性,例如名称,sku,说明,价格等。除了这些基本属性之外,公司还应该能够创建属于公司的n自定义产品属性(即,Foo Corp.不应能够看到Acme Inc.的自定义属性)。除此之外,每个公司应该能够为每个产品翻译这些属性;因此每个自定义属性值基本上是由属性、产品、语言和值构成的 我知道,如果存储了固

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

想象一组公司。每个公司都有一系列产品,这些产品具有一些基本属性,例如
名称
sku
说明
价格
等。除了这些基本属性之外,公司还应该能够创建属于公司的
n
自定义产品属性(即,Foo Corp.不应能够看到Acme Inc.的自定义属性)。除此之外,每个公司应该能够为每个产品翻译这些属性;因此每个自定义属性值基本上是由
属性
产品
语言
构成的

我知道,如果存储了固定数量的属性,并且需要扩展属性数量的不是系统的所有者,那么EAV结构就是一种反模式


所以我的问题是-你如何做到这一点?在这种情况下,EAV结构真的是一种反模式吗?Magento是一个使用这种设计的典型例子,他们似乎构建了一个怪物,必须通过实现平面索引表来“修复”它。但是有没有其他数据库设计模式允许这种数量的fl可行性?

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

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

如果在一个设计良好的关系数据库中提供管理良好的数据,那么在一个EAV数据库中开发同样类型的报告只需不到一个小时的时间。原因是数据基本上是未经分析的数据,存储时不考虑其固有的逻辑结构

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

这给了你一个可以处理的事情,在任何情况下你都可以考虑。数据库的逻辑结构真的是动态的和不可知的吗?或者人们只是跳转到那个结论,因为时间表不允许时间进行数据分析和数据库设计?< /P> 数据将如何使用?人们是否希望进行数据库中数据的经典检索?还是计划将每次尝试的检索视为对未知领域的探索


在你的特殊情况下,我会问你要多久才会有人“重要”要求跨公司合并产品数据,即使每个公司都有自己的产品和属性知识库?如果这真的不可能发生,也许你会没事。如果不可能,你最好在管理层意识到使用这些数据有多么困难之前继续前进。

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

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

如果在一个设计良好的关系数据库中提供管理良好的数据,那么在一个EAV数据库中开发同样类型的报告只需不到一个小时的时间。原因是数据基本上是未经分析的数据,存储时不考虑其固有的逻辑结构

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

这给了你一个可以处理的事情,在任何情况下你都可以考虑。数据库的逻辑结构真的是动态的和不可知的吗?或者人们只是跳转到那个结论,因为时间表不允许时间进行数据分析和数据库设计?< /P> 数据将如何使用?人们是否希望进行数据库中数据的经典检索?还是计划将每次尝试的检索视为对未知领域的探索


在你的特殊情况下,我会问你要多久才会有人“重要”要求跨公司合并产品数据,即使每个公司都有自己的产品和属性知识库?如果这真的不可能发生,也许你会没事。如果不可能,你最好在管理层意识到使用这些数据有多么困难之前继续前进。

一种替代方法是动态修改模式,即以编程方式运行类似于DDL的ALTER TABLE语句。另一种选择是动态修改模式,即以编程方式运行类似于DDL的ALTER TABLE语句。感谢您,Walter,感谢您花时间编写如此全面的答案。我想我已经考虑了您上面得出的结论,但获得另一个结论很好不及物动词