Relation table compliquée

Fermé
tobeybboy - 5 mai 2009 à 14:17
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 - 5 mai 2009 à 15:01
Bonjour,

Je suis nouveau sur ce forum, et déjà une aide serait la bienvenue.

Je suis en train de concevoir une base de données pour un projet informatique. Pour faire simple, il s'agit de gérer un planning avec différentes taches.

J'ai créé mes différentes tables et établit les relations entre elles. Cependant, il y a un os que je n'arrive pas a résoudre:
j'ai une table intervention, qui pour une journée et un utilisateur reçoit une intervention. Cette intervention est de nature variable (j'ai créé une table nature_intervention : pose, SAV, dossier, etc...).
j'ai aussi une table pose, qui référence les indications de pose (id_pose, jour, nom, lieu...); ainsi qu'une table constat, qui référence les indications relatives au constat.

Le problème réside au fait qu'une intervention peut être soit une pose, soit un sav, soit un constat. La relation qui unit la table intervention et la table constat par exemple est de nature 0,1 - 0,n.
Je ne sais pas comment modéliser ça dans la base de données, quelle clé ajouter dans quelle table, etc

Merci de votre aide, j'espère avoir été assez clair.

2 réponses

sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
5 mai 2009 à 14:39
Salut,
Le problème réside au fait qu'une intervention peut être soit une pose, soit un sav, soit un constat.

1. tu peux créer 3 colonnes dans la table intervention: id_pose, id_constat et id_sav (des foreign keys vers les tables correspondantes). Une seule de ces colonnes sera utile pour une intervention donnée (les deux autres contenant des null)
2. à condition d'avoir le même type d'identifiant dans les tables sav, constat et pose (exemple: alpha sur 10 caractères), créer 2 colonnes: nature (de type smallint ou alpha(1), pour identifier la nature de l'intervention) et une autre colonne identifiant (elle ne sera pas foreign key car tu ne sauras pas vers quelle table parmi les 3). L'application se chargera du maintien de la cohérence de la base.
3. tu peux avoir un 3ème modèle où la table intervention possède une unique colonne id_intervention et les 3 autres tables ont la même colonne en foreign key vers intervention (autrement dit, les 3 autres tables "étendent" la table intervention ou bien "héritent" de celle-ci, en la complétant avec les informations nécessaires).

En fonction des autres contraintes techniques de ton programme tu choisiras la méthode qui te convient.

++
0
Merci beaucoup, je pensais à ta première option mais je ne savais pas si c'était judicieux. Je te suis reconnaissant vraiment.

Vivien
0
Juste un petit renseignement : si une pose se déroule sur plusieurs interventions? il va y avoir un problème nan?
0
sandul Messages postés 3927 Date d'inscription jeudi 22 mai 2008 Statut Membre Dernière intervention 8 octobre 2010 723
5 mai 2009 à 15:01
Disons que la pose P1 comporte 3 interventions successives, I1, I2 et I3. Avec le premier modèle (celui que tu privilégies), tu auras 3 lignes dans la table intervention:
I1 P1 ...
I2 P1 ...
I3 P1 ...

Donc c'est OK.
0