comment configurer ma base pour mon projet [resolu] [MySQL] - SQL/NoSQL - Programmation
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?
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é"
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
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
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. |
merci
mais si qqn a une idée ou "la solution", je suis preneur
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
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 ), 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é )
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 ?
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.
Marsh Posté le 24-12-2003 à 15:38:36
Tu sais faire les tables comme je te les ai donné?
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.
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
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
Marsh Posté le 26-12-2003 à 01:14:19
Pizz a écrit : |
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.
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 ?
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) |
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 :
|
bon, je me lance
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 )
Marsh Posté le 26-12-2003 à 14:06:47
Thou arest welcome, dear old fellow...
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
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 ?
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)
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`)
);
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)
Marsh Posté le 26-12-2003 à 14:49:54
merci
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 !
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
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 !