Bonjour à tous,
Envoyé par
Richard_35
De l'inconvénient de traiter la structure des tables avant le modèle conceptuel...
Je suis bien d'accord avec Richard.
Envoyé par
Richard_35
Envoyé par
JPhi33
Désolé de ne pas être d'accord avec vous mais il me semble que ni la solution 1 ne peut pas convenir. Elle signifierait qu'un même commentaire peut s'appliquer à plusieurs films
==> cette remarque est traitée par :
Envoyé par
Vmolines
(avec une exclusivité de Comm_Id dans les tables FILM_COMMENTAIRE et ACTEUR_COMMENTAIRE)
==> qui signifie, si j'ai ben compris, la création d'un index unique sur #Comm_Id.
C'est l'interprétation de Richard pour cette contrainte. Je la comprends différemment : pour moi, elle signifie "un commentaire donné ne peut pas être à la fois un commentaire de film et un commentaire d'acteur". A vmolines de nous éclairer sur ce point.
Mais, soit. Partons de l'hypothèse retenue par Richard : un index unique sur #Comm_Id. On se restreint aux films, le raisonnement pouvant être appliqué aux acteurs par similitude.
Envoyé par
Richard_35
FILM_COMMENTAIRE= {#Film_Id, #Comm_Id} ==> index unique sur #Comm_Id
Dans cette hypothèse, une ligne de la table FILM_COMMENTAIRE ne peut référencer qu'une ligne de la table COMMENTAIRE (normal). Mais, puisqu'il y a un index UNIQUE sur #Comm_Id dans la table FILM_COMMENTAIRE, une ligne de la table COMMENTAIRE ne peut référencer qu'une ligne de la table FILM_COMMENTAIRE. Par rétro-ingénierie, en supposant pour l'instant que ces deux tables soient issues d'entités, on obtient le MCD :
[ FILM_COMMENTAIRE ]--1,1----( )----1,1--[ COMMENTAIRE ]
Concernant #Film_Id, une ligne de la table FILM_COMMENTAIRE ne peut référencer qu'une ligne de la table FILM. En revanche, une ligne de la table FILM peut référencer plusieurs lignes de la table FILM_COMMENTAIRE (pas d'index UNIQUE cette fois). Par rétro-ingénierie, on obtient le MCD :
[ FILM ]--0,n----( )----1,1--[ FILM_COMMENTAIRE ]
Le MCD global est donc :
[ FILM ]--0,n----( )----1,1--[ FILM_COMMENTAIRE ]--1,1----( )----1,1--[ COMMENTAIRE ]
La table FILM_COMMENTAIRE n'a pas de clé propre, seulement des clés étrangères. Par conséquent cette table doit être issue d'une association. On aurait donc le MCD suivant :
[ FILM ]--0,n----( FILM_COMMENTAIRE )----1,1--[ COMMENTAIRE ]
qui se traduit au niveau relationnel par une clé étrangère dans la table COMMENTAIRE... et l'inexistence d'une table FILM_COMMENTAIRE. C'est bien d'ailleurs la signification conceptuelle de l'index UNIQUE sur #Comm_Id dans FILM_COMMENTAIRE : un commentaire ne peut se rapporter qu'à un seul film.
En ajoutant la partie acteurs par similitude, on obtient au final ce MCD :
[ FILM ]--0,n----( FILM_COMMENTAIRE )----1,1--[ COMMENTAIRE ]--1,1----( ACTEUR_COMMENTAIRE )----0,n--[ ACTEUR ]
(l'association ACTEUR_COMMENTAIRE ne se dérive pas en table mais en clé étrangère dans la table COMMENTAIRE)
C'est là que vmolines doit nous éclairer sur le sens de l'exclusivité : un commentaire donné doit-il s'appliquer à la fois à un film et à un acteur ? Si c'est oui, on en reste là. Si c'est non, alors le MCD qui en découle est celui de mon précédent post.
1 2 3 4 5 6
|
[ FILM ]--0,n----( )----0,1-+
| |
x [ COMMENTAIRE ]
| |
[ ACTEUR ]--0,n----( )----0,1-+ |
Avec des cardinalités 0,1 il n'y a plus, cette fois, de clés étrangères dans la table COMMENTAIRE mais des tables de lien (les tables disparues réapparaissent) :
FILM_COMMENTAIRE(#Film_Id, #Comm_Id)
ACTEUR_COMMENTAIRE(#Acteur_Id, #Comm_Id)
A noter que la clé de ces tables est #Comm_Id. #Film_Id et #Acteur_Id sont des clés étrangères non identifiantes... ce qui suffit à garantir l'unicité de #Comm_Id. Quelle coïncidence !
A noter aussi que ce modèle permet de lier COMMENTAIRE à d'autres entités (réalisateur, scénariste, etc.)
Partager