Magento的表有三百多张,以实体、属性、值(EAV)的数据库结构难以掌握,加上缺少有关EAV的文档,以至许多人不知道这种EAV方式的好处以及它对magento来说的重要性,在这里作为一名magento开发者,让我们来了解下,它是如何工作的并且对我们有什么好处。
什么是EAV呢?
EAV是实体(Entity)、属性(Attribute)、值(Value)的意思,接下来来看看每一部分以便更好的理解它。
实体(Entity)
实体指的是magento的数据对象,如产品、分类目录、客户、订单等,每一个实体在数据库中都对应着一条实体记录。
属性(Attribute)
属性是指跟实体相关的一些性质数据,如产品实体有名称、价格、状态等。
值(Value)
值是最容易理解的了,就是指属性的值了。
EAV是怎么工作的呢?
一直以来,数据库其实很简单的,比如我们现在要设计一个商城,需要有一张产品表,包括所有产品的信息,另一张表包括分类信息,也许还要一张表来连接这两张,这样很容易理解吧,然而magento却不一样,它跟产品以及分类有关的表有40多张,要想知道为什么,让我们来看下产品表。
不像其它的商城那样,所有的产品信息在一张表里,magento把产品信息分离在子表中,最顶上的表是catalog_product_entity,如果你看过这张表,你肯定发现了,它只包括产品的一些基础信息,除了SKU,其它你看不到任何有用的信息,幸运地是使用这张表你将可以从属性和值表中看到完整的产品记录。
让我们开始新建一条完整的产品记录,你需要将属性与我们的实体表相关联,做这之前先看下表eav_attribute,这张表在magento里为所有不同的实体存储了所有的属性,打开表,你会看到里面有好几百条不同属性的记录,为什么有些名称还是一样的呢?困惑吧?magento是如何辨别的呢?很快你就会注意到entity_type_id,每一个实体都会有一个entity_type_id,为了找出来,那就再回来catalog_product_entity表,看entity_type_id字段,你会发现所有的记录值都是10,如果你有去看catalog_category_entity,你将会看到一个不同的entity_type_id值。根据这个值和attribute code你就可以找到所有产品的属性,当然也可以所有其它实体的属性了。
思考下下面的查询:
# 找出所有产品的属性
SELECT attribute_code FROM eav_attribute WHERE entity_type_id = 10;
# 找出单个产品的属性
SELECT attribute_code FROM eav_attribute WHERE entity_type_id = 10 AND attribute_code = 'name';
你得到属性和实体了吧。接下来了解下值,值被分离在不同的表中,让我们看下所有前缀是catalog_product_entity的表,值是根据它们的类型来分的,例如,所有的价格以及其它decimal属性的会存储在表catalog_product_entity_decimal中,另外所有文本类型数据会存储在catalog_product_varchar中,需要指出的是每个属性存储的表,magento在eav_attribute表中使用字段backend_type记录,如果你运行以下查询,你将可以找到产品属性'name’的backend type。
SELECT attribute_code, backend_type FROM eav_attribute WHERE entity_type_id = 4 AND attribute_code = 'name';
希望以上的查询返回的是varchar,这就是name的正确类型啦,基于以上,我们可以知道namer值被存储在表catalog_product_entity_varchar中,你认为下面的查询会存储在哪呢?想一想,然后copy it看下你对了没。
SELECT e.entity_id AS product_id, var.value AS product_name FROM catalog_product_entity e, eav_attribute eav, catalog_product_entity_varchar varWHERE e.entity_type_id = eav.entity_type_id AND eav.attribute_code = 'name' AND eav.attribute_id = var.attribute_id AND var.entity_id = e.entity_id
为什么使用EAV呢?
使用EAV是因为它相比其它普通的数据库结构要更容易扩展。开发者不用编辑核心数据库结构就可以为任何实体添加属性,并且当自定义的属性被添加后,不需要添加任何逻辑让magento保存它,因为这些在模型中都已经存在了,只要数据和属性创建后,模型就会保存了。
EAV有什么缺点呢?
最主要的就是它的速度了,由于实体数据都是碎片式的,建立一个完整的实体记录需要许多表联合查询。幸运地是Varien团队开发了个优秀的缓存系统,允许开发者缓存那些不常改变的信息。
另一个问题就是学习的风险,很多开发人员学习到半途就放弃了,对于这还真没有什么捷径,希望我们共同征服它吧!
总结
实体、属性、值是很好的一种数据库结构,也是学习magento很关键的一部分,因此对于开发者来说,明白它是如何工作的就显的十分重要了。
来源: http://www.vipinit.com/index/article-158.html
参考: http://www.magereverse.com/
分享到:
相关推荐
总结来说,批量导出Magento产品及其自定义属性涉及了对Magento数据库结构的深入理解,以及编写合适的SQL查询和PHP脚本来实现数据处理。这是一个涉及数据库查询优化、数据整合和文件导出的综合过程。
Magento数据库设计图是一份宝贵的技术文档,它概述了Magento系统的核心组件,包括EAV模型、产品管理、客户管理、销售管理和其他功能模块。此外,设计图还展示了新增与删除的表格,帮助开发者了解Magento数据库的演变...
19. **MAGENTO-DatabaseDiagram[v1.1.6]**:这是Magento数据库结构的版本化图表,展示了数据库的完整设计。 20. **TAX**, **PAYMENTOPTIONS**, **GIFT/GIFTCERTIFICATE**, **SHIPPING**, **CHECKOUTAGREEMENT**, **...
这通常通过 Magento 2 的 EAV(Entity-Attribute-Value)模型实现,定义在 `Model/ResourceModel` 目录下的数据模型类中。 5. **视图模板**:`view/frontend/templates` 文件夹下存放了博客文章的展示模板,例如 `...
3. **数据库配置**: 在安装过程中,你需要提供一个新的数据库信息,因为样例数据会创建新的数据库结构并填充数据。 4. **完成安装**: 完成上述步骤后,Magento会自动处理样例数据的导入,包括商品、分类、顾客、...
3. **模型(Model)**:模型是Magento中处理业务逻辑的组件,通常与数据库交互。`模型继承架构图(product为例).png`可能揭示了产品模型的继承结构,展示了如何创建自定义模型以扩展或修改默认功能。 4. **模块...
- **EAV模型(Entity-Attribute-Value)**:Magento采用EAV模型来存储数据,它允许灵活的数据结构,方便添加和管理商品属性。 - **模块(Module)**:Magento的核心由多个模块组成,每个模块负责特定的功能,如...
5. **资源配置**:说明了 Magento 中的数据资源管理和数据库操作。 6. **高级模型**:深入讨论了更复杂的模型概念,如集合、事件和观察者模式。 7. **自定义系统配置**:指导如何创建和管理 Magento 后台的自定义...
2. **数据库设计**:Magento的数据库设计复杂且全面,包括产品、订单、客户、分类等多个实体,通过EAV(Entity-Attribute-Value)模型处理大量可变属性,提高了数据存储的灵活性。 3. **模块化设计**:Magento采用...
- **EAV实体的数据表结构**:详细描述了EAV实体在数据库中的存储方式。 - **加载和保存EAV实体**:说明了如何加载和保存EAV实体数据。 - **EAV属性管理**:讲解了如何管理EAV属性,包括添加、编辑和删除等操作。 ...
学习Magento开发,还需要熟悉其数据库结构。Magento使用了大量的EAV(Entity-Attribute-Value)模型,使得商品属性可以灵活配置,但也增加了查询的复杂性。理解数据表的关系和数据存储方式对于优化性能至关重要。 ...
2. 数据库设计:使用MySQL数据库,支持EAV(Entity-Attribute-Value)模型,能灵活存储各种类型的数据。 3. MVC架构:遵循MVC(Model-View-Controller)模式,使代码结构清晰,便于扩展和维护。 4. 模板引擎:强大的...
- 分析Magento的数据库结构以及如何与之交互。 #### 四、技术要点解析 - **代码格式化**: - 本书中所有的代码片段均采用统一的格式化规则,便于读者阅读理解。 - XML示例也会遵循一定的格式规范,以确保一致性...
Magento使用Entity-Attribute-Value(EAV)模型来存储数据,这种模式虽然能提供丰富的商品属性,但会导致复杂的数据库查询。因为每个商品属性都存储在不同的表中,查询时需要联接多个表,从而消耗更多的CPU和内存...
- **创建EAV模型**:EAV(实体-属性-值)模型是Magento 2中用于处理复杂产品属性的核心机制之一。 - **理解模式和数据脚本流程**:为了在安装或升级过程中自动创建数据库表和填充初始数据,Magento 2使用了一系列...
- **升级脚本**:当模块升级时,执行这些脚本来更新数据库结构。 6. **高级Magento模型EAV**: - **EAV模型**:Entity-Attribute-Value模式,用于存储复杂、可变的数据结构。 - **实战EAV**:创建EAV模型,包括...
其数据库设计遵循EAV(Entity-Attribute-Value)模式,能够处理大量复杂的数据和商品属性。 在使用Magento进行电商网站建设时,你需要了解以下步骤: 1. **安装和配置**:下载Magento的源码,按照官方文档的指导...
资源版本用于标识数据库结构的版本信息,确保数据库结构的一致性。 **5.5 解剖配置脚本** 配置脚本通常包含了数据库表的定义信息,例如字段、索引等。 **5.6 模块升级脚本** 随着模块版本的更新,可能需要更新...
5. **数据库交互**:理解Magento的数据存储方式,学习怎样通过EAV(实体-属性-值)模型操作数据,创建新的表、模型和资源模型,以及如何进行数据保存和查询。 6. **支付与物流集成**:Magento支持多种支付和物流...
2. **数据库结构**:掌握Magento的EAV(Entity-Attribute-Value)模型,了解数据表的组织方式。 3. **主题与皮肤**:学习如何定制和切换主题,以及CSS和图像资源的管理。 4. **URL重写与分类管理**:理解URL的生成...