Tutoriel de Bases de Données Relationnelles

Tutoriel de Bases de Données Relationnelles

Accueil  > Supports pédagogiques > Annales > Manageurs > EM 97 corrigé

Corrigé du contrôle pour les EM 97/98

INSTITUT NATIONAL DES TELECOMMUNICATIONS

 

CONTROLE DES CONNAISSANCES

 

 

Bloc : Bases de données Code : GBD20

 

Durée : 1h30 Date : 10/06/98

 

Coordonnateur :

Mr Defude

 

____________________________________________________

 

Question 1

 

Donner le schéma Entité-Association correspondant à ce schéma relationnel. Vous préciserez bien les entités, entités faibles (s'il y a lieu), associations, propriétés, clés et cardinalités des associations.

Le formalisme utilisé importe peu s'il est lisible et précis. Epreuves est faible par rapport à Concours car la clé de Epreuves comprend celle de Concours. Pour une entité faible non seulement il faut indiquer qu'elle est faible (au moyen d'un rectangle double ici), mais aussi par rapport à qui elle est faible (en indiquant l'association supportant cette propriété par un double losange ici). Il est évident que les attributs de type clé étrangère (par exemple nomconc dans Ecoles) au niveau du schéma relationnel n'ont pas à être représentés sur le schéma Entité-Association comme attributs d'une relation (ils sont présents implicitement dans l'association qu'ils représentent). C'est une erreur très grave de faire cela.

Question 2

Donner la définition complète de la relation ECOLES dans le langage SQL d'Oracle. Par définition complète, on entend la définition des attributs et de leur domaine, mais aussi la définition de toutes les contraintes d'intégrité associées.

 

CREATE TABLE ECOLES (

NOMECOLE CHAR(20) PRIMARY KEY,

ADRESSE CHAR(100),

NBPLACES INTEGER CONSTRAINT CNBP

(CHECK NBPLACES BETWEEN 50 AND 200),

NOMCONC CHAR(20) CONSTRAINT CCONC

FOREIGN KEY ON CONCOURS (NOMCONC)

)

On aurait pu également rajouter une contrainte de non nullité sur l'attribut ADRESSE.

Question 3

Exprimer chacune des 3 questions suivantes en algèbre relationnelle.

 

(Q3.1) Donner le nom des candidats inscrits au concours lié à l'école de nom "INT Management".

(Q3.2) Donner le nom des épreuves du concours lié à l'école de nom "Telecom INT".

(Q3.3) Donner le nom des concours où il n'y a aucun inscrit.

 

Question 4

 

Exprimer les trois requêtes suivantes en SQL. Attention, la requête 3 est en fait une vue relationnelle.

 

(Q4.1) Donner la note maximale et la note minimale obtenues à l'épreuve de nom "informatique" du concours de nom "bon concours".

SELECT MIN(note), MAX(note)
FROM RESULTATS
WHERE nomconc='Bon concours' AND nomepreuve='informatique'

 

Il n'y a pas besoin de GROUP BY puisque l'on veut la réponse non pas pour toutes les épreuves ou tous les concours, mais pour un couple donné de concours et d'épreuve. On peut également utiliser plusieurs agrégats dans un même SELECT (ici MIN et MAX).

 

(Q4.2) Donner le numéro et le nom des candidats inscrits à tous les concours.

 

Deux solutions possibles selon que l'on utilise la double négation ou la solution par comptage.

Solution par double négation

SELECT C.nocand, C.nom
FROM CANDIDATS C
WHERE NOT EXISTS
(SELECT *
FROM CONCOURS CO
WHERE NOT EXISTS
(SELECT *
FROM INSCRITS I
WHERE I.nocand =C.nocand

AND I.nomconc=CO.nomconc

)

)

Solution par comptage :

SELECT C.nocand, C.nom

FROM CANDIDATS C, INSCRITS I

WHERE I.nocand=C.nocand

GROUP BY C.nocand, C.nom

HAVING COUNT(*) = (SELECT COUNT(*) FROM CONCOURS)

 

Il faut penser à grouper par nocand (clé de CANDIDATS) et par nom (puisque l'on veut le sélectionner). Chaque partition contient donc le nombre d'inscriptions d'un candidat que l'on va comparer au nombre total de CONCOURS.

 

(Q4.3) Donner la définition de la vue MOYENNE(nomconc, nocand, nom, note_moyenne) qui donne pour chaque concours (désigné par son nom) et chaque candidat (désigné par son numéro et son nom) la moyenne des notes obtenues sur toutes les épreuves du concours.

 

CREATE VIEW MOYENNE(nomconc, nocand, nom, note_moyenne)
AS
SELECT R.nomconc, C.nocand, C.nom, avg(note)
FROM RESULTATS R, CANDIDATS C
WHERE R.nocand=C.nocand
GROUP BY R.nomconc, C.nocand, C.NOM

Penser à rajouter le nom du candidat dans les critères de groupement.

Question 5

Soit le schéma relationnel M(NE, A, NB, NC, P, NP, C).

 

(Q5.1) Donner la(les) clé(s) de ce schéma relationnel.

 

NE dérive A, NB, NC, P

NC dérive P

NP dérive C

Seuls NE et NP ne sont pas en partie droite des DF donc ils appartiennent forcément à la clé. Ici c'est même la clé puisqu'ils dérivent tous les autres.

Le schéma a donc une clé qui est le couple d'attributs (NE, NP)

Attention, ce n'est pas la même chose de dire que (NE, NP) est une clé à deux attributs par rapport à NE clé et NP clé (donc deux clés) !

 

(Q5.2) Donner la forme normale de ce schéma et s'il n'est pas en 3FN proposer une décomposition en 3FN.

Le schéma est forcément en 1FN. Il est en 2FN si les DF de type clé vers attribut non clé sont élémentaires. Ce n'est pas le cas ici puisque la clé est (NE, NP) et donc par exemple la DF NE donne A n'est pas élémentaire.

S'il avait été en 2FN, il serait en 3FN si les attributs non clés ne dépendent pas d'autres attributs non clés. Ici les attributs clés sont NE et NP (attention on appelle attribut clé un attribut qui appartient à une clé et non pas un attribut qui est complètement une clé !). Il y a une dépendance entre NC et P qui ne sont pas des attributs clés donc le critère de 3FN n'est pas rempli.

En conclusion le schéma est en 1FN.

 

On peut mettre en oeuvre l'algorithme de décomposition pour obtenir un schéma en 3FN : (attention la solution n'est pas unique)

  • on décompose à travers la DF : NC -> P

on obtient R1(NC, P) il reste R(NE, A, NB, NC, NP, C)

  • on décompose selon la DF : NP -> C

on obtient R2(NP, C) il reste R(NE, A, NB, NC, NP)

  • on décompose selon la DF : NE -> A, NB, NC

on obtient R3(NE, A, NB, NC) et il reste R(NE, NP)

R(NE, NP) n'a pas d'intérêt puisqu'il n'y a pas de lien entre ces deux attributs. Il nous reste donc les relations R1, R2 et R3.

La clé de R1 est NC, celle de R2 est NP et celle de R3 est NE. Chacune est en 3FN donc le schéma est en 3FN.

[fil RSS du site]
Dernière mise à jour : 04/09/2009