EAV模型是一种数据模型,用于描述实体的数量预计会很大,但事实上,实体中要使用的属性数量并不多。 Magento 2这么设计是为了灵活性,在不影响主干的基础上,任意新增删除属性。 EAV模型(E ->实体,A -> 属性,V -> 值)简单理解就是分表,不需要把所有字段都放在主表里,而是按类型存放在不同的副表上。 对于字段少的项目来说 EAV其实没啥用 效率不高。

按照常规做法,比如一个产品的所有相关属性都会存放在产品表里,增删改查的都是这一个表。 EAV模式 就是把这些属性按照类型独立分开存放到不同表里的。 所有查询属性值的时候会比较麻烦 要联表查询。 不过M2里不用担心,他提供了非常简单的方法,直接get属性名就得到值了,不需要你手动去写sql查表。

实体存储的是数据类型的信息。 就Magento而言,就是Customer,Category,Product等。 属性是每个实体的单独属性(比如name,weight,email)。 值是实体某个属性的值。

比如,产品有个属性叫产地(Manufacture),它的值为中国。 那么产品就是实体,Manufacture就是属性,中国就是值。

EAV模型带来的好处如下:

灵活的多功能数据结构(可以在不更改数据库模式的情况下更改属性数量)。

为给定实体添加新属性时,我们有可能在其他实体中使用它

快速实施。

EAV实体的数据库模式:

eav_entity - (E)实体表。

eav_entity_attribute(A)属性表

eav_entity_ {type}(V) - 值表。{type} - datetime,decimals,int,text和varchar。

eav_attribute 里面是所有实体的属性

带有eav_ *表格的图表:

magento的eav模型

Magento 2中有哪些EAV实体? 实体列表可以在eav_entity_type表中找到:

customer

customer_address

catalog_category

catalog_product

order

invoice

creditmemo

shipment

Magento 2中有哪些EAV属性类型:

eav_entity_int

eav_entity_varchar

eav_entity_text

eav_entity_decimal

eav_entity_datetime

这5种属性类型就相当于字段类型。

int 对应mysql字段的int类型

varchar 对应mysql字段的varchar类型

text 对应mysql字段的text类型

decimal 对应mysql字段的decimal类型

datetime对应mysql字段的datetime类型

比如产品的name 是varchar类型。 他的值存在catalog_product_entity_varchar表里。 知道了这个原理,你就很轻松的知道属性和值在哪个表里。 聪明的你会觉得,把属性分散存在不同的表里,如果要查询全部属性的话,要联十几张表,是不是太耗资源了? 这点,M2官方也考虑到了,以产品为例,他提供了catalog_product_flat表,也就是说后台开启flat模式后,查产品数据就直接读取这个表,他把属性都存放在这个表里了。 catalog_product_flat是按store id来分的。如果你有多网店的话。 比如:

catalog_product_flat_1 //代表store id为1的所有产品数据

catalog_product_flat_2 代表store id为2的所有产品数据

mysql eav设计模型_Magento 2数据库EAV模型结构相关推荐

  1. 职工考勤管理MySQL课程设计_考勤管理系统数据库课程设计.doc

    课 程 设 计 课程名称 数据库系统概论_____ 题目名称 考勤管理系统 学生学院 计算机学院 专业班级 学 号 学生姓名 ________ 指导教师 左亚尧 2012年 1月 16日 一.需求分析 ...

  2. mysql表设计讲解_MySQL中数据库的设计归纳讲解

    谈到MySQL中数据库的设计,相信大家都知道这是实现实际业务的重要一步,因此对于Java学习者来说,深入了解和学习数据库的设计是十分有必要的.本文为大家准备了一份MySQL中数据库的设计归纳讲解,内容 ...

  3. mysql scaffold_EF Core使用Scaffold-DbContext从数据库生成模型

    最近两个月将12年开发的果蔬行业ERP升级到.NET Core,表结构变化比较大,迁移数据比较麻烦,所以写一个迁移程序来解决.为了减少代码量,决定用EF Core.EF Core中提供了一个命令Sca ...

  4. mysql表设计 列命名_MYSQL数据库字段命名及设计规范

    1.设计原则 1) 标准化和规范化 数据的标准化有助于消除数据库中的数据冗余.标准化有好几种形式,但 Third Normal Form(3NF)通常被认为在性能.扩展性和数据完整性方面达到了最好平衡 ...

  5. 抽奖活动mysql表设计_购物商城数据库设计-商品表设计

    大家好,今天我们来设计一下购物商城的商品表. 我们的目标是表结构能够满足下面这张图的搜索: 在设计表之前,我们先来了解下商品中的两个概念:SPU和SKU SPU SPU(Standard Produc ...

  6. 下载行政区划mysql表设计_行政区划数据数据库的设计(脚本)

    /************************************************************* Author:   LzmTW(水如烟) Create date: 200 ...

  7. mysql表设计 不同价格_数据库表设计,不同的属性值会有不同的价格

    请问大神们,这种结构如何实现,目前是以下做法: 有属性名表 goods_attr 有属性值表 goods_attr_value 但是 不同的属性值选择会有不同的价格, 这种多个值决定一个值的情况真没遇 ...

  8. 完全备份、数据库恢复模型对日志备份和差异备份的影响

    CREATE DATABASE db GO --1. 无完全备份时,无法进行差异备份 BACKUP DATABASE db TO DISK='c:\db.bak' WITH FORMAT,DIFFER ...

  9. java eav模式_Magento 2中EAV模型的理解

    今天我将要讲述Magento 2中的EAV模型,Magento 2的数据库使用的技术是一个 以实体-属性-值得模型的一种数据模型简称:EAV模型 实体-属性-值(Entity-Attribute-Va ...

最新文章

  1. 怎样训练YOLOv3
  2. php安装redis扩展模块
  3. 2.session与cookie的区别?
  4. 真香!2020最新版《神经网络与深度学习》中文版更新完毕,PDF免费开放下载~...
  5. *[topcoder]JumpFurther
  6. mac系统及xcode使用的SVN客户端安装升级
  7. codeforces1438 E.Yurii Can Do Everything
  8. STM32 设置片外SRAM分散加载
  9. 微机原理控制转移类指令
  10. 交叉渡线道岔规格_交叉渡线道岔选择基本原则
  11. 解锁用户及数据库表,锁死进程
  12. build tut framework on ubuntu
  13. java css是什么_【狂神说JAVA】CSS(通俗易懂版)
  14. UNICODE编码UTF-16 中的Endian(FE FF) 和 Little Endian(FF FE)
  15. es入门以及索引原理学习
  16. 三元组事件抽取与简单代码实现
  17. 零基础掌握计算机入门
  18. 归纳法与面向对象思维
  19. 中国科学院大学计算机考研好考吗,中国科学院大学考研难吗?一般要什么水平才可以进入?...
  20. 如何将试卷导入到mysql中,一种基于C#中将Word试题导入数据库实现方法.doc

热门文章

  1. matlab曲线拟合工具箱 cftool
  2. Ubuntu20.04 安装谷歌拼音(googlepinyin)输入法
  3. 触摸屏坏了有哪些现象_触摸屏常见的故障及解决方法(实用)
  4. iOS MVC设计模式
  5. How to deal with Imbalanced Datasets in PyTorch - Weighted Random Sampler Tutorial
  6. python编写代码求圆的面积_【Python】求圆的面积,书上的代码可执行却是0,不知道为什么...
  7. 专访王威廉:NLP哪些研究方向更容易取得突破?
  8. html+css第九篇
  9. 《有一种失败叫瞎忙》读书笔记
  10. Improving Multimodal Fusion with Hierarchical Mutual InformationMaximization for Multimodal Sentimen