Magento 数据库EVA

实体,属性和值(EVA)数据库架构排在第一,非常难以把握。EVA结构缺少文档,大部分的人还不知道EVA结构的,对magento都的好处、重要性以及适合性。在这篇文章我要介绍EVA是怎么工作的,为什么他有效,看了这边文章对magento的开发者来说是很有好处的。为了更好的理解这边文章,我建议使用phpmyadmin等数据库工具。

什么是EVA
EVA代表实体,属性和值。让我们看看它的每一部分,试着更好的了解它。
实体
实体代表等产品,种类,客户和订单Magento的数据项。每个实体(产品,类别等)都会有它的数据库中的实体记录。
属性(attribute_code)
该属性表示数据项属于一个实体。例如,产品实体,如名称,价格,地位和更多的属性。

该值是最简单的理解,因为它是简单地链接到一个属性的值。
为了更好地理解这一点,让我们考虑产品的实体。每个产品的实体将有一个属性,一个是属性名称系列。每一种产品将有一个属性名称值(和所有其他属性)。

EVA是怎么工作的 ?
让我们用一个产品表作为例子。比起将所有的数据存取在一个表格中,magneto将信息分开存储在多张表格中。
在这种层次结构的顶部表是 catalog_product_entity. 如果你在phpMyAdmin看看这个表,你会看到它包含了产品的简单基本资料,也没有出现任何有用的信息,包括SKU!幸运的是,使用此表是有可能建立从属性和值表的完整的产品记录。
要开始构建一个完整的产品记录,您将需要开始加入到产品实体的属性表。你这样做之前,看一下名为eav_attribute的表。eav_attribute是存储属性的主要表,用于存储所有不同的实体的属性(产品,客户,订单,分类等)。Magento的怎么知道哪一个属性属于一个产品,或者属于一个类别?由于通常是与Magento情况下,每一个实体 (产品,客户,订单,分类等) 都有一个 entity_type_id.要了解这一点,回去 catalog_product_entity 查找entity_type_id 这个字段.在该表中每个记录的值应该是4,因为这已被列为指定产品entity_type_id。如果你看看 catalog_category_entity你将看到另一个不同的 entity_type_id。使用这个值和属性代码,它可以为一个产品或任何实体加载属性。找到attribute_code对应的attribute_id和backend_type,如果backend_type不为空,就是用的catalog_category_entity_{backend_type}表,为空就是catalog_category_entity。通过attribute_id,catalog_category_entity中的entity_id可以找到莫一条纪录的值

为什么要使用EVA?
EAV 是因为它比一般规范化的数据库结构扩展性更好。开发人员无需修改数据库结构的核心就可以为任何实体(产品,品类,客户,订单等)添加属性。当建立一个自定义属性的时候,不用为保存这个属性去建立逻辑结构,因为它已经被建立到数据库模型中;只要数据集和属性已经建立,该模型将被保存!

EAV的缺点是什么?
EAV一个主要缺点是它的速度。因为实体数据如此支离破碎,创造了整个实体记录需要大量的表联接。幸运的是,在瓦瑞恩团队有一个很好的缓存系统实施,允许开发者缓存不经常改变的资料。
EAV的另一个问题是它学习有曲线性, 这样很多初级开发人员在了解到它的的简单之前就已经放弃了。虽然没有此快速修复,希望这篇文章将有助于人们开始解决这个问题。

结论
实体,属性,价值是一个伟大的数据库结构,是Magento成功的一个关键部分,开发人员了解如何运作是非常重要的。这方面的知识也有很多应用,我相信如果你的Magento工作时间足够长,你会碰到一些!

Java代码  

  1. SELECT `e`.entity_id AS customer_id,`e`.email,_table_billing_name.value AS realname,_table_billing_addree.value AS address,  
  2. _table_billing_province.value as province,_table_billing_city.value AS city,_table_billing_postcode.value AS postcode  
  3. FROM `customer_entity` AS `e`   
  4. LEFT JOIN `customer_entity_int` AS `_table_default_billing` ON (`_table_default_billing`.`entity_id` = `e`.`entity_id`) AND (`_table_default_billing`.`attribute_id` = '7')  
  5. LEFT JOIN `customer_address_entity_varchar` AS `_table_billing_name` ON (`_table_billing_name`.`entity_id` = `_table_default_billing`.`value`) AND (`_table_billing_name`.`attribute_id` = '9')   
  6. LEFT JOIN `customer_address_entity_varchar` AS `_table_billing_postcode` ON (`_table_billing_postcode`.`entity_id` = `_table_default_billing`.`value`) AND (`_table_billing_postcode`.`attribute_id` = '14')   
  7. LEFT JOIN `customer_address_entity_varchar` AS `_table_billing_province` ON (`_table_billing_province`.`entity_id` = `_table_default_billing`.`value`) AND (`_table_billing_province`.`attribute_id` = '12')   
  8. LEFT JOIN `customer_address_entity_varchar` AS `_table_billing_city` ON (`_table_billing_city`.`entity_id` = `_table_default_billing`.`value`) AND (`_table_billing_city`.`attribute_id` = '15')   
  9. LEFT JOIN `customer_address_entity_text` AS `_table_billing_addree` ON (`_table_billing_addree`.`entity_id` = `_table_default_billing`.`value`) AND (`_table_billing_addree`.`attribute_id` = '16')   
时间: 2024-11-17 10:05:45

Magento 数据库EVA的相关文章

Magento数据库配置选项,以及mysql 读写分离

1.数据库配置 [mysqld] key_buffer = 512M max_allowed_packet = 64M table_cache = 512 sort_buffer_size = 4M read_buffer_size = 4M read_rnd_buffer_size = 2M myisam_sort_buffer_size = 64M tmp_table_size = 128M query_cache_size = 96M query_cache_type = 1 thread

云服务器 ECS 建站教程:搭建Magento电子商务网站(CentOS7)

搭建Magento电子商务网站(CentOS7) Magento是一款开源电商网站框架,其丰富的模块化架构体系及拓展功能可为大中型站点提供解决方案.它使用PHP开发,支持版本范围从PHP 5.6到PHP 7.1,并使用MySQL存储其数据.本文主要说明如何在阿里云ECS上搭建Magento电子商务网站.使用的操作系统为Linux CentOS 7. 2 64位. 适用对象 适用于熟悉ECS,熟悉Linux系统,刚开始使用阿里云进行建站的用户. 基本流程 使用云服务器 ECS 搭建Magento网

图片-数据库表之间关系图的设计

问题描述 数据库表之间关系图的设计 请问两张表的关系图,中间的那个连接钥匙是怎么弄的?我设置了两个表的主外建,然后怎么办呢? 解决方案 怎么设计vfp数据库与表之间的关系magento数据库表之间的关系Rails 数据库表之间关系 解决方案二: equement表中的equtypeid 与equtype表的id关联

magento空间更换迁移图文教程_服务器其它

随着网站数据和浏览量的增加,更换更好的主机空间,是站长们常做的事.magento是一款使用比较普遍的免费开源建站软件,magento网站在更换空间迁移时候,步骤有误常会导致一些功能失效或错误出现,下面就详细介绍一下magento空间更换迁移步骤过程: 1.需要将magento数据库备份,并导入到新的magento空间数据库中: 2.将magento网站程序源文件,使用ftp上传到新的magento空间: 3.打开magento程序local.xml文件,修改并正确配置新的magento空间数据库

Magento网站迁移指南

上周五,为MKT同事迁移了一个从本机到GODADDY的MAGENTO系统. 中间出了不少状况, 现在写个迁移纲要: ~~~~~~~~~~~~~~~~   1,网页和数据库文件上传,最好采用压缩方式,节约网络流量和布置时间. 2,如果是租的是虚拟空间,注意建立MYSQ的方法和修改LOCAL.XML文件. 3,如果phpmyadmin导入SQL的时候报错是因为magento的数据库使用了外键约束. 解决办法: 在导出的sql文件上加如下一行 SET @OLD_FOREIGN_KEY_CHECKS=@

python实现zencart产品数据导入到magento(python导入数据)_python

python版本要求在3.3.x,需要mysql connector for python第三方库支持 不适用所有的zencart导入到magento 复制代码 代码如下: #encoding=utf-8#@ author:凋零#@ contact:342103944@qq.comimport mysql.connectorimport sysimport timeimport globimport osimport reimport shutilconfig={'host':'127.0.0.

magento导入数据库提示ERROR 1064 (42000) at

magento导数据库又遇一个错误: 在执行恢得数据库或者SQL语句的时候,出现以下类似错误: C:mysqlbin>mysql sq_zgzk < 1.sql -u root ERROR 1064 (42000) at line 382: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use

magento -- 新建带数据库表的自定义模块

如果你想在Magento中创建一个自定义模块,并且需要存储和使用自定义数据,下面就是你需要的步骤.我将假定你已经知道关于Magento模块,它们是什么以及如何创建它们.此外,我也假定你已经知道在Magento模块的基本结构.   下面这段放到你的config.xml的适当位置          <global> <ymodel> <class>YNamespace_YModule_Model</class> <resourceModel>quot

magento导入csv文件到数据库脚本

这是magento脚本的另外一种写法. 个人觉得写的还行,高手莫见笑. 用SplFileObject来处理大数据的csv文件效率高    代码如下 复制代码 <?php require_once 'shell/abstract.php'; class Faarao_Import_Customer extends Mage_Shell_Abstract { protected $_files = array(); protected $_datas = array(); public functi