Plan de vol et sécurité aérienne⚓︎
D'après Centrale 2016
Ce problème s'intéresse à différents aspects relatifs à la sécurité aérienne et plus précisément au risque de collision entre deux appareils. Dans cet exercice, nous abordons l'enregistrement des plans de vol des différentes compagnies aériennes.
Afin d'éviter les collisions entre avions, les altitudes de vol en croisière sont normalisées. Dans la majorité des pays, les avions volent à une altitude multiple de \(1000\) pieds (un pied vaut 30,48 cm) au-dessus de la surface isobare à 1013,25 hPa. L'espace aérien est ainsi découpé en tranches horizontales appelées niveaux de vol et désignées par les lettres "FL" (flight level) suivies de l'altitude en centaines de pieds : "FL310" désigne une altitude de croisière de \(31\,000\) pieds au-dessus de la surface isobare de référence.
Eurocontrol est l'organisation européenne chargée de la navigation aérienne, elle gère plusieurs dizaines de milliers de vols par jour. Toute compagnie qui souhaite faire traverser le ciel européen à un de ses avions doit soumettre à cet organisme un plan de vol comprenant un certain nombre d'informations : trajet, heure de départ, niveau de vol souhaité, etc. Muni de ces informations, Eurocontrol peut prévoir les secteurs aériens qui vont être surchargés et prendre des mesures en conséquence pour les désengorger : retard au décollage, modification de la route à suivre, etc.
Nous modélisons (de manière très simplifiée) les plans de vol gérés par Eurocontrol sous la forme d'une base de données comportant deux tables :
-
la table
vol
qui répertorie les plans de vol déposés par les compagnies aériennes ; elle contient les colonnesid_vol
: numéro du vol (chaine de caractères) ;depart
: code de l'aéroport de départ (chaine de caractères) ;arrivee
: code de l'aéroport d'arrivée (chaine de caractères) ;jour
: jour du vol (de type date, affiché au formataaaa-mm-jj
) ;heure
: heure de décollage souhaitée (de type time, affiché au formathh:mi
) ;niveau
: niveau de vol souhaité (entier).
id_vol |
depart |
arrivee |
jour |
heure |
niveau |
---|---|---|---|---|---|
AF1204 | CDG | FCO | 2016-05-02 | 07:35 | \(300\) |
AF1205 | FCO | CDG | 2016-05-02 | 10:25 | \(300\) |
AF1504 | CDG | FCO | 2016-05-02 | 10:05 | \(310\) |
AF1505 | FCO | CDG | 2016-05-02 | 13:00 | \(310\) |
-
la table
aeroport
qui répertorie les aéroports européens ; elle contient les colonnesid_aero
: code de l'aéroport (chaine de caractères) ;ville
: principale ville desservie (chaine de caractères) ;pays
: pays dans lequel se situe l'aéroport (chaine de caractères).
id_aero |
ville |
pays |
---|---|---|
CDG | Paris | France |
ORY | Paris | France |
MRS | Marseille | France |
FCO | Rome | Italie |
Les types SQL date
et time
permettent de mémoriser respectivement un jour du calendrier grégorien et une heure du jour. Deux valeurs de type date
ou de type time
peuvent être comparées avec les opérateurs habituels (=
, <
, <=
, etc.). La comparaison s'effectue suivant l'ordre chronologique. Ces valeurs peuvent également être comparées à une chaine de caractères correspondant à leur représentation externe ('aaaa-mm-jj'
ou 'hh:mi'
).
- Écrire une requête SQL qui fournit le nombre de vols qui doivent décoller dans la journée du 2 mai 2016 avant midi.
- Écrire une requête SQL qui fournit la liste des numéros de vols au départ d'un aéroport desservant Paris le 2 mai 2016.
- Que fait la requête suivante ?
🗂️ Requête SQL
SELECT id_vol FROM vol JOIN aeroport AS d ON d.id_aero = depart JOIN aeroport AS a ON a.id_aero = arrivee WHERE d.pays = 'France' AND a.pays = 'France' AND jour = '2016-05-02'
- Certains vols peuvent engendrer des conflits potentiels : c'est par exemple le cas lorsque deux avions suivent un même trajet, en sens inverse, le même jour et à un même niveau. Écrire une requête SQL qui fournit la liste des couples
(Id_vol_1 , Id_vol_2)
des identifiants des vols dans cette situation.