Modèle EAV

Présention

Magento possède certains Objects en base de données au modèle EAV :

  • Produits
  • Catégories
  • Attributs

Ces objects ne sont pas structurés dans une seule table (sans compter les tables de liaison n-n).

Tout est découpé en fonction du type du champ.

Exemples

Modèle standard

ID client Email Nom Prénom Age
1 fma@ph2m.com MARTINEZ Frédéric 35
2 jean.durand@gmail.com DURAND Jean 40

Table : clients

Modèle EAV

ID_entite Active
1 1
2 1

Table : clients_entite

ID ID_entite Name Value
1 1 Nom MARTINEZ
2 2 Nom DURAND
3 1 Prénom Frédéric
4 2 Prénom Jean
5 1 Email fma@ph2m.com
6 2 Email jean.durand@gmail.com

Table : clients_entite_varchar

ID ID_entite Name Value
1 1 Age 35
2 2 Age DURAND

Table : clients_entite_int

Avantages & Inconvénients

Avantages

  • Souplesse extrême dans nos modules. Il n'est plus nécessaire de faire un ALTER TABLE pour ajouter un champ.
  • Seule l'ajout d'une ligne permet l'ajout d'un attribut.

Inconvénients

  • Lourdeur incroyable au niveau de la base de données
  • Imports / Exports complexes

Solution Magento 1.X

Le flat catalog :

  • Quand le Flat est activé, alors Magento concatène les tables EAV en une table unique afin que le système n'aille faire ses requêtes que dans une seule table par store pour les produits et les catégories :
    • catalog_product_flat_1
    • catalog_category_flat_store_1
Attention à ne pas avoir trop de stores ! En effet, si vous avez 5 magasins, et 2 langues, cela se traduit par 10 stores view, donc 10 flat catalog (en autres problèmes, tels que le trop plein d'URL rewrite pour un même produit)