Tutoriel de Bases de Données Relationnelles

Tutoriel de Bases de Données Relationnelles

Accueil  > Supports pédagogiques > Annales > Ingénieurs > EI 06 corrigé

Corrigé du contrôle pour les EI 06/07

Institut National des Télécommunications

Contrôle des connaissances





Bases de données

Code : BD21

Date : 17/11/2006

Durée : 1h30

Coordonnateur : S. Tata

Documents autorisés: ceux distribués en cours

 

____________________________________________________

Avertissements

1/ Lisez attentivement le sujet.

2/ Les questions sont indépendantes les unes des autres.

3/ Essayez d'être clair et précis dans vos réponses.

4/ Soignez la présentation, dans la mesure du possible.

5/ Barème indicatif

Question 1 : 5 points (Q1 = 5 pts)

Question 2 : 4 points (Q2.1 = 2 pts, Q2.2 = 2 pts)

Question 3 : 5 points (Q3.1 = 2 pts, Q3.2 = 1 pts, Q3.3 = 2 pts)

Question 4 : 4 points (Q4.1 = 2 pts, Q4.2 = 2 pts)

Question 5 : 2 point


Une société de chemins de fer souhaite organiser au sein d’une base de données les informations concernant les voyages en trains entre ses gares. Pour cela, on a défini le schéma relationnel suivant :

Gare (nomGare, villeGare, adresse)

Train (noTrain, dateMiseService)

Wagon (noTrain, noWagon, dateMiseService, type, nbPlaces)

Voyage (noVoyage, noTrain, periodeDebut, periodeFin) 

Arrêt (noVoyage, nomGare, villeGare, num, dateArret, heureArret)

Les clés sont soulignées et les clés étrangères sont en gras.

La sémantique des diverses relations est la suivante :

Gare (nomGare, villeGare, adresse) : une gare est identifiée par un nom et une ville. Plusieurs gares peuvent avoir le même nom (exemple : Gare du Nord). Cependant, dans une même ville toutes les gares ont des noms différents. Une gare est caractérisée par une adresse.

Train (noTrain, dateMiseService) : un train est identifié par un numéro et caractérisé par une date de mise en service de sa locomotive.

Wagon (noTrain, noWagon, dateMiseService, type, nbPlaces) : un wagon est identifié par un numéro de wagon et le numéro du train auquel il appartient. Il est caractérisé par une date de mise en service, un type (« couchettes » ou « fauteuils ») et le nombre de places. noTrain est une clé étrangère sur la relation Train.

Voyage (noVoyage, noTrain, periodeDebut, periodeFin) : un voyage est identifié par un numéro. Il est assuré par un train (désigné par son numéro) pendant une période de validité définie par une date de début (periodeDebut) et une date de fin (periodeFin). Le voyage représente le trajet d’un train durant une période donnée. noTrain est une clé étrangère sur la relation Train.

Arrêt (noVoyage, nomGare, villeGare, num, dateArret, heureArret) : un arrêt est identifié par un numéro de voyage et les noms d’une gare et d’une ville. Il est caractérisé par un numéro (num=1 pour l’arrêt de la gare de départ, dateArret et heureArret correspondent dans ce cas à la date et l’heure de départ, num=2 pour la deuxième gare du voyage …). Un arrêt est également caractérisé par une date et une heure d’arrêt. noVoyage est une clé étrangère sur la relation VoyagenomGare et villeGare constituent une clé étrangère sur la relation Gare.

 

Question 1

En vous aidant des règles de passage d'une modélisation Entité/association à une modélisation relationnelle "à l'envers", proposer un schéma Entité/Association équivalent à ce schéma relationnel. Ce schéma devra comporter la description des entités (avec leurs propriétés), des entités faibles (s'il y a lieu), des associations (avec leurs propriétés) ainsi que les cardinalités minimum et maximum des associations binaires.

 

Corrigé

 

Question 2

Exprimer chacune des 2 questions suivantes, d'une part en algèbre relationnelle sous la forme d'un arbre algébrique, et d'autre part en SQL.

 (Q2.1) Quelles sont les trains (numéro de train) qui s’arrêtent à la gare de l’Est de Paris ?

                Corrigé

                SELECT noTrain

                FROM Voyage V, Arret A

WHERE V.noVoyage= A.noVoyage AND

nomGare =”Gare de l’Est” AND

villeGare =’Paris’

 

(Q2.2) Quelles sont les voyages (numéro, date et heure départ) dont la date de départ a lieu en 2006 ?

Remarque : vous supposerez que les opérateurs de comparaison classiques sont applicables aux types date. Il est donc possible d’écrire :

date > ‘01/01/2006’

                Corrigé

                SELECT noVoyage, dateArret, heureArrer

                FROM Voyage V, Arret A

WHERE V.noVoyage=A.noVoyage AND

dateArret  > =‘O1/01/2006’ AND

dateArret  < ‘O1/01/2007’ AND num=1

 

 

Question 3

Exprimer les 3 questions suivantes en SQL :

(Q3.1) Quel sont les trains (numéro de train) qui assurent des voyages dont le terminus (gare d’arrivée) est la gare Part Dieu à Lyon ?

                Corrigé

                SELECT noTrain

                FROM Voyage V, Arret A

WHERE V.noVoyage= A.noVoyage AND

nomGare =”Part Dieu”

 AND villeGare =’Lyon’  AND

 num = (SELECT max(num) FROM Arret A2 WHERE V.noVoyage= A2.noVoyage)

 

(Q3.2) Donner pour chaque train son numéro et le nombre de wagons qu’il comporte.

Corrigé

                SELECT noTrain, count(*)

                FROM Wagon

                GROUP by noTrain

 

(Q3.3) Donner le(s) train(s) (numéro de train) dont la capacité est maximale (qui comporte le plus de places)

Corrigé

                SELECT noTrain

                FROM Wagon W

                GROUP by noTrain

                HAVING sum (nbPlaces) >=ALL (SELECT sum(nbPlaces) FROM Wagon GROUP BY noTrain)

Question 4

Exprimer les 2 questions suivantes en algèbre relationnelle ou en SQL :

(Q4.1) Quels sont les trains (numéro et date de mise en service) qui ne comportent pas de wagon de type « couchettes » ?

Corrigé

                SELECT noTrain, dateMiseService

                FROM, Train T

                MINUS

                SELECT T.noTrain, T.dateMiseService

FROM Train T, Wagon W

                WHERE T.noTrain=W.noTrain AND

                                W.type= "couchettes"

 

(Q4.2) Quels sont les gares (nom et ville de la gare) là où tous les voyages s’arrêtent ?

Corrigé

                SELECT nomGare, villeGare

                FROM Voyage V, Arret A

WHERE V.noVoyage = A.noVoyage

GROUP BY nomGare, villeGare

HAVING count(*) = (SELECT count(*)  FROM Voyage)

 

Question 5

Donner l’ordre SQL de création de la relation Wagon sachant que

-          noTrain et noWagon sont des entiers

-          dateMiseService est un attribut de type DATE

-          type est une chaine de caractères de taille 10 dont les valeurs ne peuvent être que « couchettes » ou « fauteuils »

-          nbPlaces est un entier positif

-          noTrain et noWagon constituent la clé de la relation

-          noTrain est clé étrangère sur la relation Train

 

Corrigé

                CREATE TABLE Wagon (

                                                noTrain INTEGER,

                                                noWagon INTEGER,

                                                dateMiseService DATE,

                                                nbPlaces INTEGER CONSTRAINT cnbPlaces CHECK (nbPlaces >=0),

                                                type VARCHAR(10) CONSTRAINT ctype CHECK (type IN (‘couchettes’,’ fauteuils’)),

                )

                ALTER TABLE Wagon ADD  PRIMARY KEY (noTrain, noWagon)

                ALTER TABLE Wagon ADD CONSTRAINT

cleEtrangere FOREIGN KEY (noTrain) references Train(noTrain));

               

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