Mysql
 sql >> Base de données >  >> RDS >> Mysql

Conception de table entité-attribut-valeur

Je vais offrir une opinion contraire à la plupart des commentaires sur cette question. Alors que EAV est MAL pour toutes les raisons que vous pouvez trouver expliquées en détail à plusieurs reprises ici sur SO et DBA.SE et ailleurs, il existe une application très courante pour laquelle la plupart des problèmes avec EAV sont largement hors de propos et les (quelques) avantages de Les EAV sont très pertinents. Cette application correspond aux catalogues de produits en ligne.

Le principal problème avec EAV est qu'il ne laisse pas la base de données faire ce qu'elle fait vraiment bien, ce qui aide à donner un contexte approprié à différents attributs d'informations sur différentes entités en les organisant dans un schéma . Avoir un schéma apporte de très nombreux avantages concernant l'accès, l'interprétation et l'application de l'intégrité de vos données.

Le fait à propos des catalogues de produits est que les attributs d'un produit sont presque entièrement sans rapport avec le système de catalogue lui-même. Les systèmes de catalogue de produits font (au plus) trois choses avec les attributs de produit.

  1. Affichez les attributs du produit dans une liste pour les utilisateurs finaux sous la forme :{nom de l'attribut} :{valeur de l'attribut}.

  2. Affichez les attributs de plusieurs produits dans une grille de comparaison où les attributs de différents produits s'alignent les uns contre les autres (les produits sont généralement des colonnes, les attributs sont généralement des lignes)

  3. Définissez des règles pour quelque chose (par exemple, la tarification) en fonction de combinaisons attribut/valeur particulières.

Si votre système ne fait que régurgiter des informations sémantiquement non pertinentes (pour le système), le schéma de ces informations est fondamentalement inutile. En fait, le schéma gêne dans un catalogue de produits en ligne, surtout si votre catalogue contient de nombreux types de produits différents, car vous devez toujours revenir dans le schéma pour le modifier afin d'autoriser de nouvelles catégories de produits ou types d'attributs.

En raison de la façon dont il est utilisé, même le type de données d'une valeur d'attribut dans un catalogue de produits n'est pas nécessairement (essentiellement) important. Pour certains attributs, vous souhaiterez peut-être imposer des contraintes, telles que "doit être un nombre" ou "doit provenir de cette liste {...}". Cela dépend de l'importance de la cohérence des attributs pour votre catalogue et du niveau de détail que vous souhaitez pour votre implémentation. En regardant les catalogues de produits de plusieurs détaillants en ligne, je dirais que la plupart sont prêts à sacrifier la simplicité à la cohérence.

Oui, EAV est diabolique, sauf quand ce n'est pas le cas.