Question de retranscription d'un heritage en script .sql

Résolu
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012
- 15 févr. 2012 à 16:15
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012
- 17 févr. 2012 à 15:26
Bonjour ,

je suis débutant en sql et il me faut develloper une petite base de donnée pour un site internet .

voila le lien de l'image avec une partie du mcd : ici

Dans un premier temps j'aimerais savoir si j'ai bien conçue celon vous cette partie de mcd .


Et t'il possible ensuite de me donner un exemple de création de script ( jointure ou autre) a creer entre la table mere ( produits ) et la table fille ( carte mere par exemple )

je vous remercie par avance .

17 réponses

cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
16 févr. 2012 à 15:15
Salut,

ton MCD me parait pas si pire, pour ce qui est de la partie SGBD ça va dépendre de comment tu veux faire ton MLD, il existe plusieurs possibilité. Je te laisse regarder ce lien où tu devrais trouver ton bonheur.
3
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
17 févr. 2012 à 10:53
Re,

que ce soit la table GC ou MB ça change pas grand chose ^^

Alors petite chose sur tes CREATE, je sais pas quel SGBD tu utilises mais pour certains il te faut nécessairement une clé primaire (ce qui n'est pas le cas dans ta table "dérivée").

Pour ce qui est du nouveau schéma que tu as fait il est maintenant plus proche du MLD que du MCD.

Sinon je vois rien de spécial à redire.
3
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
17 févr. 2012 à 11:12
Oui, un id int not null auto_increment référencé en primary key sur chacune de tes tables "dérivées". Ou si tes valeurs du champ `reference` sont uniques tu peux le déclarer comme clé primaire.

Attention, certains SGBD n'ont pas besoin de clé primaire (c'est le cas d'Access il me semble). Par contre, même pour ces SGBD, une clé primaire peut être pratique car elle permettra d'accéder à coup sûr à un enregistrement précis (pour l'update ou le delete), ce qui n'est pas nécessairement possible si aucun des tes autres champs n'est unique.
3
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
17 févr. 2012 à 11:58
Pour connaitre toutes les cartes mères avec un socket 1366 que tu as référencées, tu n'as pas besoin de passer par ta table `produits`.

Par contre si tu veux connaitre toutes les cartes mères avec un socket 1366 ET leur libellé/marque/quantité (les champs de `produits`) alors oui, il faut faire une jointure. Et pour ceci ta requête me parait correcte.
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

16 févr. 2012 à 14:34
Personne pour me venir en aide ? =(
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

16 févr. 2012 à 18:07
je te remercie . je regarde tous ceci en profondeur et je reviens a la charge avec une partie du code qui s'applique a mon cas pour voir si je ne fait pas d'hors sujet =D

Merci encore =)
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 09:58
Bonjour ,

bon j'ai donc modifier la partie MCD ici.
Maintenant partie scipt je me demande si c'est comme ça que je doit proceder .


CREATE TABLE `produits` (
`id_produits` int(100) NOT NULL AUTO_INCREMENT,
`libelle` varchard(100) NOT NULL, 
`marque` varchard(25) NOT NULL,
`quantite` int(200) NOT NULL,

PRIMARY KEY (`id_produits`)
);

CREATE TABLE `carte_mere`(
`id_produits` int(100) NOT NULL ,
`reference` varchar(50) NOT NULL,
`memoire` varchar(10) NOT NULL,
`type_mem` varchar(10) NOT NULL,
`prix` varchar(4) NOT NULL,

FOREIGN KEY (`id_produits`) references `produits`(`id_produits`)
);






suis-je dans le bon ? =D
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 10:43
la seconde table c'est carte graphique et non pas carte-mere ^^'
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 11:05
Le mieu serais donc de mettre un champ de plus dans les classe "dérivée" du style id en clé primaire ?
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 11:37
ok je vais donc en mettre une dans chaque classe .

aprés lorsque je voudrais appeler l'integralité des cartes mere ayant un socket 1366 je prosséde comme ceci ?


SELECT produits.id_produits, produits.libelle, produits.marque, produits.quantite, carte-mere.reference, carte-mere.socket, carte-mere.chipset, cartemere.prix
FROM produits, carte-mere
WHERE carte-mere.socket = '1366';





suis-je dans le bon ? =D
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 11:39
je pense avoir oublier la jointure


where produits.id_produits = carte-mere.id_produits
and carte-mere.socket = '1366';
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 14:02
Je te remmercie de tous tes conseils . si j'ai besion un peu d'aide je reviendrais poser une question sur ce sujet ( si le c'est en rapport bien entendu ) =) . encore une fois merci =)
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 14:39
ahah je suis deja de retour

bon voila la question est peu etre toute bete mais je prefere demander .

lorsque je veut faire par exemple un insert pour rajouter un produit , comment je procede ?

je m'explique : etant donnée que des information de mon produits ce trouve a la fois dans produits et ma table "dérivée" comment je dois code mon insert pour que les données ce trouvent dans produits et la fameuse classe "dérivée"
0
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
17 févr. 2012 à 14:59
Je vois pas bien comment le faire en une requête, à voir avec d'autres helpers qui suivraient le fil de la discussion. Perso j'imagine l'insertion en 3 requêtes :
- insert d'un tuple dans la table `produits`,
- select dudit tuple créé pour récupéré l'id auto_incrémenté,
- insert d'un tuple dans la table "dérivée" avec l'id récupéré plus tôt.
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 15:07
je ferais donc ceci avec une fonction non ?
0
cs_jopop
Messages postés
1540
Date d'inscription
lundi 26 mai 2003
Statut
Membre
Dernière intervention
1 août 2013
12
17 févr. 2012 à 15:13
Tu peux effectivement faire une procédure stockée qui gérera les 3 requêtes.
Et pour bien faire tu peux même le faire lors d'une transaction, histoire que si une des 3 requêtes ne passe pas alors la totalité du processus est annulé.
0
djbenji81100
Messages postés
66
Date d'inscription
vendredi 9 septembre 2011
Statut
Membre
Dernière intervention
4 juin 2012

17 févr. 2012 à 15:26
avec un trigger ?
Mais et t'il possible de faire ceci avec mysql sous easy php ?
0