EAV模型

EAV模型是一种用于处理稀疏和动态属性的数据模型,适用于属性数量远大于实体实际包含属性的情况。它以三列表形式存储数据:实体、属性和值,使得在不预先定义所有属性的情况下扩展数据库成为可能。与传统的行模型相比,EAV在数据检索时效率较低,但在存储非空属性和应对数据变化时更具灵活性。Magento等应用展示了EAV在电子商务等领域的有效应用。
摘要由CSDN通过智能技术生成

  了解EAV设计基本原理的最好方法就是理解行建模(row modelling,其中EAV是广义形式)。 以一超市数据库为例,必须管理数以千计的产品和品牌,其中许多产品存在期很短暂。那么,显而易见,产品名称不应该硬编码为表的列名,反之,产品说明存储在 产品表中,同一个产品的购买/销售记录,则分为多行存储在另一表中,以产品ID与该表关联。 EAV设计概念上涉及包含一个三列的表:实体(entity,如嗅觉受体的ID),属性(attribute,如物种,实为指向元数据表的指针),属性的 值(例如老鼠,rat)。 在EAV设计中,每行保存单一的数据(fact)。 传统的表与此相反,每一属性为一列,因此,一行存储一组数据。 EAV方法适合符合该实体的参数数量远大于具体某一实体所包含的参数数量时的情况。

  

许多开发人员在定义和分析数据需求时会遇到同样的问题,就是许多不同的属性可用来描述一个对象,但实际上只有很少的属性适用于每个人。一种选择是创建一具有每个属性列的表,这种方法适用于具有固定数量属性的对象,对大多数对象而言,其中全部或大部分属性有值。 然而,在某些情况下,最终得到的记录,其中大部分列将是空的,因为属性可能是未知或不适用的。许多种类的数据必须表现出来,其数量可能出现波动。与此同时,即使不稀疏的属性,然每类数据都非常少。这种情况下,传统的数据模型将使成百的表却只有几行数据。

多种类的数据必须表现出来,其数量可能出现波动。与此同时,即使不稀疏的属性,然每类数据都非常少。这种情况下,传统的数据模型将使成百的表却只有几行数据。

为解决上述问题,可应用EAV(Entity,Attribute,Value)模型。这种模式也有几个可选的称谓,包括“对象-属性-值(object—attribute-value)”模型和“开放架构(open schema)”几种可供选择的名称。在EAV数据模型中,只有非空值才存储在数据库中,每个属性-值(或键-值)对描述一个给定实体的属性。EAV表经常定性为“长瘦(long and skinny)”的,“长”是指描述实体的多个行,而“瘦”则指仅使用少量的列。在本文中将描述EAV模型及其实现,并展示其在现实世界中的应用---包括研究Magento是如何应用这个模式。

对象属性存储在一个有三列的表中:实体,属性和值(entity,attribute,value)。实体(entiry)表示所描述的数据项,例如一个产品或汽车。属性(attribute)表示描述实体的数据,例如一个产品将有价格,重量和许多其他属性。值(value)是属性的值,例如产品可能有一个9.99英镑的价格属性。此外值可以基于数据类型进行分割,所以可将EAV表分为字符串、整数、日期和长文本(long text)表。依据数据类型分割是为了支持索引,使得数据库执行可能的类型检查验证。

稀疏的属性(Sparseness of Attributes)

在数学和计算机科学中,如果一个对象仅包含大量潜在属性中的几个属性,称之为“稀疏矩阵”。在讨论EAV模型时,采用“稀疏”来描述大多数无值的属性。

为说明这一点,来看看超市的收据,超市中有成千上万的库存产品,每日引入新的产品,其它则停止销售。客户购买5个产品的收据只列出实际购买的详细项目,每行一种产品。该收据并没有列出客户可能购买的每一种产品,所以说客户的收据是稀疏的。

按照数据库的术语实体是销售发票,包含如交易ID、日期和时间、存放位置等信息,收据中的每一行对应销售表中的一行记录,存有一个属性及一个或多个值。在这种情况下,属性之一是客户所购买的产品,值则为的数量、单价、折扣和总价。

上面的例子说明了属性的稀疏性(一个客户只选购一个可能的产品),引入一个新的术语:行建模(row modelling)。基于行模型的表,其描述实体的数据记录为多行,每组新的数据在数据库中存为额外的行而非额外的列。行模型是数据库设计时的标准数据建模技术,它仅适用于满足如下两个条件的情况:

  • 特定实体的数据是稀疏的。
  • 数据时易变的。

行建模是不适用于稀疏且数据非波动的情形,此时,应采用传统的列模型。

行模型示例(Exampl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值