Conception BDD gestion sav

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Conception BDD gestion sav

par furiouslol » 05 oct. 2008, 17:15

Pas de soucis pour brancher plusieurs tables, au contraire, par contre si :

- Un dossier contient plusieurs commentaires

Alors ton conceptuel ne marche pas, au lieu d'avoir une clé étrangère "Comment" dans ta table "Dossier", tu devrait avoir une clé étrangère "Dossier" dans ta table "Comment"

Et dans ce cas la, ta requête serait plutôt de la forme :

Code : Tout sélectionner

SELECT * FROM dossiers AS d JOIN marque ON d.id_marque = marque.id marque JOIN magasins ON d.id_magasin = magasins.id_magasin JOIN comment ON d.id_dossier = comment.id_dossier WHERE id_dossier=1;
Ici ça te retournera plusieurs ligne, une par commentaire pour ce dossier la

Et

Code : Tout sélectionner

SELECT c.id_comment FROM dossiers AS d JOIN comment c ON d.id_dossier = c.id_dossier WHERE id_dossier=1;
Te retournerais la liste des commentaires du dossier N°1 (par exemple)

par hi-logik » 02 oct. 2008, 12:43

en faites les jointures classiques et les clé étrangères simple n'est pas difficile pour moi
ce que j'essaie de faire comprendre c'est une relation un peu plus complexe mais qui je suis sur ne l'ai pas telement!

je part de la table dossier dans la quel il y à un clé étrangère pour marque, une autre pour magasin et une autre pour comment !

j'ai don 3 tables branché sur une !

si j'ai déjà join marque à dossier comment je peux repartir pour joindre magasin et ensuite comment sachant que c'est pas une jointure en cascade ?

en gros que comment faire pour branché 3 trois table sur une en sélection ?

ou bien ça ne fais pas et donc je dois changer ma conception ?

exemple :

SELECT *
FROM dossiers AS d
JOIN marque ON d.id_marque = marque.id marque
JOIN magasins ON d.id_magasin = magasins.id_magasin
JOIN comment ON d.id_comment = comment.id_comment
etc

c'est vraiment à titre d'exemple !

par furiouslol » 02 oct. 2008, 00:26

Tiens y a ce tuto

http://www.phpfrance.com/forums/voir_sujet-21507.php

Qui explique la jointure, mais qui donne un exemple a suivre pour la construction des tables et de leurs liaisons (entre autre les clefs étrangères doivent être du même type de donnée)

par furiouslol » 02 oct. 2008, 00:06

Ben déjà :

- Je suppose que tu as plusieurs "comment" par dossier, donc ta table comment doit contenir une référence a la table "dossier" :
=> un champ "id_dossier" dans ta table "comment"

- Si un "Dossier" a une et une seule "Marque", tu dois avoir un champ "id_marque" dnas ta table "dossier":
=> remplacer ton champ "marque" en varchar(45) dans ta table "dossier" par un champ "id_marque" INT, qui corresponde a l'index de ta table "marque"

- Si a un dossier correspond un et un seul magasin, alors tu dois avoir un "id_magasin" dans ta table "dossier" (meme fonctionnement que la marque en fait)

Ensuite faut que tu précise ta question
comment je pourrais faire cette jointure si je voulais tous sélectionné
Mais en faisant comme plus haut c'est tout a fait possible de récupérer la marque, le magasin et une liste de commentaire pour un dossier donné, si c'est ce que tu veux

SAV sql

par hi-logik » 01 oct. 2008, 19:13

salut !

j'ai fais mon shema sur mysql workbench

Code : Tout sélectionner

-- ----------------------------------------------------- -- Table `GestionCLients`.`REPRESENTANTS` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`REPRESENTANTS` ( `ID_REPRESENTANT` NOT NULL , `NOM` VARCHAR(45) NULL , `PRENOM` VARCHAR(45) NULL , `DATE_NAISSANCE` VARCHAR(45) NULL , `ADRESSE` VARCHAR(45) NULL , `DEPARTEMENT` VARCHAR(45) NULL , `VILLE` VARCHAR(45) NULL , `TELEPHONE` VARCHAR(45) NULL , `MOBILE` VARCHAR(45) NULL , `EMAIL` VARCHAR(45) NULL , PRIMARY KEY (`ID_REPRESENTANT`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `GestionCLients`.`CLIENTS` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`CLIENTS` ( `ID_CLIENT` INT NOT NULL AUTO_INCREMENT , `NOM` VARCHAR(40) NULL , `PRENOM` VARCHAR(40) NULL , `DATE_NAISSANCE` VARCHAR(45) NULL , `ADRESSE` VARCHAR(255) NULL , `DEPARTEMENT` VARCHAR(5) NULL , `VILLE` VARCHAR(40) NULL , `TELEPHONE` VARCHAR(10) NULL , `FAX` VARCHAR(45) NULL , `MOBILE` VARCHAR(10) NULL , `EMAIL` VARCHAR(70) NULL , `DATE_REGISTER` DATE NULL , `WEBSITTE` VARCHAR(45) NULL , `REPRESENTANTS_ID_REPRESENTANT` NOT NULL , PRIMARY KEY (`ID_CLIENT`, `REPRESENTANTS_ID_REPRESENTANT`) , INDEX fk_CLIENTS_REPRESENTANTS (`REPRESENTANTS_ID_REPRESENTANT` ASC) , CONSTRAINT `fk_CLIENTS_REPRESENTANTS` FOREIGN KEY (`REPRESENTANTS_ID_REPRESENTANT` ) REFERENCES `GestionCLients`.`REPRESENTANTS` (`ID_REPRESENTANT` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `GestionCLients`.`DOSSIERS` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`DOSSIERS` ( `ID_PRODUIT` INT NOT NULL AUTO_INCREMENT , `NUMERO_SERIE` VARCHAR(255) NULL , `MARQUE` VARCHAR(45) NULL , `MODEL` VARCHAR(45) NULL , `TYPE` MEDIUMINT NULL , `CONFIGURATION` VARCHAR(45) NULL , `DATE_ACHAT` VARCHAR(45) NULL , `LIEU_ACHAT` VARCHAR(45) NULL , `DATE_DOSSIER` DATE NULL , `CLIENTS_ID_CLIENT` INT NOT NULL , PRIMARY KEY (`ID_PRODUIT`, `CLIENTS_ID_CLIENT`) , INDEX fk_DOSSIERS_CLIENTS (`CLIENTS_ID_CLIENT` ASC) , CONSTRAINT `fk_DOSSIERS_CLIENTS` FOREIGN KEY (`CLIENTS_ID_CLIENT` ) REFERENCES `GestionCLients`.`CLIENTS` (`ID_CLIENT` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `GestionCLients`.`MARQUES` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`MARQUES` ( `ID_MARQUE` INT NOT NULL , `MARQUE` VARCHAR(45) NULL , PRIMARY KEY (`ID_MARQUE`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `GestionCLients`.`COMMENTS` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`COMMENTS` ( `ID_COMMENTS` INT NOT NULL , `SUBJECT` VARCHAR(45) NULL , `COMMENT` VARCHAR(45) NULL , `DATE` DATE NULL , PRIMARY KEY (`ID_COMMENTS`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `GestionCLients`.`MAGASINS` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GestionCLients`.`MAGASINS` ( `ID_MAGASINS` NOT NULL , `MAGASINS` VARCHAR(45) NULL , PRIMARY KEY (`ID_MAGASINS`) ) ENGINE = InnoDB;
voila ma base

par furiouslol » 01 oct. 2008, 12:10

ok ben poste ici les requêtes de création des tables dossier, marque, magasin et comment et je te dirais ce que j'en pense :)

SAV

par hi-logik » 01 oct. 2008, 10:26

Merci pour ta réponse !

en faite c'est que j'avais fais mais j'ai du mal m'exprimer !

j'ai une table représentants
une table clients
une table dossiers
une table marques
une table magasins

mes liaisons :

representants -> client 1:n car le client ne doit avoir qu'un seul representant pour suivre son dossier
client -> dossier 1:n car un client peut avoir plusieurs dossier

un dossier n'existe que pour un produit si un client à un autre problème on ouvre un autre dossier

dans la table dossier il y'a un référence à la table marque et une autre référence à la table magasin et c'est la qu'est mon souci!

comme dossier à une référence en même temps à marque et magasins et qu'en plus il y' a une référence à comments car un dossier peut avoir plusieurs comment (0 : n)
comment je pourrais faire cette jointure si je voulais tous sélectionné ? car de dossier à marque et magasin ca fais comme un Y ensuite je dois repartir pour select les comment !

donc soit je peux le faire de chez pas quel manière soit ma conception est à revoir mais commrent svp?


thank you !

par furiouslol » 30 sept. 2008, 13:43

Salut

Je suppose que tu as plusieurs comment par dossier, donc ta table comment doit contenir une référence a la ta dossier

Si tu as une marque par dossier, alors une référence marque dans ta table dossier suffira, sinon tu dois faire une table de liaison :

Code : Tout sélectionner

table dossierMarque id_marque id_dossier
qui te permettra par exemple de lister toutes les marques pour un dossier donné, ou inversement de lister tous les dossier concerné par une marque

Cette proposition est valable pour dossier/magasin

par hi-logik » 30 sept. 2008, 12:08

Bon et bien pas réponse :( snif

j'ai bien compris les relations type 1:n, n:m etc

ce qui me pose problème dans ma logique c'est les jointure genre en Y

prenons un exemple !

une base type sav

j'ai une table représentants, client dossiers, marques, magasins, comments

je joint représentants à client puis clients à dossiers

le dossier contient le produit que le client à acheter donc je dois y mettre une clé
pour la table marque pour faire la liaison mais depuis la table dossier
je doit avoir la clé de la table des magasins et après je dois repartir sur la table
comments car quand on suit le client on souhaite laisser un commentaire a chaque appel
pour ce souvenir de la conversation!

bref j'ai du mal à concevoir cette jointure !

help me :D

par zeus » 25 sept. 2008, 11:20

Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "Méthodologie, modélisation, sécurité".

Conception BDD gestion sav

par hi-logik » 25 sept. 2008, 10:36

Bonjour :)!
c'est encore moi avec mes conceptions lool

je créer une base de donnée type s.a.v

je voulais avoir votre avis et j'ai aussi une difficulté à résoudre !

voila j'ai fais :

une table representant
une table client
une table dossier(qui contients tous sur le produit)
une table marque(car c'est des produit specifique donc on connais les marques et j'en fais une liste)
une table magasins(pour le lieu d'achat)
et une table comments pour chaque dossier

mes relations sont:

representants ->clients 1:n
client -> dossier 1:n

mais la ou je bloque c'est que à partir de la table dossier je dois pouvoir joindre la table marques, magasins et comments !

car dans la table dossier il doit y avoir le numero correspondant à la marque et au magasin
et chaque dossier peut avoir plusieurs commentaires

donc dossier c'est 1:n avec comment mais je dois relier aussi dossier avec marque et magasin !

est que ma conception n'est pas bonne ?
ou bien pour y arriver je devrais peut en plus de jointure faire des selects imbriquer ?
ou bien je suis à l'ouest lool ? :D

merci d'avance pour votre aide !