Vous êtes sur la page 1sur 10

Université Ibn Zohr 2020/2021

Faculté des Sciences Agadir SMI5-LPII


Département Informatique Durée 1H30
Proposition de correction
Examen de Bases de données-Session normale
Cours
1) Définir ce qui est une vue et citer ses avantages.

Une vue est interface d’accès à une base de données. Elle est considérée comme une table
virtuelle. Cela veut dire que la vue n’a pas de contenu propre stocké en base de données.
Son contenu est visualisé par l’exécution de sa requête. Une vue est une requête dont la
définition est stockée en base de données.

Les avantages des vues incluent :


- Indépendance données/programmes ;
- Confidentialité des données ;
- Transparence dans l’accès aux données : schéma, répartition.

2) Donner la définition d’un index. Est ce qu’il a des inconvénients ?

Un index est une structure de base de données qui accélère la recherche et la récupération
des données.

Les inconvénients d’index comprennent :


- Un index nécessite un espace mémoire supplémentaire pour le stocker ;
- Un index ralentit les opérations de mise à jour dans la base de données : insertion,
suppression et modification. Toute mise à jour dans les champs indexés exige une
opération au niveau de l’index.

3) A quoi servent les mots 'with check option' dans la définition d'une vue ?

Les mots 'with check option' servent à contrôler les opérations de mise à jour à travers une
vue. La vue accepte uniquement la mise à jour des données qui peut afficher, c’est-à-dire
les données qui vérifient la condition de la vue.

QCM
Conserver dans (1) à (8) la ou les assertions justes.
1) Une base de données est dite relationnelle car
a) elle maintient des relations entre des entités.
b) elle utilise des opérateurs relationnels.
c) elle maintient des relations entre les tables.
2) La commande alter permet de supprimer
a) des colonnes.
b) des contraintes.
c) des tables.
3) SQL est un langage

Page 1 sur 10
a) procédural.
b) déclaratif.
c) orienté objets.
4) La contrainte de relation peut être exprimée par
a) chaque table a une clé primaire.
b) chaque table est une relation.
c) toute table dans la base de données est liée à au moins une autre table via une clé
étrangère.
5) Le mot check permet de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
6) Le mot unique permet de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
7) Les mots 'not null' permettent de définir
a) uniquement une contrainte colonne.
b) uniquement une contrainte table.
c) à la fois une contrainte et une contrainte table.
8) La commande revoke permet de supprimer
a) des privilèges des rôles.
b) des rôles des rôles.
c) des privilèges des utilisateurs.

Exercice

On donne les relations suivantes :


Avion (numAvion, type, annéeService, nbreHeuresVol),
Pilote (numPilote, nom, prénom, adresse, salaire, commission, dateEmbauche),
Vol (numVol, villeDépart, dateDépart, villeArrivée, dateArrivée)
Affectation (numVol, numPilote, numAvion, nbrePassagers).

Partie 1

1) Créer la table Affectation sans contraintes.

Création de la table Avion


create table Avion
(numAvion varchar(20) primary key,
type varchar(20),
anneeService number(4),
nbreHeuresVol number(10))
/

Page 2 sur 10
Création de la table Pilote
create table Pilote (
numPilote varchar(20) primary key,
nom varchar(20),
prenom varchar(20),
adresse varchar(50),
salaire number,
commission number,
dateEmbauche date)
/

Création de la table Vol


create table Vol(
numVol varchar(20) primary key,
villeDepart varchar(100),
dateDepart date,
villeArrivee varchar(100),
dateArrivee date)
/

Page 3 sur 10
Création de la table Affectation
create table Affectation
(numVol varchar(20),
numPilote varchar(20),
numAvion varchar(20),
nbrePassagers number(4))
/

2) Ajouter à Affectation la contrainte non nommée de clé primaire.

Alter table Affectation


add primary key(numVol,numPilote,numAvion)
/

3) Ajouter à Affectation une contrainte nommée de clé étrangère en spécifiant une action
référentielle.

Contrainte de référence sur la table Avion


Alter table Affectation
Add CONSTRAINT fkAffectationAvion
FOREIGN KEY(numAvion) REFERENCES Avion
ON DELETE CASCADE
/

Ajout des autres contraintes de références


Contrainte de référence sur la table Pilote
Alter table Affectation
Add CONSTRAINT fkAffectationPilote

Page 4 sur 10
FOREIGN KEY(numPilote) REFERENCES Pilote
ON DELETE CASCADE
/

Ajout des autres contraintes de références


Contrainte de référence sur la table Vol
Alter table Affectation
Add CONSTRAINT fkAffectationVol
FOREIGN KEY(numVol) REFERENCES Vol
ON DELETE CASCADE
/

4) Désactiver la contrainte de clé primaire avec annulation des contraintes qui en font
référence.

Alter table affectation


Disable primary key cascade
/

Une autre façon pour désactiver la contrainte :

Alter table affectation


Modify primary key disable cascade ;

Page 5 sur 10
On peut aussi le faire pour une des tables masters par exemple la table Avion.

Alter table Avion


Disable primary key cascade
/

Partie 2
Répondre par l’algèbre relationnelle puis en SQL aux requêtes suivantes :
1) Donner le numéro et le type des avions qui ont effectué des vols avec un nombre de
passagers supérieur à 200 (par vol).

Select numAvion, type


From Affectation natural join Avion
Where nbrePassagers > 200

2) Chercher les numéros des pilotes qui n’ont jamais participé au pilotage des avions ayant
effectué un vol à partir de la ville de Tanger.

Select numPilote
From Pilote
minus
select numPilote
from Affectation natural join vol
Where villeDepart='TANGER'

Page 6 sur 10
Une autre manière

Select numPilote
From Pilote
where numPilote not in (select numPilote
from Affectation natural join vol
Where villeDepart='TANGER')

3) Afficher par ordre décroissant du nombre de vols, le numéro d’avion et le nombre de vols
effectués par avion dont l'année de service est comprise entre 1990 en 1999.

select numAvion, count(numVol) as nbreVol


from Affectation natural join Avion
where anneeService between 1990 and 1999
group by numAvion
order by nbreVol desc

On peut aussi utiliser using

select numAvion, count(numVol) as nbreVol


from Affectation join Avion using(numAvion)
where anneeService between 1990 and 1999
group by numAvion
order by nbreVol desc
/

Page 7 sur 10
On peut aussi répondre par une jointure généralisée

select av.numAvion, count(numVol) as nbreVol


from Affectation af join Avion av on af.numAvion=av.numAvion
where anneeService between 1990 and 1999
group by av.numAvion
order by nbreVol desc

4) Donner le nom, le prénom de chaque pilote dont le nombre total de passagers transportés
est supérieur à 5000.

select nom, prenom, sum(nbrePassagers)


from Pilote join Affectation using(numPilote)
group by numPilote,nom, prenom
having sum(nbrePassagers)>=5000

5) Donner la liste des avions et les vols correspondants et éventuellement les avions qui n'ont
pas encore effectué de vol.

select *
from avion natural left join affectation

Une autre façon avec using

select *
from avion left join affectation using(numAvion)

Page 8 sur 10
En utilisant la jointure généralisée gauche

select *
from avion av left join affectation af on av.numAvion=af.numAvion

6) Chercher le numéro et le type d’avion qui a transporté le maximum de passagers (le


nombre total).

select numAvion,type, sum(nbrePassagers)


from Avion join Affectation using(numAvion)
group by numAvion,type
having sum(nbrePassagers)>=all(Select sum(nbrePassagers)
from Affectation group by numAvion)

7) Chercher les numéros des pilotes qui ont participé au pilotage de tous les avions.

Select numPilote
From Affectation
Group by numPilote
Having count(numAvion) = (select count(*) from Avion)

Page 9 sur 10
8) Chercher les couples de noms de pilotes ayant piloté le même avion.

Select p1.nom,p2.nom
From (pilote p1 join affectation a1 on p1.numPilote=a1.numPilote)
join (pilote p2 join affectation a2 on p2.numPilote=a2.numPilote) on
a1.numAvion=a2.numAvion
where p1.numPilote<p2.numPilote
/

9) Donner l’arbre algébrique de :


Les pilotes (nom et prénom) ayant effectué des vols à partir de la ville de Tanger avec
un avion dont l’année de service est 2010 et nombre de passagers >= 200.

Page 10 sur 10

Vous aimerez peut-être aussi