Bonsoir,
Envoyé par
CinePhil
Règle de gestion :
Un client peut louer plusieurs DVD et un DVD peut être loué par plusieurs clients... mais pas à la même date !
MCD :
Client -0,n----Louer----0,n- DVD
Ici la date est un attribut porté par l'association Louer car les cardinalités maximales à n des deux côtés de l'association font qu'il y aura une table associative qui en découlera. Du coup la date n'est ni un attribut propre au client, ni propre au DVD mais bel et bien propre à la location et la date se retrouvera dans la table associative.
Les tables que vous proposez sont celles-ci :
Client (cl_id, cl_nom...)
DVD (d_id, d_titre...)
Louer (l_id_client , l_id_dvd, l_date)
Attention, il y a une différence sensible entre l’énoncé de la règle de gestion — selon laquelle le DVD n’étant pas quantique, il ne peut pas être emprunté simultanément par deux clients différents — et la contrainte exprimée par la clé de la table Louer.
En effet, cette clé exprime la contrainte suivante :
Un client ne peut louer qu’une seule fois un certain DVD :
1 2 3 4
| Louer {l_id_client, l_id_dvd, l_date}
c1 v1 j1
c2 v1 j1
c1 v1 j2 // pas permis |
Pour exprimer la contrainte selon laquelle deux clients ne peuvent pas emprunter le même DVD le même jour, au niveau tabulaire, la clé de la table Louer doit être composée de la paire {l_id_dvd, l_date} :
Louer (l_id_client, l_id_dvd, l_date)
Si au niveau du MCD on utilise la notation Entité/Relation, la représentation graphique correspondante est la suivante (Outil Power AMC) :
Le mickey porté par la patte connectant les entités-types Louer et DVD symbolise l’identification relative de l’entité-type (faible) Louer par rapport à l’entité-type (forte) DVD.
Le mickey porté par la patte connectant les entités-types Louer et Client symbolise une association banale entre les entités-types Louer et Client. Pour la petite histoire, Louer peut donc être qualifiée d’entité-type associative.
La transposition bestiale en Merise donne la représentation graphique suivante (Power AMC) :
La cardinalité 1,1, mise entre parenthèses et portée par la patte connectant les entités-types Louer et Client symbolise l’identification relative de l’entité-type (faible) Louer par rapport à l’entité-type (forte) DVD.
En utilisant une CIF (Merise 2), on en revient au (trop) traditionnel trio dans lequel on retrouve une entité-type Date :
Maintenant, il y a un certain nombre d’observations à faire.
1) Le client c2 peut emprunter au jour j2 = j1+1 le DVD v1 emprunté par le client c1 à j1 (et qui bien sûr ne l’a pas rendu) :
1 2 3
| Louer {l_id_client, l_id_dvd, l_date}
c1 v1 j1
c2 v1 j2 |
Autrement dit, Louer doit se lire : « location en cours » et il faudra interdire (par exemple par un trigger SQL) que cette situation ne se produise.
2) hugouu a évoqué le problème de la gestion des historiques. Évidemment, on doit (au niveau tabulaire) définir une table supplémentaire qui a priori a la structure suivante :
LouerHisto {l_id_client, l_id_dvd, l_date_debut, l_date_fin}
Là encore, la clé primaire n'est pas d'un grand secours, les chevauchements de dates peuvent se manifester tant et plus.
On est en réalité aux prises avec l’univers des données temporelles, dans lequel la première chose à faire — pour le cas qui nous intéresse — est de définir un type intervalle composé de deux éléments, la date de début et la date de fin. Par exemple, si un emprunt a eu lieu de la date d01 à la date d45 et un autre de la date d28 à la date d84, une valeur de la table LouerHisto pourra être :
1 2 3 4
|
LouerHisto {l_id_client, l_id_dvd, l_intervalle}
c1 v1 [d01:d45]
c2 v2 [d28:d84] |
Et la structure de la table sera la suivante :
LouerHisto {l_id_client, l_id_dvd, l_intervalle}
De clé :
{l_id_dvd, l_intervalle}
A charge du système de rejeter l’ajout d’une ligne telle que :
<c2, v1, [d28:d84]>
Tout ceci conduit en fait à étudier l’ouvrage commis par C.J. Date, Hugh Darwen et Nikos Lorentzos (pour lequel je me suis fendu d’un commentaire).
[ame=http://www.amazon.fr/Temporal-Data-Relational-Model-Investigation/dp/1558608559]Temporal Data and the Relational Model[/ame]
Attention, comme dirait Fernand Naudin, « Faut reconnaître, c’est du brutal »...
Partager