soit le diagramme de classe:
j'aimerais modéliser la contrainte suivante:
à une date donnée, un membre participe à une seule soutenance.
soit le diagramme de classe:
j'aimerais modéliser la contrainte suivante:
à une date donnée, un membre participe à une seule soutenance.
salut,
j'ai modélisé la contrainte en utilisant une association qualifié. voici le diagramme après modification:
la question qui se pose est la suivante:
comment transformer ce diagramme en un modèle relationnel.
Bonjour win_ubuntu,
Si on se situe au niveau relationnel (ou SQL), la situation doit être la suivante : une table, appelons-la PARTICIPATION, permet de brancher les tables MEMBRE et SOUTENANCE, tout en respectant la contrainte selon laquelle à une date donnée, un membre donné ne peut se trouver qu’à un seul endroit : c’est cette contrainte qui fait l'objet de la clé primaire de la table PARTICIPATION.
Code SQL :
Diagramme relationnel correspondant :CREATE TABLE MEMBRE ( MembreId INT NOT NULL , MembreNom VARCHAR(32) NOT NULL , CONSTRAINT MEMBRE_PK PRIMARY KEY (MembreId) ) ; CREATE TABLE SOUTENANCE ( SoutenanceId INT NOT NULL , SoutenanceDate DATE NOT NULL , SoutenanceLieu VARCHAR(32) NOT NULL , CONSTRAINT MEMBRE_PK PRIMARY KEY (SoutenanceId) , CONSTRAINT MEMBRE_AK UNIQUE (SoutenanceDate, SoutenanceLieu) ) ; CREATE TABLE PARTICIPATION ( MembreId INT NOT NULL , SoutenanceDate DATE NOT NULL , SoutenanceLieu VARCHAR(32) NOT NULL , CONSTRAINT PARTICIPATION_PK PRIMARY KEY (MembreId, SoutenanceDate) , CONSTRAINT PARTICIPATION_MEMBRE_FK FOREIGN KEY (MembreId) REFERENCES MEMBRE (MembreId) , CONSTRAINT PARTICIPATION_SOUTENANCE_FK FOREIGN KEY (SoutenanceDate, SoutenanceLieu) REFERENCES SOUTENANCE (SoutenanceDate, SoutenanceLieu) ) ;
Observez que la paire {SoutenanceDate, SoutenanceLieu} est la clé de référence de SOUTENANCE, le singleton {SoutenanceId} étant alors (malgré les apparences), ravalé au rang de clé de rechange (je dirais même que l’attribut SoutenanceId devient parasite...)
Le diagramme relationnel pertinent devient alors le suivant :
On fait le ménage en conséquence dans le code SQL :
CREATE TABLE MEMBRE ( MembreId INT NOT NULL , MembreNom VARCHAR(32) NOT NULL , CONSTRAINT MEMBRE_PK PRIMARY KEY (MembreId) ) ; CREATE TABLE SOUTENANCE ( SoutenanceDate DATE NOT null , SoutenanceLieu VARCHAR(32) NOT NULL , CONSTRAINT SOUTENANCE_PK PRIMARY KEY (SoutenanceDate, SoutenanceLieu) ) ; CREATE TABLE PARTICIPATION ( MembreId INT NOT NULL , SoutenanceDate DATE NOT null , SoutenanceLieu VARCHAR(32) NOT NULL , CONSTRAINT PARTICIPATION_PK PRIMARY KEY (MembreId, SoutenanceDate) , CONSTRAINT PARTICIPATION_MEMBRE_FK FOREIGN KEY (MembreId) REFERENCES MEMBRE (MembreId) , CONSTRAINT PARTICIPATION_SOUTENANCE_FK FOREIGN KEY (SoutenanceDate, SoutenanceLieu) REFERENCES SOUTENANCE (SoutenanceDate, SoutenanceLieu) ) ;
(a) Faites simple, mais pas plus simple ! (A. Einstein)
(b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
=> La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)
__________________________________
Bases de données relationnelles et normalisation : de la première à la sixième forme normale
Modéliser les données avec MySQL Workbench
Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.
merci infiniment fsmrel. bonne soirée
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager