Maison >base de données >tutoriel mysql >Comment une conception de base de données normalisée peut-elle modéliser efficacement les variantes de produits comme alternative au modèle Entité-Attribut-Valeur (EAV) ?

Comment une conception de base de données normalisée peut-elle modéliser efficacement les variantes de produits comme alternative au modèle Entité-Attribut-Valeur (EAV) ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-06 07:01:12406parcourir

How can a normalized database design effectively model product variants as an alternative to the Entity-Attribute-Value (EAV) model?

Modélisation des variantes de produits

Vous essayez de modéliser des variantes de produits et vous avez quelques inquiétudes concernant l'utilisation de l'EAV (Entity-Attribute-Value). Voici une conception alternative que vous pourriez envisager :

Conception normalisée

La conception suivante normalise la structure des données pour les variantes de produit :

+---------------+     +-----------------+
| PRODUCTS      |-----< PRODUCT_VARIANTS  |
+---------------+     +-----------------+
| #product_id   |     | #product_id       |
|  product_name |     | #variant_id       |
+---------------+     |  sku_id           |
         |             +-----------------+
         |                       |
+--------^--------+     +--------^--------+
| PRODUCT_OPTIONS |-----< VARIANT_VALUES  |
+-----------------+     +-----------------+
| #product_id     |     | #product_id     |
| #option_id      |     | #variant_id     |
+--------v--------+     | #option_id      |
         |              |  value_id       |
+-----------------+     +--------v--------+
| OPTIONS         |              |
+-----------------+              |
| #option_id      |              |
|  option_name    |              |
+-----------------+              |
         |                       |
 +-------^-------+               |
 | OPTION_VALUES |---------------+
 +---------------+
 | #option_id    |
 | #value_id     |
 |  value_name   |
 +---------------+

Primaire, unique et étranger Clés :

PRODUCTS
- PK: product_id
- UK: product_name

OPTIONS
- PK: option_id
- UK: option_name

OPTION_VALUES
- PK: option_id, value_id
- UK: option_id, value_name
- FK: option_id REFERENCES OPTIONS (option_id)

PRODUCT_OPTIONS
- PK: product_id, option_id
- FK: product_id REFERENCES PRODUCTS (product_id)
- FK: option_id REFERENCES OPTIONS (option_id)

PRODUCT_VARIANTS
- PK: product_id, variant_id
- UK: sku_id
- FK: product_id REFERENCES PRODUCTS (product_id)

VARIANT_VALUES
- PK: product_id, variant_id, option_id
- FK: product_id, variant_id REFERENCES PRODUCT_VARIANTS (product_id, variant_id)
- FK: product_id, option_id REFERENCES PRODUCT_OPTIONS (product_id, option_id)
- FK: option_id, value_id REFERENCES OPTION_VALUES (option_id, value_Id)

Comment ça marche

  • PRODUITS contient des informations de base sur le produit comme le nom.
  • OPTIONS répertorie les options disponibles, telles que Taille ou Couleur.
  • OPTION_VALUES contient les valeurs spécifiques des options, telles que Petit ou Rouge.
  • PRODUCT_OPTIONS cartographie les options associées aux produits.
  • PRODUCT_VARIANTS stocke les variantes de produits réelles ainsi que leurs SKU.
  • VARIANT_VALUES relie les variantes à leurs valeurs d'option.

Cette conception vous permet de définir les options et leurs valeurs de manière indépendante, ce qui rend flexible l'ajout de nouvelles options ou valeurs dans le futur.

Échantillon Données

Voici un exemple de la façon dont vous pouvez saisir des données dans ces tableaux en fonction de la feuille de calcul de votre question :

PRODUCTS
========
product_id product_name
---------- ------------
1          Widget 1
2          Widget 2
3          Widget 3

OPTIONS
=======
option_id option_name
--------- -----------
1         Size SL
2         Color
3         Size SM
4         Class
5         Size ML

OPTION_VALUES
=============
option_id value_id value_name
--------- -------- ------------
1         1        Small        (Size SL)
1         2        Large        (Size SL)
2         1        White        (Color)
2         2        Black        (Color)
3         1        Small        (Size SM)
3         2        Medium       (Size SM)
4         1        Amateur      (Class)
4         2        Professional (Class)
5         1        Medium       (Size ML)
5         2        Large        (Size ML)

PRODUCT_OPTIONS
===============
product_id option_id
---------- ---------
1          1         (Widget 1; Size SL)
1          2         (Widget 1; Color)
2          3         (Widget 2; Size SM)
3          4         (Widget 3; Class)
3          5         (Widget 4; Size ML)

PRODUCT_VARIANTS
================
product_id variant_id sku_id
---------- ---------- ------
1          1          W1SSCW (Widget 1)
1          2          W1SSCB (Widget 1)
1          3          W1SLCW (Widget 1)
1          4          W1SLCB (Widget 1)
2          1          W2SS   (Widget 2)
2          2          W2SM   (Widget 2)
3          1          W3CASM (Widget 3)
3          2          W3CASL (Widget 3)
3          3          W3CPSM (Widget 3)
3          4          W3CPSL (Widget 3)

VARIANT_VALUES
==============
product_id variant_id option_id value_id
---------- ---------- --------- --------
1          1          1         1        (W1SSCW; Size SL; Small)
1          1          2         1        (W1SSCW; Color; White)
1          2          1         1        (W1SSCB; Size SL; Small)
1          2          2         2        (W1SSCB; Color; Black)
1          3          1         2        (W1SLCW; Size SL; Large)
1          3          2         1        (W1SLCW; Color; White)
1          4          1         2        (W1SLCB; Size SL; Large)
1          4          2         2        (W1SLCB; Color; Black)
2          1          3         1        (W2SS; Size SM; Small)
2          2          3         2        (W2SM; Size SM; Medium)
3          1          4         1        (W3CASM; Class; Amateur)
3          1          5         1        (W3CASM; Size ML; Medium)
3          2          4         1        (W3CASL; Class; Amateur)
3          2          5         2        (W3CASL; Size ML; Large)
3          3          4         2        (W3CPSM; Class; Professional)
3          3          5         1        (W3CPSM; Size ML; Medium)
3          4          4         2        (W3CPSL; Class; Professional)
3          4          5         2        (W3CPSL; Size ML; Large)

Avantages

  • Offre une plus grande flexibilité et évolutivité.
  • Simplifie les requêtes en évitant les requêtes complexes jointures.
  • Applique l'intégrité des données via des clés étrangères.

Inconvénients

  • Nécessite plus de tables par rapport à EAV.
  • Peut impliquer une conception de base de données plus complexe et maintenance.

Conclusion

Cette conception normalisée est une alternative viable à l'EAV pour la modélisation des variantes de produits. Il offre flexibilité, évolutivité et intégrité des données tout en étant relativement facile à interroger. Cependant, le choix spécifique entre l'EAV et la normalisation doit être fait en fonction des exigences spécifiques et des compromis de votre application.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn