|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2004 Messages : 74 ![]() |
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. |
|
|
00
|
|
|
#2 |
|
Membre à l'essai
![]() Inscription : novembre 2004 Messages : 17 ![]() |
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 |
|
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2004 Messages : 74 ![]() |
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 |
|
|
00
|
|
|
#4 |
|
Membre à l'essai
![]() Inscription : novembre 2004 Messages : 17 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2004 Messages : 74 ![]() |
problème résolu grâce à toi, merci
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com