[MySQL] comment configurer ma base pour mon projet [resolu]

comment configurer ma base pour mon projet [resolu] [MySQL] - SQL/NoSQL - Programmation

Marsh Posté le 24-12-2003 à 14:04:00    

salut,
 
je dois réaliser une petite gestion du personnel d'une entreprise en php.
 
mais je suis bloqué sur "comment configurer ma bdd ?"
 
Sachant, que je dois faire un espèce de classement de fiches sur les employés d'une entreprise. Mais l'entreprise comporte plusieurs départements et est cindée en plusieurs lieux. Et évidemment, certains employés font parties de plusieurs départements, d'autres travaillent sur des lieux différents et d'autres, les deux.
 
Je dois pouvoir faire des recherches sur qui travaille dans un ou des lieux précis, qui travaille dans un ou des départements précis, qui travaille dans un ou des lieux précis et départements précis ... et aussi ajouter/supprimer des employés.
 
chaque employé a une petite description : nom, prenom, tel, photo, ...
 
Merci de votre aide  :jap:


Message édité par Pizz le 26-12-2003 à 23:02:30

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-12-2003 à 14:04:00   

Reply

Marsh Posté le 24-12-2003 à 14:19:33    

Si tu ne sais pas faire un design de base de données, pourquoi ne pas chercher un truc tout fait?


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 24-12-2003 à 14:23:54    

Combi_A_Vendre a écrit :

Si tu ne sais pas faire un design de base de données, pourquoi ne pas chercher un truc tout fait?


 
parce que je ne sais pas qu'il y a des trucs tout fait ;)
 
et j'aimerai apprendre à faire un design "compliqué" :p
 
j'arrive à faire mon projet avec seulement une table si un employé correspondait à seulement un département et à seulement un lieu, mais si tout se croise, je ne vois pas comment je peux faire :(
 


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-12-2003 à 14:30:05    

Et bien c'est une bonne idée de vouloir faire ça tout seul. Bon courage. Tu dois apprendre à utiliser les bases de données.
http://sgbd.developpez.com/cours/#sgbd


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 24-12-2003 à 14:32:49    

Combi_A_Vendre a écrit :

Et bien c'est une bonne idée de vouloir faire ça tout seul. Bon courage. Tu dois apprendre à utiliser les bases de données.
http://sgbd.developpez.com/cours/#sgbd


 
merci :)
 
mais si qqn a une idée ou "la solution", je suis preneur  :jap:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-12-2003 à 14:48:32    

Pour resumer, il te faut :
- une table "employés" (avec un numéro de liste de départements)
- une table "départements"
- une table "listeDepartements"
 
La table listeDepartements contient les informations suivantes :
- numéro de liste
- Id de l'employé
- Id du service
 
Il n'y a pas de "solution", ton problème est trop vaste.
 
Tu connais le SQL?
 
vw


Message édité par Combi_A_Vendre le 24-12-2003 à 14:52:09

---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 24-12-2003 à 14:56:55    

+1 avec Combi.
 
Le problème d'un design est d'identifier les informations qui se répètent (exemple: les employés, les lieux, les départements), et d'identifier les relations possibles entre ces informations (on parle d'entités, ça se traduit par une table).  Il y a les relations 1 à 1, 1 à n, et n à n.
 
Lorsque qu'une relation implique n éléments d'un côté et n éléments de l'autre (donc n à n :D), on crée effectivement une table pour relier les deux, sinon (1 à n et parfois 1 à 1) on se contente d'un champ de référence (clé étrangère) dans la table côté 'n' (dans le cas d'une relation de type 1-n) avec l'info de la table côté '1' pour remplir ce champ. Le B.A.BA. du design quoi.
 
(ok c'est vite écrit mais je suis pressé :D)


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 24-12-2003 à 14:58:05    

tu pourrais employer des tables intersections
 
 
employé - département
employé - lieu
 
(à quoi correspond un lieu ?)


---------------
oui oui
Reply

Marsh Posté le 24-12-2003 à 15:20:39    

pour etre plus précis :
. les employés : toto, marc, jean, pierre
. les départements : éducation, direction, publicité
. les lieux : paris, moscou, rome
 
toto travaille dans l'éducation à paris.
marc travaille dans l'éducation et la publicité à moscou.
jean travaille dans la direction et dans l'éducation à rome et à paris.
pierre travaille dans la publicité à paris et à rome.
 
 
je connais les relations 1 à 1, 1 à n ... (j'ai fait une petite formation en access), mais je ne sais pas comment faire avec MySQL (je débute).
 
Je vais commencer par lire les tutos :)
 
 
sinon, le livre MySQL et PHP (O'Reilly) est un bon livre pour apprendre et comprendre à faire des tables comme j'en ai besoin pour mon petit projet ?


Message édité par Pizz le 24-12-2003 à 15:21:39

---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-12-2003 à 15:24:54    

en fait, je sais utiliser une simple base de données avec 2 tables : chanteurs et chansons par exemple. Qui chante quoi, qui a chanté ça ... ajout/suppression de chanteurs et/ou de chansons.
 
et c tout :)
 
si c'était aussi simple, sans "croisements" dans les tables, ça irait, mais là, je suis perdu.
 


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 24-12-2003 à 15:24:54   

Reply

Marsh Posté le 24-12-2003 à 15:38:36    

Tu sais faire les tables comme je te les ai donné?


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 24-12-2003 à 16:00:37    

Pour avoir la liste des services par personnes :
SELECT departement.nom FROM departement WHERE departement.id = ( SELECT departement.id FROM listeDepartement WHERE listeDepartement.IdEmploye = (SELECT employe.IdEmploye WHERE employe.nom = "toto" )))
 
Voilà, je ne suis pas certain de la syntaxe, mais c'est ce genre de requete.
Il y a peut etre moyen autrement (avec des join) mais je ne sais pas comment faire.


---------------
The best way to accelerate a computer running windows is at 9.8m.s-2
Reply

Marsh Posté le 25-12-2003 à 10:25:13    

Combi_A_Vendre a écrit :

Tu sais faire les tables comme je te les ai donné?


 
je vais faire tout ça demain, merci  :jap:  


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 26-12-2003 à 00:15:58    

un livre sur MySQL ne te servira pas à grand chose. il te faut apprendre à modéliser une bdd tout d'abord

Reply

Marsh Posté le 26-12-2003 à 01:14:19    

Pizz a écrit :


 
je vais faire tout ça demain, merci  :jap:  
 


 
euh perso, je commencerais pas scinder le problème.
 
 
La première que tu appelles employées.
tu crées une première table avec :
Idemployées
Nom  
Prénom  
etc... ( toutes les informations personnelles que tu veux)
 
deuxième table des services :
Idservice
Nom du service ou département
etc ... autre information
 
Troisième Table des affectations :
Idemployées
Idservice
 
( Dans ce cas tu autorises les doublons) Il te faut juste vérifier a l'enregistrement dans cette table que l'affectation Idemployées, Idservice n'exite pas comme doublons.
Pour une recherche c'est hyperfacile car tu recherches idemployées et il te ressort tout les idservices correspondant.
 
Perso si tu as beaucoup de données a géré, je splitterais aussi les tables en différente database.


---------------
Les touches de l'avenir
Reply

Marsh Posté le 26-12-2003 à 10:21:53    

Je taillerai ainsi (sans savoir trop, puisque les détails que tu donnes sont limités)
 
Table EMPLOYE
EMP_ID NUMBER(9) NOT NULL PRIMARY KEY
EMP_NOM VARCHAR2(40) NOT NULL
plus les autres détails...
 
Table DEPARTEMENT
DPT_ID NUMBER(3) NOT NULL PRIMARY KEY
DPT_NOM VARCHAR2(40) NOT NULL
plus les autres détails...
 
Table SITE
SIT_ID NUMBER(3) NOT NULL PRIMARY KEY
SIT_NOM VARCHAR2(40) NOT NULL
plus les autres détails
 
 
 
Les liaisons entre tables :
 
Table LOCALISATION
EMP_ID NUMBER(9) NOT NULL PRIMARY KEY
SIT_ID NUMBER(3) NOT NULL PRIMARY KEY
 
Table AFFECTATION
EMP_ID NUMBER(9) NOT NULL PRIMARY KEY
DTP_ID NUMBER(3) NOT NULL PRIMARY KEY
 
 
Chaque employé est dans N sites (enreg. dans localisation)
Chaque employé est dans N départements (enreg. dans affectation)
 
Ensuite tu peux greffer par exemple une table de détails sur l'employé, ou bien une table pour la hiérarchie, etc...
 
 
Bon ca m'amuse de faire ça, mais en théorie, t'as pas appris ça à l'école ?


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 26-12-2003 à 11:44:05    

bill.fr a écrit :

Je taillerai ainsi (sans savoir trop, puisque les détails que tu donnes sont limités)
 
...
 
Bon ca m'amuse de faire ça, mais en théorie, t'as pas appris ça à l'école ?


 
Non, je n'ai pas appris ça à l'école. C'est pourquoi j'aimerai apprendre :)
 
 
sinon, pour plus de détails :
 
il y a environ 150 employés, 20 départements, 10 sites.
pour les départements et les sites, je n'ai besoin que du nom.
et cet exemple qui reprend tous les cas :


. les employés : toto, marc, jean, pierre  
. les départements : éducation, direction, publicité  
. les lieux : paris, moscou, rome  
 
toto travaille dans l'éducation à paris.  
marc travaille dans l'éducation et la publicité à moscou.  
jean travaille dans la direction et dans l'éducation à rome et à paris.  
pierre travaille dans la publicité à paris et à rome.  


 
bon, je me lance  :)


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 26-12-2003 à 13:53:42    

merci à vous tous, je viens de comprendre comment je devais faire grâce aux tables intersections.
 
maintenant que j'ai compris, il ne reste plus qu'à programmer tout ça en php :) (ça c'est encore autre chose :o)
 


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 26-12-2003 à 14:06:47    

Thou arest welcome, dear old fellow...


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 26-12-2003 à 14:15:44    

avant de programmer, montre un peu ta base quand même :) ça t'évitera peut-être des surprises :)


Message édité par jagstang le 26-12-2003 à 14:15:59
Reply

Marsh Posté le 26-12-2003 à 14:23:01    

JagStang a écrit :

avant de programmer, montre un peu ta base quand même :) ça t'évitera peut-être des surprises :)  


 
question conne de débutant confirmé : comment on montre une base ?  :whistle:


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 26-12-2003 à 14:23:13    

+1 :) Montre toujours, ca peut servir. On aura sans doute des conseils
 
Edit : Montrer : décris tes tables (un peu comme ce que j'ai fait juste au dessus)


Message édité par bill.fr le 26-12-2003 à 14:23:56

---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 26-12-2003 à 14:27:11    

CREATE TABLE `employes` (
`emp_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
`emp_nom` VARCHAR(20) NOT NULL,  
`emp_mail` VARCHAR(20) NOT NULL
);  
 
CREATE TABLE `departements` (
`dep_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
`dep_nom` VARCHAR(20) NOT NULL
);  
 
CREATE TABLE `sites` (
`site_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,  
`site_nom` VARCHAR(20) NOT NULL
);  
 
CREATE TABLE `localisation` (
`emp_id` INT NOT NULL,  
`site_id` INT NOT NULL,
PRIMARY KEY (`emp_id`, `site_id`)
);  
 
CREATE TABLE `affectation` (
`emp_id` INT NOT NULL,  
`dep_id` INT NOT NULL,
PRIMARY KEY (`emp_id`, `dep_id`)
);


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le 26-12-2003 à 14:43:04    

Ca parait pas mal.
 
T'as bien saisi comment utiliser les tables de liaison entre les 3 principales ?
 
en gros :
 
EMPLOYES
1 - Dédé
2 - Gérard
3 - Paulo
 
DEPARTEMENTS
1 - Direction
2 - Production
3 - Commercial
 
SITES
1 - Lille
2 - Marseille
3 - Paris
 
Donc si Dédé est à Lille et Marseille, en production
LOCALISATION
EMP : 1 - SIT : 1
EMP : 1 - SIT : 2
 
AFFECTATION
EMP : 1 - DPT : 2
 
Par contre avec ce modèle de données tu ne peux pas dire que Dédé est en production à Lille et en Commercial à Marseille, les sites sont indépendants des départements.
 
Si tu veux pouvoir faire ça il faut une table qui regroupe les 2 autres :
 
Table OU_QUI_QUOI (j'ai pas d'idée de nom de table là)
EMP_ID, SIT_ID, DPT_ID
 
avec pour l'exemple cité
EMP : 1 - SIT : 1 - DPT : 2 (dédé à lille en production)
EMP : 1 - SIT : 2 - DPT : 3 (dédé à marseille en commercial)
 
Je suis clair ? Bref si sites et localisations sont indépendants, t'as tout bon, sinon repense le modèle...
(autrement dit si les employés ont les mêmes fonctions sur tous les sites auxquels ils sont associés c'est bon)


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
Reply

Marsh Posté le 26-12-2003 à 14:49:54    

merci :jap:
 
oui, j'ai bien saisi les tables de liaisions.
 
normalement, aucun employé n'a une autre fonction dans des sites différents (enfin c'est comme ça (pour le moment) dans le cahier des charges).
 
 
encore merci !
 


---------------
C'est quand on a le nez dans la tomate qu'on voit mieux la tomate !
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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