web-dev-qa-db-fra.com

Comment résoudre une relation de données multidimensionnelle

J'ai un problème, que je pouvais résoudre de manière programmatique, mais pour mon projet personnel (test), j'essaie de voir si je peux le réparer dans le modèle relationnel.

Imaginez un pantalon de produits de mode complexe avec ces propriétés comme dimensions:

  • Longueur (35,36,37,38)
  • Taille (32,33,34,35)
  • Couleur (blanc, rouge, bleu, jaune, vert)
  • Genouillé (en bois, brun, argent)
  • Ceinture liée (brun, beige, noir)

Alors il y a 4*4*5*3*3 = 720 variantes de produit. Je sais que c'est extrême, mais je fais purement cela pour tester immédiatement si mon système sera en mesure de le gérer dans une phase ultérieure.

Tellement coupé j'ai:

Produits

id
name

Propriétés

id
name

En pensant à la Logic de RDBMS, je voudrais obtenir une table comme celle-ci, ce qui n'est bien sûr pas possible car il ajouterait constamment des propriétés et ajoute des tonnes de nulls:

Productsvariomants

 id
 product_id
 property_1_id
 property_2_id
 property_3_id
...etc.

Donc, c'est un peu plus difficile qu'une combinaison couleur/taille habituelle que vous avez normalement sur un produit.

Maintenant, je peux simuler cette méthodologie et vider une série de sérialisation de l'ID de propriété dans un domaine sur les variants, comme:

Productsvariomants

id
product_id
properties {1, 2, 3}

.. Et ensuite les diviser dans mon or, mais cela craignez que cela augmente considérablement les requêtes nécessaires à l'avenir (avec des dizaines de milliers de variantes de produits) et l'optimisation ne semble plus possible de cette façon.

Quelqu'un a-t-il de l'expérience avec cela et de savoir peut-être intelligemment cela? J'utilise mysql.

2
User2910293

Produits

ProdId
ProdName

Propriétés

(PropId) (primary key, if required)
ProdId (composite key)
PropCode (composite key)
PropValue (composite key) (if storing a specific value, otherwise you can remove this to simply store the possible properties for any given product)

Fondamentalement, vous stockez plusieurs valeurs pour une propriété donnée qui revenait à un seul produit. La clé composite devrait être unique et vous auriez besoin d'assurer l'intégrité des données en reliant l'appocode sur une autre table ou en limitant les valeurs à l'entrée.

1
Zack