Précédent   Forum des professionnels en informatique > Bases de données > Décisions SGBD
Décisions SGBD Forum de décisions sur le choix en bases de données. Le Comparatif
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/12/2004, 18h03   #1
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 74
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 74
Points : 30
Points : 30
Par défaut Aide pour diagramme de structure des données

Bonjour
j'ai besoin d'aide pour modéliser le schéma d'une base.
Il s'agit de faire une base de données pour stocker des informations produits, mais mon probleme est qu'il y a plusieurs types de produits avec des attributs différents.
Imaginons que je doive stocker des infos sur des marteaux (no_produit + 3 autres attributs) et des tournevis (no_produit + 5 autres attributs).
Par la suite, une table detail des commandes utilise le no_produit en clé etrangere.

Faut-il que je crée une table pour chaque type de produits?
Dans ce cas, est-ce que ca ne risque pas de poser de probleme quand je voudrais avoir le nom du produit depuis le no_produit stocké dans la table detail commandes? Est-ce que ca m'oblige à faire une jointure sur toutes les tables stockant des produits pour recuperer le nom du produit?

ou alors faut-il que je cree 1 seule table produit + 1 autre table contenant toutes les caracteristiques possible de tous les produits + 1 autre table qui ferait la liaison entre le no_produit et l'id de la caracteristique du produit?

je suis un peu perdu... merci de votre aide.
DeezerD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2004, 18h19   #2
Membre à l'essai
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 21
Points : 21
Salut,

Quand tu as un nombre variable d'attributs, il est en général plus sage de normaliser cela en faisant une table produits : 1 ligne = 1 produit, et une table attributs : 1 ligne = 1 attribut produit, N lignes par produit.

ID, LABEL
1, Marteau
2, Tournevis

ID, IDREF, Label
1, 1, Manche en bois
2, 1, Poids 500g
3, 2, Cruciforme
4, 2, En plastique
5, 2, Longueur 30 cm

=> SELECT a.label, b.label FROM produits a, attributs b WHERE a.id = b.idref
Danny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2004, 18h42   #3
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 74
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 74
Points : 30
Points : 30
ok, imaginons que plusieurs Marteaux aient la caracteristique "Manche en bois" il serait alors logique de créer une nouvelle table contenant toutes les caracteristiques afin d'eviter les redondances?

Ce qui donnerait:

ID, LABEL
1, Grand Marteau
2, Tournevis
3, Petit Marteau

IDCARAC, NOMCARAC
101, Manche en bois
102, Poids 500g

ID, IDREF, IDCARAC
1, 1, 101
2, 2, 102
3, 3, 101

Qu'en penses-tu?

merci
DeezerD est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2004, 18h56   #4
Membre à l'essai
 
Inscription : novembre 2004
Messages : 17
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 17
Points : 21
Points : 21
Tout à fait Thierry !

L'idée c'est de dire : "quand j'ai des colonnes variables, je fais une table où mes colonnes deviennent des lignes." Phase 1 de la normalisation.

"Quand j'ai une table avec des lignes qui veulent dire la même chose, je refais une table où je les référence de manière unique, et une table où je les énumère". Phase 2 de la normalisation.

Après il faut juste bien gérer les relations : ton marteau de 350g passe à 500g : si tu fais un UPDATE, dix modèles de marteaux passent à 500g, c'est pas bon. Là où tu aurais fait un UPDATE avec une seule table, ça devient un INSERT avec reclacule des références.
Danny est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/12/2004, 19h10   #5
Nouveau Membre du Club
 
Inscription : octobre 2004
Messages : 74
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 74
Points : 30
Points : 30
problème résolu grâce à toi, merci
DeezerD est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h40.


 
 
 
 
Partenaires

Hébergement Web