I N S T I T U T
S U P E R I E U R
INFORMATIQUE
ةـيــملاـعلإل يـلاـعلا دـهعمـلا
ISI
Année Universitaire 2020-2021
Mastère professionnel en logiciels libres - M1
Bases de données Avancées – Activité 4.0
R. ZAAFRANI, 30/11/2019
Correction de l'activité 4.0
Prenom
2e
Prenom
Nom
Famille
NoSS
DateNais
s
Sexe
NoRue
Rue
NoApt
Ville
Departement
Nom
PBureau
Rang
Salaire
PPhone
PERSONNE
d
Adresse
Code
Post
Niveau
PROFESSEUR
ETUDIANT
1
Faculte
Diplome
Annee
M
Diplomes
Niveau = 5
ETUD_DIP
N
SOUS
DOMINANTE
1
DR
N
NoSub
Titre
SUBVENTION
RESP_RECH
N
M
COMITE
N
N
BENEF
M
Admin
DateD
Publicité
Debut
Temps
Fin
1
PDT
1
M
APPARTIENT
N
ENSEIGNANT_CHERCHEUR
1
ENSEIGNE
N
Note
M
DOSSIER
N
INSCRIT
N
SESSION_COURANTE
1
N
DOMINANTE
1
Trim = Trim courant
et
Annee = Annee courante
SESSION
N
1
CS
NoS
Annee
Trim
NoC
CNom
CDesc
FACULTE
FD
1
N
DEPARTEMENT
1
FNom
Doyen
FBureau
DNom
DPhone
Bureau
DC
N
COURS
Schéma conceptuel EER de la BD UNIVERSITE
Ingénierie des bases de données – Activité 4.0
1
2) Le listing ci-dessous présente un ensemble de définitions de classes possibles en ODL pour la base de
données UNIVERSITE. Il existe généralement plusieurs façons de traduire un diagramme de schéma objet (ou
un diagramme de schéma EER) en classes ODL. Nous avons choisi la représentation la plus simple. Les types
d'entité sont traduits en classes ODL, et l'héritage est obtenu au moyen d'extensions. Mais il n'y a aucun moyen
direct de traduire les catégories (types union) ou de réaliser l'héritage multiple. Les classes Personne,
Professeur, Etudiant, et EtudDip ont respectivement les extensions personnes, professeurs, etudiants et
etudiants_dip. Professeur et Etudiant dérivent toutes deux de Personne, et EtudDip étend Etudiant. De ce fait,
on peut forcer la collection etudiants (et la collection professeurs) à être à tout moment un sous-ensemble de la
collection personnes. De même, la collection etudiants_dip sera un sous-ensemble de etudiants. En même
temps, les objets individuels de type Etudiant et Professeur hériteront des propriétés (attributs et relations) et
Publicité
des opérations de Personne, et les objets de type EtudDip hériteront de celles de Etudiant.
Les classes Departement, Cours, Session et SessionCourante sont de simples transpositions des types d'entités
correspondants. Mais la classe Note nécessite quelques explications. Elle correspond en effet à la relation M:N
qui existe entre les classe Etudiant et Session. La raison pour laquelle on a créé une classe séparée (au lieu d'une
paire de relations inverses) est qu'elle comprend un attribut de relation. En conséquence, la relation M:N est
associée à la classe Note, et il existe une paire de relations 1:N, l'une entre Etudiant et Note et l'autre entre
Session et Note. Ces deux relations sont représentées par les propriétés suivantes: sessions_terminees de
Etudiant, session et etudiant de Note, et etudiants de Session (voir listing F). Enfin, la classe Diplome sert à
représenter l'attribut composite multivalué diplomes de EtudDip.
Listing : Schéma ODL possible pour la base de données UNIVERSITE.
class Personne
(
extent personnes
key
{ attribute
attribute
attribute
attribute
attribute
short
} ;
noss )
struct PNom {string prenom, string deuxiemeprenom, string nomFamille} nom;
string noss;
date
datenaissance;
enum Genre {M,F}
struct Adresse{short no, string rue, short noappt, string ville, string dep, short codepost} adresse;
age() ;
sexe ;
string rang ;
float
salaire;
string bureau;
string tel;
class Professeur extends Personne ( extent professeurs)
{ attribute
attribute
attribute
attribute
relationship Departement
relationship set<EtudDip> conseille
relationship set<EtudDip> dans_comite_de
void
void
} ;
augmenter(in float augmentation);
promouvoir(in string nouveau_rang) ;
travaille_dans inverse
Departement :: a_professeurs;
EtudDip :: conseiller;
EtudDip :: comite;
inverse
inverse
extent Notes)
class Note (
{ attribute
relationship Session
relationship Etudiant
} ;
enum ValeursNotes {A, B, C, D, F, I, P} note;
session inverse
etudiant
Session :: etudiants;
inverse Etudiant :: sessions_terminees;
Publicité
Ingénierie des bases de données – Activité 4.0
2
annee;
string
class Etudiant extends Personne ( extent etudiants );
{ attribute
attribute Departement en_sous_dominante;
relationship Departement a_en_dominante
relationship set<Note>
relationship set<SessionCourante> inscrits_a
void
float
void
void
} ;
inverse
Departement :: a_etudiants_dominante;
sessions_terminees inverse Note :: etudiants;
inverse SessionCourante :: etudiants_inscrits;
changer_dominante(in string dnom) raises (dnom_not_valid);
MP() ;
sinscrire(in short nosession) raises (session_not_valid);
note_attribuee(in short nosession ; in ValeursNotes note) raises (Session_not_valid, note_not_valid);
class Diplome
{ attribute
attribute
attribute
} ;
string fac;
string diplome;
string an;
class EtudiantDip extends Etudiant ( extent
set<Diplome> diplomes;
{ attribute
Professeur
relationship
set<Professeur>
relationship
attribuer_conseiller(in string nom; in string prenom) raises (professeur_not_valid);
void
attribuer_comite(in string nom; in string prenom) raises (professeur_not_valid);
void
} ;
inverse Professeur:: conseille;
Professeur :: dans_comite_de;
etudiants_dip
conseiller
inverse
comite
)
departements key
dnom)
string
string
string
string
class Departement ( extent
{ attribute
attribute
attribute
attribute
attribute Professeur
relationship
relationship
relationship
Publicité
} ;
set<Professeur>
set<Etudiant>
set<Cours>
dnom;
dtel;
dbureau;
fac;
pdt;
a_professeurs
inverse
a_etudiants_dominante inverse
inverse
propose
Professeur :: travaille_dans;
Etudiant :: a_en_dominante;
Cours :: propose_par;
string
string
string
class Cours ( extent cours key nocours )
{ attribute
attribute
attribute
relationship set<Session>
relationship
} ;
dnom;
nocours;
description;
Departement propose_par
a_sessions
inverse
inverse
Session :: de_cours;
Departement:: propose;
enum
sessions)
class Session ( extent
{ attribute short nosession;
attribute string an;
attribute
relationship
relationship
} ;
class SessionCourante extends Session (extent sessions_courantes )
{ relationship set<Etudiant> etudiants inscrits
void
} ;
trimestre {printemps, ete, automne, hiver}trim;
set<Note>
Cours
etudiants
de_cours
inscrire_etudiant (in string noss) raises (etudiant_not-valid, session_pleine);
inverse
Etudiant:: inscrit_a;
inverse
inverse
Note:: session;
Cours:: a_sessions;
Ingénierie des bases de données – Activité 4.0
3