【转】Magento 2数据库EAV模型结构
?EAV模型是一種數(shù)據(jù)模型?,用于描述實體的數(shù)量預(yù)計會很大,但事實上,實體中要使用的屬性數(shù)量并不多。 Magento 2這么設(shè)計是為了靈活性,在不影響主干的基礎(chǔ)上,任意新增刪除屬性。 EAV模型(E ->實體,A -> 屬性,V -> 值)簡單理解就是分表,不需要把所有字段都放在主表里,而是按類型存放在不同的副表上。 對于字段少的項目來說 EAV其實沒啥用 效率不高。
按照常規(guī)做法,比如一個產(chǎn)品的所有相關(guān)屬性都會存放在產(chǎn)品表里,增刪改查的都是這一個表。 EAV模式 就是把這些屬性按照類型獨立分開存放到不同表里的。 所有查詢屬性值的時候會比較麻煩 要聯(lián)表查詢。 不過M2里不用擔(dān)心,他提供了非常簡單的方法,直接get屬性名就得到值了,不需要你手動去寫sql查表。
實體存儲的是數(shù)據(jù)類型的信息。 就Magento而言,就是Customer,Category,Product等。 屬性是每個實體的單獨屬性(比如name,weight,email)。 值是實體某個屬性的值。
比如,產(chǎn)品有個屬性叫產(chǎn)地(Manufacture),它的值為中國。 那么產(chǎn)品就是實體,Manufacture就是屬性,中國就是值。
?EAV模型帶來的好處?如下:
?EAV實體的數(shù)據(jù)庫模式:
- 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種屬性類型就相當(dāng)于字段類型。
- int 對應(yīng)mysql字段的int類型
- varchar 對應(yīng)mysql字段的varchar類型
- text 對應(yīng)mysql字段的text類型
- decimal 對應(yīng)mysql字段的decimal類型
- datetime對應(yīng)mysql字段的datetime類型
比如產(chǎn)品的name 是varchar類型。 他的值存在catalog_product_entity_varchar表里。 知道了這個原理,你就很輕松的知道屬性和值在哪個表里。 聰明的你會覺得,把屬性分散存在不同的表里,如果要查詢?nèi)繉傩缘脑?要聯(lián)十幾張表,是不是太耗資源了? 這點,M2官方也考慮到了,以產(chǎn)品為例,他提供了catalog_product_flat表,也就是說后臺開啟flat模式后,查產(chǎn)品數(shù)據(jù)就直接讀取這個表,他把屬性都存放在這個表里了。 catalog_product_flat是按store id來分的。如果你有多網(wǎng)店的話。 比如:
總結(jié)
以上是生活随笔為你收集整理的【转】Magento 2数据库EAV模型结构的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。