Bonsoir Fae,
Vous avez fait un travail sérieux.
Observations :
Dans votre introduction, vous écrivez « algèbre relationnel », mais algèbre est un nom féminin.
Dans le travail à faire, on vous demande de présenter dans l’ordre, le MPD, le MLD et enfin le MCD. Autrement dit, on vous demande en quelque sorte d’effectuer une rétro-conception, ce qui est plutôt bizarre ! Dans un monde normal, on commence par fournir la liste des règles de gestion, celles-ci permettant de bâtir le MCD. Une fois celui-ci réputé valide, on en déduit le MLD. Le MPD est hors sujet dans la mesure où il est du ressort du DBA. Il n’y a pas de MPD « théorique », il dépend essentiellement du SGBD et varie donc énormément d’un SGBD à l’autre (choix des index de performance, du clustering, des table-spaces et de leur organisation (free space à prévoir, etc.), bref toutes choses mises en oeuvre dans les tréfonds de la soute. Commencer par le MPD n’a de sens que lorsque pour une application opérationnelle on dispose des CREATE TABLE, CREATE INDEX, etc., et qu’on change par exemple de SGBD, et encore, on devrait au moins disposer du MCD !
Votre MPD
Votre MPD est en fait un MLD. Il manque tous les objets physiques (index, table-spaces et autres).
Votre MLD
Votre MLD est conforme.
Votre MCD
Vous n’avez pas tenu compte de mes observations (post #19) ! Je rappelle que l’attribut id_avion n’a rien à faire dans l’entité-type VOL. Je rappelle que la patte connectant EMPLOYE et QUALIFIER est porteuse d’une cardinalité 0,N et non pas 1,N.
L’attribut type_avion a disparu dans QUALIFIER, ce qui invalide votre MCD !
Nouveau MCD
En fait, pour que votre MCD puisse donner lieu au MLD qui vous a été proposé (cf. votre 1er post), il va falloir le dégrader et le ramener à celui qui figure ci-dessous, où l’entité-type TYPE_AVION (dont j’ai fait mention dans le post #6) voit le jour, mais sous forme d’entité-type fictive (nom mis entre parenthèses dans le contexte Looping), c’est-à-dire ne donnant pas lieu à table dans le MLD :
ACCESS
Du fait de ce qui précède, la génération pour ACCESS proposée dans le post #19 devient caduque. Elle est à remplacer par la suivante :
Sub Create_Tables()
DoCmd.RunSQL "CREATE TABLE AVION(" & _
"id_avion INT," & _
"type_avion VARCHAR(16) NOT NULL," & _
"distance_croisiere INT NOT NULL," & _
"CONSTRAINT AVION_PK PRIMARY KEY(id_avion)" & _
");"
DoCmd.RunSQL "CREATE TABLE VOL(" & _
"n_vol INT," & _
"ville_dep VARCHAR(48) NOT NULL," & _
"ville_arr VARCHAR(48) NOT NULL," & _
"distance INT NOT NULL," & _
"heure_dep DATETIME NOT NULL," & _
"heure_arr DATETIME NOT NULL," & _
"id_avion INT NOT NULL," & _
"CONSTRAINT VOL_PK PRIMARY KEY(n_vol)," & _
"CONSTRAINT VOL_AVION_FK FOREIGN KEY(id_avion) REFERENCES AVION(id_avion)" & _
");"
DoCmd.RunSQL "CREATE TABLE EMPLOYE(" & _
"id_emp INT," & _
"nom_emp VARCHAR(48) NOT NULL," & _
"salaire_annuel INT NOT NULL," & _
"CONSTRAINT EMPLOYE_PK PRIMARY KEY(id_emp)" & _
");"
DoCmd.RunSQL "CREATE TABLE QUALIFICATION(" & _
"id_emp INT," & _
"type_avion VARCHAR(16)," & _
"CONSTRAINT QUALIFICATION_PK PRIMARY KEY(id_emp, type_avion)," & _
"CONSTRAINT QUALIFICATION_EMPLOYE_FK FOREIGN KEY(id_emp) REFERENCES EMPLOYE(id_emp)" & _
");"
End Sub
Pour exécution avec ACCESS :
Outils base de données > Visual Basic > Importer un fichier > le fichier créé par Looping
Au résultat :
Requêtes
J’ai jeté un coup d’oeil rapide à vos premières requêtes, ça a l’air correct. Evitez d’écrire « type − avion » (cf. Ra1), écrivez plutôt « type_avion ». Avec les espacements, votre symbole « − » prête à confusion, on le confondrait facilement avec l’opérateur algébrique « DIFFERENCE ». Pour mémoire, plutôt que
σQUALIFICATION(type_avion='A300'),
à la grande époque de cette algèbre relationnelle (il y a quarante ans) il était d’usage d’écrire de manière canonique
σtype_avion='A300' (QUALIFICATION)
mais c’est un détail...
Encore courage !
Partager