Magento 2数据库EAV模型结构
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的所有产品数据
Magento 2数据库EAV模型结构的更多相关文章
- EAV模型
了解EAV设计基本原理的最好方法就是理解行建模(row modelling,其中EAV是广义形式). 以一超市数据库为例,必须管理数以千计的产品和品牌,其中许多产品存在期很短暂.那么,显而易见,产品名 ...
- Magento学习第一课——目录结构介绍
Magento学习第一课--目录结构介绍 一.Magento为何强大 Magento是在Zend框架基础上建立起来的,这点保证了代码的安全性及稳定性.选择Zend的原因有很多,但是最基本的是因为zen ...
- EF CodeFirst 如何通过配置自动创建数据库<当模型改变时>
最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精 本篇为进阶篇,也是弥补自己之前没搞明白的地方,惭愧 ...
- magento开发手册之目录结构
magento是一个很优秀的电商系统,很多朋友会用它部署自己的电商网站,少不了二次开发.下面我们随着ytkah来一起认识一下magento开发手册之目录结构吧. /app – 程序根目录 /app/e ...
- DataUml Design 教程7 - 数据库生成模型
DataUml Design支持数据库生成模型,并支持外键关系,能够根据外键自动生成类与类之间的关系. 目前DataUML Design支持MS Server.MY SQL.Oracle和Access ...
- 第六章 Odoo 12开发之模型 - 结构化应用数据
在本系列文章第三篇Odoo 12 开发之创建第一个 Odoo 应用中,我们概览了创建 Odoo 应用所需的所有组件.本文及接下来的一篇我们将深入到组成应用的每一层:模型层.视图层和业务逻辑层. 本文中 ...
- EF三种数据库操作模型比较
https://blog.csdn.net/xiongmeiqin/article/details/80196089 EF 中 Code First 的数据迁移以及创建视图 写在前面: EF 中 Co ...
- mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...
- 《Entity Framework 6 Recipes》翻译系列 (4) -----第二章 实体数据建模基础之从已存在的数据库创建模型
不知道对EF感兴趣的并不多,还是我翻译有问题(如果是,恳请你指正),通过前几篇的反馈,阅读这个系列的人不多.不要这事到最后成了吃不讨好的事就麻烦了,废话就到这里,直奔主题. 2-2 从已存在的数据库创 ...
随机推荐
- 断网环境下利用pip安装Python离线安装包
这几天搞Windows离线断网环境下安装Python包,配置环境,各种坑!做个记录,供以后查询吧. # 生产环境 windows 7 # python 2.7.9 # pip 1.5.2 友情提示:当 ...
- 【代码审计】XIAOCMS_后台database.php页面存在SQL注入漏洞
0x00 环境准备 XIAOCMS官网: http://www.xiaocms.com/ 网站源码版本:XiaoCms (发布时间:2014-12-29) 程序源码下载:http://www.xi ...
- Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决
Android编译环境——ubuntu12.04上android2.3.4编译错误以及解决 分类: android应用开发2013-08-21 09:20 4222人阅读 评论(3) 收藏 举报 li ...
- mysql无法生成log文件
做服务器主从配置时,发现/var/log/mysql下面一直没有log文件,明明配置文件/etc/mysql/mysql.conf.d/mysqld.cnf也开启log了. general_log_f ...
- Math.ceil()、Math.floor()和Math.round()
下面来介绍将小数值舍入为整数的几个方法:Math.ceil().Math.floor()和Math.round(). 这三个方法分别遵循下列舍入规则: Math.ceil()执行向上舍入,即它总是将数 ...
- [转]openstack-kilo--issue(十四)Tunnel IP %(ip)s in use with host %(host)s'
bug: http://lists.openstack.org/pipermail/openstack-operators/2015-August/007924.html https://bugs.l ...
- Gym 101149L Right Build
L. Right Build time limit per test 2.0 s memory limit per test 256 MB input standard input output st ...
- Windows环境下安装Linux
怎样实现在现有的Windows系统上安装Linux,实现双系统启动
- windows10安装
https://www.microsoft.com/zh-cn/software-download/windows10
- pytorch的torch.utils.data.DataLoader认识
PyTorch中数据读取的一个重要接口是torch.utils.data.DataLoader,该接口定义在dataloader.py脚本中,只要是用PyTorch来训练模型基本都会用到该接口, 该接 ...