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模型结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: playhome手机版有吗
- 下一篇: linux cmake编译源码,linu