Création bdd SQL - comment faire? Newbie Inside

Création bdd SQL - comment faire? Newbie Inside - SQL/NoSQL - Programmation

Marsh Posté le 03-04-2006 à 16:46:40    

:hello:  
 
Désolé pour le titre peu explicite mais j'ai pas trouvé mieux :heink:  
 
Je débute en base de données (débutant de chez débutant).
 
La problematique : j'ai en charge la gestion de 200 adresses mail et 100 listes de diffusion environ.
 
toto@raoul.fr appartient aux listes de diffusion "service du personnel", "Secouriste du travail" et  "Football" par exemple
tata@raoul.fr  appartient aux listes de diffusion "Direction" et "Football"
 
Comment faire pour creer une base qui me permette de savoir dans quelles listes se trouvent toto, et inversement
 
Le probleme, c'est que je ne sais pas vraiment par ou commencer.
 
Je suppose qu'il me faut une table avec le nom des utilisateurs, une table des listes de diffusion, mais je vois pas comment les lier entre elle?
Faut il creer une table pour chaque liste de diffusion?
 
Je suis un peu perdu donc si une ame charitable passe par la, je la remercie par avance.
 
Language : mysql
 

Reply

Marsh Posté le 03-04-2006 à 16:46:40   

Reply

Marsh Posté le 03-04-2006 à 16:49:39    

Il te faut en effet une table pour les mails ou utilisateurs, une table avec les listes de diffusion et une table de liaison entre les deux tables ou les clés de chaque table vont migrer.


Message édité par Manu la Science le 03-04-2006 à 16:49:58

---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 03-04-2006 à 16:54:47    

:heink:  
 
si je resume, j'ai une table avec les utilisateurs (nom, prenom)
une table avec le nom des listes de diffusion (football, direction...)
 
il ne me faut pas une table football avec les utilisateurs (toto tata)???

Reply

Marsh Posté le 03-04-2006 à 17:10:15    

Tu as une table utilisateur avec (nom, prenom etc et une clé primaire id_utilisateur), une table liste (nom_liste avec une clé primaire id_liste) et une table liaison qui a les champs id_utilisateur et id_liste.
Tu peux saisir ainsi plusieurs listes et attribuer une liste pour plusieurs utilisateurs et/ou un utilisateur pour plusieurs listes.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 03-04-2006 à 17:16:29    

ah ok, j'avais pas percuter sur id_utilisateur et id_liste.
 
pour les faire, je fait un truc du genre  
 
CREATE TABLE utilisateur  
(
  id_utilisateur INTEGER NOT NULL AUTO_INCREMENT,
  utilisateur VARCHAR .........
);
 
c'est ca?


Message édité par Brigitte_Lahaie le 03-04-2006 à 17:16:42
Reply

Marsh Posté le 03-04-2006 à 19:59:24    

Oui, c'est cela...


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 04-04-2006 à 08:43:30    

Merci,
 
je vais essayer ca dans la journée.

Reply

Marsh Posté le 04-04-2006 à 15:37:18    

voila ce que j'ai fait. Est-ce correct?
J'ai un doute sur la table de liaison :pfff:  
 
 -- Création de la base liste
DROP DATABASE IF EXISTS liste ;
CREATE DATABASE liste ;
USE liste ;
 
-- Création de la table utilisateurs
CREATE TABLE liste.utilisateurs
(
      util_num INTEGER NOT NULL AUTO_INCREMENT,
      util_nom VARCHAR(20) BINARY NOT NULL,
      util_prenom VARCHAR(20) BINARY NOT NULL,
      util_local VARCHAR(20) BINARY,
      PRIMARY KEY (util_num),
      UNIQUE (util_nom,util_prenom,util_local)
)
;
 
-- Création de la table liste de diffusion
CREATE TABLE liste.listdiff
(
      listdiff_num INTEGER NOT NULL AUTO_INCREMENT,
      listdiff_nom VARCHAR (20) BINARY NOT NULL,
      PRIMARY KEY (listdiff_num),
      UNIQUE (listdiff_nom)
)
;
-- Créaion de la table de liaison
CREATE TABLE liste.liaison
(
      liaison_util INTEGER NOT NULL,
      liaison_listdiff INTEGER NOT NULL,
      PRIMARY KEY (liaison_util,liaison_listdiff),
      INDEX liaison_util (liaison_util),
      INDEX liaison_listdiff (liaison_listdiff),
      FOREIGN KEY (liaison_util) REFERENCES utilisateurs (util_num) ON DELETE CASCADE ,
      FOREIGN KEY (liaison_listdiff) REFERENCES utilisateurs (listdiff_num) ON DELETE CASCADE
)
;


Message édité par Brigitte_Lahaie le 04-04-2006 à 15:37:40
Reply

Marsh Posté le 04-04-2006 à 16:08:51    

Ca a l'air d'être cela... mais pour la table liaison, tu n'es pas obligé (et c'est même mieux, je pense) de ne ps mettre de clé primaire. L'association des deux clés étrangères suffit.


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 04-04-2006 à 16:35:13    

Merci,
 
je suis entrain de remplir les tables, on verra si ca fonctionne demain car j'ai pleinde boulot qui vient de me tomber dessus :(
 
merci encore pour tes conseils

Reply

Marsh Posté le 04-04-2006 à 16:35:13   

Reply

Marsh Posté le 06-04-2006 à 10:50:42    

Help!!!
 
j'arrive pas à écrire la requete qui me permetterait d'afficher que tel utilisateur appartient à tels listes (listes foot, direction..)
 
Pour savoir qui est dans la liste foot, j'ai fait ca mais j'arrive pas à faire l'inverse :pfff:  
 
SELECT util_nom , util_prenom , listdiff_nom  
FROM utilisateurs , listdiff , liaison
WHERE util_num = liaison_util
AND liaison_listdiff = listdiff_num
AND listdiff_nom = 'foot' ;


Message édité par Brigitte_Lahaie le 06-04-2006 à 11:12:37
Reply

Marsh Posté le 06-04-2006 à 11:18:59    

Il faut que tu mettes les noms des tables devant les champs dans le where...*
 
Du genre Where nomtable.monchamp = nomtable2.monchamp2


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 06-04-2006 à 11:29:57    

Comme ca?
 
SELECT util_nom , util_prenom , listdiff_nom  
FROM utilisateurs , listdiff , liaison
WHERE utilisateurs.util_num = liaison.liaison_util
AND liaison.liaison_listdiff = listdiff.listdiff_num
AND listdiff_nom = 'Informatique'

Reply

Marsh Posté le 06-04-2006 à 14:15:40    

Il manque la table après le dernier And...
 
As-tu essayé ?


---------------
Proverbe chinois: il vaut mieux apprendre à pêcher à un mendiant que de lui donner du poisson...
Reply

Marsh Posté le 06-04-2006 à 14:33:13    

Les deux requetes que j'ai mis précedement fonctionnent.
Mais tu as raison, dans la derniere, j'ai oublié un petit qqch :D  
 
Concernant la requete inverse, j'ai également pigé le truc et en plus, ca fonctionne aussi. :p  
 
Bon, il me reste plus qu'a faire quelques ajustement car je suis obligé de taper "FOOT" en majuscule pour que cela fonctionne et je preferais que ca ne soit pas sensible aux majuscules et minuscules.
 
Il me reste aussi à integrer cela dans une page web mais je sais pas vraiment comment faire. En meme temps, j'ai pas encore cherché :whistle:


Message édité par Brigitte_Lahaie le 06-04-2006 à 14:33:49
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed