Magento 2数据库EAV模型结构
?EAV模型是一種數(shù)據(jù)模型?,用于描述實(shí)體的數(shù)量預(yù)計(jì)會(huì)很大,但事實(shí)上,實(shí)體中要使用的屬性數(shù)量并不多。 Magento 2這么設(shè)計(jì)是為了靈活性,在不影響主干的基礎(chǔ)上,任意新增刪除屬性。 EAV模型(E ->實(shí)體,A -> 屬性,V -> 值)簡(jiǎn)單理解就是分表,不需要把所有字段都放在主表里,而是按類(lèi)型存放在不同的副表上。 對(duì)于字段少的項(xiàng)目來(lái)說(shuō) EAV其實(shí)沒(méi)啥用 效率不高。
按照常規(guī)做法,比如一個(gè)產(chǎn)品的所有相關(guān)屬性都會(huì)存放在產(chǎn)品表里,增刪改查的都是這一個(gè)表。 EAV模式 就是把這些屬性按照類(lèi)型獨(dú)立分開(kāi)存放到不同表里的。 所有查詢(xún)屬性值的時(shí)候會(huì)比較麻煩 要聯(lián)表查詢(xún)。 不過(guò)M2里不用擔(dān)心,他提供了非常簡(jiǎn)單的方法,直接get屬性名就得到值了,不需要你手動(dòng)去寫(xiě)sql查表。
實(shí)體存儲(chǔ)的是數(shù)據(jù)類(lèi)型的信息。 就Magento而言,就是Customer,Category,Product等。 屬性是每個(gè)實(shí)體的單獨(dú)屬性(比如name,weight,email)。 值是實(shí)體某個(gè)屬性的值。
比如,產(chǎn)品有個(gè)屬性叫產(chǎn)地(Manufacture),它的值為中國(guó)。 那么產(chǎn)品就是實(shí)體,Manufacture就是屬性,中國(guó)就是值。
?EAV模型帶來(lái)的好處?如下:
?EAV實(shí)體的數(shù)據(jù)庫(kù)模式:
- eav_entity - (E)實(shí)體表。
- eav_entity_attribute(A)屬性表
- eav_entity_ {type}(V) - 值表。{type} - datetime,decimals,int,text和varchar。
- eav_attribute 里面是所有實(shí)體的屬性
帶有eav_ *表格的圖表:
?magento的eav模型
Magento 2中有哪些EAV實(shí)體? 實(shí)體列表可以在eav_entity_type表中找到:
- customer
- customer_address
- catalog_category
- catalog_product
- order
- invoice
- creditmemo
- shipment
Magento 2中有哪些EAV屬性類(lèi)型:
- eav_entity_int
- eav_entity_varchar
- eav_entity_text
- eav_entity_decimal
- eav_entity_datetime
這5種屬性類(lèi)型就相當(dāng)于字段類(lèi)型。
- int 對(duì)應(yīng)mysql字段的int類(lèi)型
- varchar 對(duì)應(yīng)mysql字段的varchar類(lèi)型
- text 對(duì)應(yīng)mysql字段的text類(lèi)型
- decimal 對(duì)應(yīng)mysql字段的decimal類(lèi)型
- datetime對(duì)應(yīng)mysql字段的datetime類(lèi)型
比如產(chǎn)品的name 是varchar類(lèi)型。 他的值存在catalog_product_entity_varchar表里。 知道了這個(gè)原理,你就很輕松的知道屬性和值在哪個(gè)表里。 聰明的你會(huì)覺(jué)得,把屬性分散存在不同的表里,如果要查詢(xún)?nèi)繉傩缘脑?要聯(lián)十幾張表,是不是太耗資源了? 這點(diǎn),M2官方也考慮到了,以產(chǎn)品為例,他提供了catalog_product_flat表,也就是說(shuō)后臺(tái)開(kāi)啟flat模式后,查產(chǎn)品數(shù)據(jù)就直接讀取這個(gè)表,他把屬性都存放在這個(gè)表里了。 catalog_product_flat是按store id來(lái)分的。如果你有多網(wǎng)店的話。 比如:
catalog_product_flat_1 //代表store id為1的所有產(chǎn)品數(shù)據(jù) catalog_product_flat_2 代表store id為2的所有產(chǎn)品數(shù)據(jù)
總結(jié)
以上是生活随笔為你收集整理的Magento 2数据库EAV模型结构的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: playhome手机版有吗
- 下一篇: 数据库索引介绍