BDD : dilemme relationnel

Fermé
Stagy - 22 févr. 2008 à 14:51
 Stagy - 27 févr. 2008 à 11:11
Bonjour,

je réfléchis depuis quelque temps à la conception d'une base de données, et j'arrive aujourd'hui à un choix déterminant pour la suite.

Voici la situation : je dispose de deux tables, la table "Boulon" (Id_Boulon, .......) recensant les boulons, et la table "Machine" (Id_Machine, .....=)recensant les machines.
Un boulon peut être posé sur une machine à une date donnée, puis se retrouver le lendemain sur une autre machine, revenir le surlendemain sur la première, et également se retrouver dans la nature, c'est-à-dire fixé sur aucune machine.

Le but du jeu est de pouvoir suivre un boulon dans le temps.


Afin d'éviter l'entrée d'enregistrements redondants, j'ai deux conceptions possibles.

Je peux adopter la méthode conventionnelle, qui est de créer une table de jointure, que je pourrais nommer Boulon_sur_Machine, dont le schéma serait
Boulon_sur_Machine(Id_Boulon, Id_Machine, since).
Ainsi, il me suffit de me baser sur l'attribut maximal "since" pour connaitre la dernière affectation d'un boulon, et de me réferer aux enregistrements précédants avec le même Id_Boulon pour connaitre le passé de la pièce.
Seul problème : avec cette méthode, je ne peux considérer qu'un boulon revienne sur la même machine après avoir été sur d'autres, car cela se réferererait à un enregistrement forcément déjà existant dans la base (du fait de la clé primaire composée). je n'aurais donc d'autres solutions que d'écraser l'attribut since de cet enregistrement et de perdre une partie de l'historique.

J'ai donc imaginé une seconde méthode, mais qui ne me semble pas conventionnelle. Le schéma adopté serait le suivant :
Boulon_sur_Machine(Id_Boulon,since,Id_Machine).

Ainsi, bien qu'un boulon ne puisse pas se retrouver sur deux machines différentes à la même date (ce qui reste sensé d'après mon problème), j'ai néanmoins la possibilité de garder un historique plus détaillé d'un boulon, sans risque d'écrasement.
Cela dit, je vois peut-être mal actuellement, les possibles défauts d'une telle méthode.

A vous de juger !
Quelle méthode vous semble préférable, et pourquoi ?

1 réponse

TechAndCo Messages postés 252 Date d'inscription jeudi 3 mai 2007 Statut Membre Dernière intervention 4 octobre 2010 20
22 févr. 2008 à 15:46
Bonjour,

Solution simple: Ajoute l'heure en plus de la date :p

Un boulont B, sur une seule machine M à un instant T :), le boulont B sur une machine N à un instant T+1.

Un boulont ne peut être que sur une machine à la fois. Si tu laisse la date, ca signifie que ton boulont doit rester au moins 24h sur une machine avant d'être changé.

A bientot.
0
Bonjour TechAndCo,

le problème n'est pas là. J'avais déjà précisé que le fait qu'un boulon ne puisse pas changer de machine au bout de 24 heures restait pertinent.

En fait, le réel problème est de pouvoir faire en sorte qu'avec la première méthode conventionnelle qu'un boulon puisse revenir sur une ancienne machine à laquelle il avait déjà été affecté dans le passé, sans pour autant effacer l'enregistrement traçant cette ancienne affectation. or, avec la structure de clé primaire, ces deux enregistrements (le nouveau et l'ancien) auront les mêmes valeurs pour ces attriibuts uniques et non nuls, ce qui est incohérent.

La seconde méthode permet bien de mon point de vue de résoudre ce problème, mais j'ai un doute sur le respect de la 3FN dans ce cas.

Qu'en penses-tu ?
0