Question de retranscription d'un heritage en script .sql [Résolu]

djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 15 févr. 2012 à 16:15 - Dernière réponse : djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention
- 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 .
Afficher la suite 

Votre réponse

17 réponses

cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 16 févr. 2012 à 15:15
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jopop
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 17 févr. 2012 à 10:53
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jopop
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 17 févr. 2012 à 11:12
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jopop
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 17 févr. 2012 à 11:58
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_jopop
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 16 févr. 2012 à 14:34
0
Utile
Personne pour me venir en aide ? =(
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 16 févr. 2012 à 18:07
0
Utile
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 =)
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 09:58
0
Utile
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
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 10:43
0
Utile
la seconde table c'est carte graphique et non pas carte-mere ^^'
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 11:05
0
Utile
Le mieu serais donc de mettre un champ de plus dans les classe "dérivée" du style id en clé primaire ?
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 11:37
0
Utile
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
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 11:39
0
Utile
je pense avoir oublier la jointure


where produits.id_produits = carte-mere.id_produits
and carte-mere.socket = '1366';
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 14:02
0
Utile
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 =)
Commenter la réponse de djbenji81100
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 14:39
0
Utile
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"
Commenter la réponse de djbenji81100
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 17 févr. 2012 à 14:59
0
Utile
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.
Commenter la réponse de cs_jopop
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 15:07
0
Utile
je ferais donc ceci avec une fonction non ?
Commenter la réponse de djbenji81100
cs_jopop 1540 Messages postés lundi 26 mai 2003Date d'inscription 1 août 2013 Dernière intervention - 17 févr. 2012 à 15:13
0
Utile
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é.
Commenter la réponse de cs_jopop
djbenji81100 66 Messages postés vendredi 9 septembre 2011Date d'inscription 4 juin 2012 Dernière intervention - 17 févr. 2012 à 15:26
0
Utile
avec un trigger ?
Mais et t'il possible de faire ceci avec mysql sous easy php ?
Commenter la réponse de djbenji81100

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.