Précédent   Forum des professionnels en informatique > Général Développement > Conception > Modélisation
Modélisation Forum d'entraide pour les diagrammes UML et les MCD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/09/2011, 14h08   #1
Nouveau Membre du Club
 
Chauvin Baptiste
Inscription : décembre 2009
Messages : 59
Détails du profil
Informations personnelles :
Nom : Chauvin Baptiste

Informations forums :
Inscription : décembre 2009
Messages : 59
Points : 26
Points : 26
Par défaut Multiples FK venant des mêmes tables

Bonjour tout le monde,

Je modifie actuellement une base existante pour une association qui gère de l'événementiel. Malheureusement je ne peux pas faire toutes les modifications que je veux, juste adapter l'existant pour s'adapter aux nouveaux outils. Je le précise car je n'ai pas eu l'autorisation de modifier la base à ma convenance... même si mes demandes étaient parfois justifiées. Ceci à donc compliquer un peu ma démarche.

Mon soucis est le suivant:
J'ai une table 'PROJETS' qui regroupe des données sur des événements en cours (comprendre festivals, concerts, expositions, etc..). Au début de l'association ces événements étaient organisés uniquement par des gens travaillant pour l'organisme, mais depuis quelques temps certains secteurs sont ouverts aux intervenants extérieurs. Dans la base existante une table regroupe donc les fiches des travailleurs internes, ces données sont spécifiques aux "employés" de l'association et les responsables ne souhaitent pas entrer de personnes extérieures dans cette table. Je me retrouve donc avec une table 'INTERNES' et une table 'EXTERNES' en fonctions que les intervenant sont, ou non , membre de l'association.

Je peux gérer cet état de fait même si je trouve que ce n'est pas très correcte comme façon de procéder. Par contre je me retrouve face à un problème dans la modélisation que je n'arrive pas à gérer. En effet pour chaque projet il y a des responsables de secteurs, par exemple un responsable 'Repro', un responsable 'Marketing', un responsable 'Finance', etc...

Ces personnes peuvent être internes ou externes, mais pas les deux à la fois, je dois donc faire en sorte que se soit l'un ou l'autre (voir schéma).



Cela fonctionne pour une personne (donc un responsable) l'héritage fait parfaitement son travail, mais comme je dois avoir 6 responsables par projets, ce système bloque. En effet j'ai essayé de mettre 6 héritages entre les deux tables 'INTERNES' et 'EXTERNES' qui pointent tous vers 'PROJETS' mais apparemment la base de données n'accepte pas ce genre de blague.

Je ne sais pas comment faire pour avoir mes 6 FK qui pointent soit vers 'INTERNES' soit vers 'EXTERNES', je ne suis pas assez calé au niveau modélisation.

Voyez comment faire pour gérer ce problème de FK ? (je rappèle que je ne peux pas fusionner les deux tables 'INTERNES' et 'EXTERNES')

Thanks
BLJ.CHAUVIN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2011, 14h34   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
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 : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Citation:
Je ne sais pas comment faire pour avoir mes 6 FK qui pointent soit vers 'INTERNES' soit vers 'EXTERNES', je ne suis pas assez calé au niveau modélisation.
Une clé étrangère qui fait référence à plusieurs tables, ce n'est pas possible ! Même avec deux tables !

Citation:
(je rappèle que je ne peux pas fusionner les deux tables 'INTERNES' et 'EXTERNES')
Tu ne peux pas fusionner les tables internes et externes mais tu peux peut-être mettre une table intermédiaire qui simulera le regroupement ?

L'héritage, que tu mentionnes dans ton message mais à mon avis pas à bon escient, se modélise ainsi :
INTERNE -(1,1)----Etre----0,1- PERSONNE
EXTERNE -(1,1)----Etre----0,1---------|

Normalement, ça donne les tables suivantes :
PERSONNE (prs_id, [colonnes communes à toutes les personnes])
INTERNE (int_id_personne, [colonnes spécifiques aux internes])
EXTERNE (ext_id_personne, [colonnes spécifiques aux externes])

Ensuite, puisque tu as plusieurs personnes à associer aux projets, tu as l'association suivante :
PERSONNE -0,n----Travailler----0,n- PROJET

Et donc une simple table associative à créer pour enregistrer toutes les personnes travaillant sur un projet.

La difficulté que tu vas probablement rencontrer est que tu as sans doute déjà des données dans les tables INTERNES et EXTERNES donc potentiellement des identifiants identiques dans les deux tables.

Tu vas peut-être alors devoir :
- soit mettre à jour les données pour éviter ces identifiants identiques ;
- soit créer une colonne ancien_id dans ces tables filles.

Voilà les pistes vers lesquelles je me tournerais ; difficile d'en dire plus sans connaître l'existant en matière de programmes utilisant la BDD et le nombre de requête que cela impliquerait de changer, le volume de données à éventuellement modifier...
Intéressant challenge en tout cas !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« 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 Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/09/2011, 14h39   #3
Expert Confirmé
 
Avatar de Richard_35
 
Homme
Inscription : juillet 2007
Messages : 2 178
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : juillet 2007
Messages : 2 178
Points : 2 807
Points : 2 807
Par défaut ==> nous nous sommes croisés, sur ce coup là, CinéPhil...

Bonjour BLJ.CHAUVIN,

Je ne connais pas bien le formalisme que tu utilises mais, comme la question m'intéresse, je me permets d'intervenir.

Je ne pense qu'il s'agisse, en l’occurrence, d'héritage mais, plutôt, d'une association à mettre en place, non ?

Car :
Interne ---(0,n)---[participe au projet]---(1,n)--- Projet
Externe ---(0,n)---[participe au projet]---(1,n)--- Projet
==> donc, association.

Suggestion :
Projets_Int_Ext(#id_projet, #id_Int_Ext, ...)

Avec :
Interne ---(0,1)---[participe au projet]---(1,1)--- Projet_Int_Ext
Externe ---(0,1)---[participe au projet]---(1,1)--- Projet_Int_Ext
Projet ---(1,n)---[possède les intervenants]---(1,1)--- Projet_Int_Ext

Avec le soutien de CinePhil et/ou Fsmrel... ou pas.
__________________
Dis-nous et à bientôt,
Richard.
----------------------------------------------------------------------------------------------
En cas de résolution, et afin de faciliter la tâche des bénévoles, merci de cliquer sur .
et permettent aux forumeurs de cibler leur recherche dans une discussion : n'hésitez pas à voter !
Richard_35 est déconnecté   Envoyer un message privé Réponse avec citation 01
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h19.


 
 
 
 
Partenaires

Hébergement Web