Oracle EAV的数据建模
其他人如何使用关系建模工具将逻辑模型或第三范式的模型映射到使用EAV的数据库?EAV是一种非关系设计。您无法使用EAV实现任何范式,因为它不能成为关系 EAV是反模式的一个例子Oracle EAV的数据建模,oracle,database-design,uml,entity-relationship,entity-attribute-value,Oracle,Database Design,Uml,Entity Relationship,Entity Attribute Value,其他人如何使用关系建模工具将逻辑模型或第三范式的模型映射到使用EAV的数据库?EAV是一种非关系设计。您无法使用EAV实现任何范式,因为它不能成为关系 EAV是反模式的一个例子 如果你需要很多属性,你可以考虑XML并将XML存储在 Culb列中。在关系中,可以有一个EAV(也称为属性值对或名称-值对)。它使用一个相当抽象的数据模型。在描述它之前,有几个警告。它很难查询,而且性能也不好。EAV经常用于关系审计表。EAV存储单个列的前映像(更改前)。它逐个存储更改的列。如果更改了五个属性,那么EAV
如果你需要很多属性,你可以考虑XML并将XML存储在<代码> Culb列中。
在关系中,可以有一个EAV(也称为属性值对或名称-值对)。它使用一个相当抽象的数据模型。在描述它之前,有几个警告。它很难查询,而且性能也不好。EAV经常用于关系审计表。EAV存储单个列的前映像(更改前)。它逐个存储更改的列。如果更改了五个属性,那么EAV中将存储五行。此外,由于EAV中可能存在较大的自然主键,因此通常使用镜像表代替EAV
EAV可以在逻辑数据建模和关系数据库中创建。这可以通过三个相关的实体或表来完成:- 基本实体(如客户),类似于列族
- “类型”实体,描述属性及其特征,如净值金额
- 一种“值”实体,它将属性分配给基础实体的实例并为其提供值李>
在数据建模的早期,数据建模者喜欢使用EAV,因为它们看起来是一种优雅、灵活的解决方案——直到DBA开始使用它们。因此,EAV有时用于逻辑模型,但应在物理模型中完全非规范化。当完全非规范化时,它与Cassandra非常相似。我有时在逻辑和物理上都使用过EAV,上面已经指出了一些问题。我不知道如何在这些评论中添加图形,否则我会添加一个插图。EAV?逃跑!;-)那么,如果你不能使用EAV,那么实现任意列的正确方法是什么呢?使用一个为EAV模型而设计的数据库,而不是关系数据库。如果你描述一下为什么你认为你必须使用任意列,就像比尔的回答一样,我几乎总是这样做。但我会更进一步。我拒绝相信数据库中的每个实体都不共享任何列。即使它们只是一个名称、插入的用户、插入的用户等等。。。提取所有公共字段后,使用XML。@Stephanie Page:+1我同意动态属性的XML(或JSON或YAML或其他类似内容)比使用EAV更可取。我还写了一篇博客,探讨了为什么EAV不能成为关系,评论中的讨论非常热烈:如果需要多用户应用程序,EAV的替代方案是什么,用户可以在何处存储具有自定义属性集的实体?对于其用户,有必要根据自定义属性过滤数据?每个用户的实体数量可能相当高。存储在db字段中的xml或json如何符合标准格式?需要阅读以说明上一段的要点: