Principe de base, expliqué nulle part

Principe de base, expliqué nulle part - SQL/NoSQL - Programmation

Marsh Posté le 15-12-2006 à 10:55:33    

Bonjour.
 
Bon je commence à piger que pour faire une base de données potable, il faut éviter les redondances et ne pas laisser de champs vides. Les relations, ça va à peu près aussi. Mais je me pose toujours une grande question.
 
Admettons que je sois un épicier qui veut gérer son stock, avec les caractéristiques de ses produits. Si je crée une table "produits" en général avec un "type produit" pour les identifier, j'aurais des cases vides: exemple le volume du foie gras ne m'intéresse pas--> Vide. Le poids des magnum de champagne non plus. Donc si je mets ces deux produits dans une même table, j'aurais pas optimisé mon espace.
 
Si maintenant je décide de créer une table pour les foies gras et une pour les bouteilles de champagne. Si je spécifie à chaque fois que le produit dans la table "bouteilles de champagne" est une bouteille de champ, j'ai redondance. Et donc ça ne va pas non plus... Mais je ne peux pas me contenter du nom de la table pour savoir de quel type de produit il s'agit si j'ai envie de faire une requête dessus...
 
Des idées, des éclaircissements, je prends tout ;)
 
Merci

Reply

Marsh Posté le 15-12-2006 à 10:55:33   

Reply

Marsh Posté le 15-12-2006 à 11:13:18    

Des champs à null dans certaines conditions ça peut se justifier...:o
Mais si tu veux absolument éviter ça tu peux très avoir 'produit', 'type_produit', 'volume_produit', 'poids_produit', etc...:o
Bref, c'est faisable. Lourdingue à mon avis, mais faisable.:o


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-12-2006 à 11:22:47    

si tes "attributs" changent totalement d'un produit à l'autre tu vas être obligé de faire une "table de liaison".
Tu crées:

  • une table type_produit ( id et nom )  
  • une table attribut ( id, id type produit, nom, type, unité)
  • une table produit ( id, id type_produit, nom)
  • une table l_produit_attribut ( id, id produit, id attribut, valeur)


Maintenant si tu as un produit"Barquette de 1kg de Saumon d'écosse" tu devras avoir les éléments suivants dans les tables

  • dans type_produit, on va dire id=1 nom="Poisson"
  • les attributs de ce type de produits, id=1 nom="Poids" type="decimal", "unité"= "kg"
  • dans produit, id=1 nom="Barquette de 1kg de Saumon d'écosse"
  • dans l_produit_attribut, id=1 "id produit"=1 "id attribut"=1 valeur="1"

et pour ta "bouteille de champagne":

  • dans type_produit, on va dire id=2 nom="Liquide"
  • les attributs de ce type de produits, id=2 nom="Contenance" type="decimal", "unité"= "litre"
  • dans produit, id=2 nom="Bouteille de champagne"
  • dans l_produit_attribut, id=2 "id produit"=2 "id attribut"=2 valeur="0.75"


voila grosso-modo l'idée, ça te permet d'avoir autant d'attributs que tu veux pas produits

Reply

Marsh Posté le 15-12-2006 à 11:23:39    

euh oui, c'est plus propre, si tu veux rajouter des attributs plus tard, d'ailleurs...pas réveillé, moi.[:joce]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-12-2006 à 11:38:21    

Tiens, je code en ce moment un truc concernant le même pb : pouvoir mettre tout ce que je veux dans une même table. Voilà ce que MagicBuzz m'avait suggéré comme modèle (Second système. Sauce "Générix" ) :  
http://forum.hardware.fr/forum2.ph [...] 0#t1480675

Reply

Marsh Posté le 15-12-2006 à 13:45:14    

Un grand merci anapajari, c'est exactement ce qu'il me fallait, j'ai un peu testouillé et ça a l'air de bien tourner.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed