Correction de l'activité 4.0 : Schéma conceptuel EER de la base de données UNIVERSITE

Page 1 sur 3Lecteur de document UniversityLib

Correction de l'activité 4.0 : Schéma conceptuel EER de la base de données UNIVERSITE

Advanced Databases, Database Engineering · notes

Voir tous les documents en bases de données

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