IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Décisions SGBD Discussion :

Restructuration de la BD


Sujet :

Décisions SGBD

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut Restructuration de la BD
    Bonjour à tous,

    Je suis en train d'étudier un peu la réalisation de base de données. Une question qui m'est posée me laisse un peu perplexe...

    Soit :
    EMPLOYE (NoEmp, NomEmp, NoDept, NoProj)
    -Un employé est affecté à un et un seul département et ne travaille que sur un et un seul projet.
    DEPARTEMENT (NoDept, NomDept, Chef)
    -Le chef du département est lui même un employé affecté au département
    PROJET (NoProj, NomProj, Budget)

    Si l'on souhaite autoriser le fait qu'un employé travaille sur plusieurs projets, cela nécessite la restructuration de la BD. Seulement il faut préserver l'ancienne vue des données afin d'assurer la continuité de l'exploitation de toutes les applications fondées sur la structure originale. Et aussi prendre en compte la nouvelle procédure pour construire de nouvelles applications.

    Je souhaiterais savoir quelles sont les étapes effectuées par l'administrateur pour réaliser la restructuration de la BD. Et quelles les requêtes SQL pour chaque étape.

    J'ai modélisé la BD sous phpmyadmin pour y tester mes requêtes, évidement si j'essaie d'affecter plusieurs projets à un employé, une erreur de duplicate entry m'est renvoyée à cause de la clé primaire de employé qui se retrouve dupliquée.

    J'ai donc pensé à créer une nouvelle table réunissant NoEmp et NoProj avec comme clé primaire l'union des deux, comme cela:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Create Table PROJET_EMP(
    	NoEmp number(5),
    	NoProj number(5),
    	Constraint PK_PROJET_EMP PRIMARY KEY (NoEmp ,NoProj)
    );
    Mais bon je suis un peu douteux et je ne pense pas que ce soit suffisant...

    Merci pour votre aide!

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,


    D'un point de vue conceptuel (MCD) :

    Employé-0,n-------Affecté-------0,n-Projet

    D'un point de vue physique (MPD) :
    Employé (id_emp, nom_emp, ...)
    Projet(id_pro, nom_pro, ....)

    R_EMP_PRO(#id_pro, #id_emp)


    Maintenant on peut aussi pousser un peu plus loin et introduire une notion de temps si nécessaire.
    Ceci devra figurer dans la table R_EMP_PRO (notion de date de début / date de fin + trigger pour gérer les cas non voulus)


    Après ceci il faudra, bien-sur, supprimer la colonne qui référence la table projet dans votre table employé.

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut
    Je te remercie pour ta réponse

    Donc si je récapitule, d'abord je créé la nouvelle table ayant pour clé primaire l'union des clés primaires de EMPLOYÉ et PROJET puis je supprime la clé étrangère "noProj" dans EMPLOYÉ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    CREATE TABLE PROJET_EMP(
    	NoEmp number(5),
    	NoProj number(5),
    	Constraint PK_PROJET_EMP PRIMARY KEY (NoEmp ,NoProj)
            FOREIGN KEY (NoEmp) REFERENCES EMPLOYE(NoEmp),
            FOREIGN KEY (NoProj) REFERENCES PROJET(NoProj)
    );
     
    ALTER TABLE EMPLOYE
    DROP FOREIGN KEY NoProj;
    C'est bien ça?

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Si l'on souhaite autoriser le fait qu'un employé travaille sur plusieurs projets

    J'ai donc pensé à créer une nouvelle table réunissant NoEmp et NoProj avec comme clé primaire l'union des deux
    C'est bel et bien ce qu'il faut faire.

    L'étape suivante consiste à transférer les données actuelles (la colonne NoProj de la table EMPLOYE) dans la nouvelle table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO PROJET_EMP(NoEmp, NoProj)
    SELECT NoEmp, NoProj
    FROM EMPLOYE
    ORDER BY NoEmp, NoProj
    Il est ensuite possible de supprimer la colonne NoProj de la table EMPLOYE.

    Mais comme vos applications actuelles interrogent la table EMPLOYE qui contient la colonne NoProj, il faudrait que la vue qui reconstitue la table EMPLOYE utilisée actuellement porte le nom EMPLOYE, sauf à recoder toutes les applications existantes !

    Vous pourriez donc :
    1) Créer une nouvelle table nommée par exemple te_employe_emp (norme de nommage inspirée de celle de SQLPro) sans la colonne NoEmp.
    2) Y insérer toutes les données de la table actuelle EMPLOYE (sauf NoEmp bien sûr qui a déjà été transféré dans la table PROJET_EMP ! ).
    3) Supprimer la table EMPLOYE actuelle.
    4) Créer la vue EMPLOYE qui reconstitue l'ancienne table.

    Ainsi, les programmes ne sont pas perturbés.

    Le problème qui va se poser est de déterminer quel projet doit figurer dans la vue lorsqu'un employé travaille sur plusieurs projets. À vous de poser la question et de résoudre le problème.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2012
    Messages
    79
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2012
    Messages : 79
    Points : 62
    Points
    62
    Par défaut
    Excellent, je vous remercie pour votre réponse complète. J'ai bien cerné les étapes à suivre.

    Merci encore pour votre aide!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Restructuration de Réseau par où commencer ??
    Par lauradauphin dans le forum Développement
    Réponses: 3
    Dernier message: 05/07/2006, 09h18
  2. Restructurer l'import d'un fichier texte
    Par Deejoh dans le forum Access
    Réponses: 3
    Dernier message: 20/04/2006, 22h20
  3. Restructurer une base de donnée
    Par jejedelbarro dans le forum Bases de données
    Réponses: 3
    Dernier message: 11/04/2006, 16h42
  4. Réponses: 16
    Dernier message: 20/09/2005, 18h08
  5. Restructuration d'un BDD
    Par Andry dans le forum SQL
    Réponses: 3
    Dernier message: 18/12/2003, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo