Nouveau mois, nouveaux objectifs. Votre aide fait avancer le projet. 🖥️ Soutenez sqltest →
Code SQL copié dans le presse-papiers

Base de données Bookings : schéma aérien, tables et exercices SQL

Bookings est la base de démonstration PostgreSQL d'une compagnie aérienne : vols entre 104 aéroports, réservations, billets et cartes d'embarquement. Sur SQLtest.online, vous l'interrogez directement dans le navigateur : vous résolvez des exercices corrigés automatiquement et exécutez vos propres requêtes dans le bac à sable, sans rien installer.

  • 8 tables et 4 vues
  • 33 121 vols
  • 1 045 726 segments de billets
  • 52 exercices SQL

Qu'est-ce que Bookings

Bookings est la base de démonstration que Postgres Professional publie pour apprendre PostgreSQL. Elle modélise les vols d'une compagnie aérienne russe : lignes, avions et plans de cabine, réservations, billets et cartes d'embarquement.

Cette copie contient les vols de juillet à septembre 2017. Les noms des aéroports et des avions sont stockés en JSONB en anglais et en russe, et les coordonnées des aéroports utilisent le type point. La base convient donc aussi bien aux spécificités de PostgreSQL qu'aux JOIN et à l'analyse sur de grandes tables.

Diagramme ER

Le diagramme montre les tables de Bookings et les clés étrangères qui les relient. Cliquez pour l'ouvrir en taille réelle.

Diagramme ER de la base de données Bookings

Contenu de la base

Les tables se répartissent en deux groupes.

Données de référence

airports_data, aircrafts_data et seats : le plan des sièges de chaque modèle d'avion.

Ventes et vols

bookings → tickets → ticket_flights ← flights, ainsi que boarding_passes, émises à l'enregistrement.

L'essentiel à retenir : une réservation peut comprendre plusieurs passagers, et un billet peut couvrir plusieurs vols. Le lien entre billets et vols est ticket_flights, la plus grande table. Les vues aircrafts, airports, flights_v et routes présentent les mêmes données sous une forme plus pratique.

Volume de données des tables :

TableLignesContenu
bookings262 788réservations
tickets366 733billets, un par passager
ticket_flights1 045 726segments de vol des billets
boarding_passes579 686cartes d'embarquement
flights33 121vols prévus et effectués
airports_data104aéroports
aircrafts_data9modèles d'avions
seats1 339sièges par modèle d'avion

Structure des tables

Cliquez sur une table pour voir ses colonnes, une ligne d'exemple et ses clés.

Liste des tables

aircrafts_data - table des avions.
  • aircraft_codeCode unique pour chaque avion
  • modelNom du modèle d'avion en anglais et en russe au format JSON
  • rangeAutonomie de l'avion en kilomètres
  • PRIMARY KEY, btree (aircraft_code)
aircraft_codemodelrange
1773{"en": "Boeing 777-300", "ru": "Боинг 777-300"}11100
airports_data - table des aéroports.
  • airport_codeCode unique pour chaque aéroport
  • airport_nameNom de l'aéroport en anglais et en russe au format JSON
  • cityVille de l'aéroport en anglais et en russe au format JSON
  • coordinatesCoordonnées de l'aéroport au format POINT(longitude, latitude)
  • timezoneFuseau horaire de l'aéroport
  • PRIMARY KEY, btree (airport_code)
airport_codeairport_namecitycoordinatestimezone
1YKS{"en": "Yakutsk Airport", "ru": "Якутск"}{"en": "Yakutsk", "ru": "Якутск"}(129.77099609375,62.0932998657227)Asia/Yakutsk
boarding_passes - table des cartes d'embarquement.
  • ticket_noNuméro de billet
  • flight_idIdentifiant du vol
  • boarding_noNuméro de carte d'embarquement
  • seat_noNuméro de siège
  • PRIMARY KEY, btree (ticket_no, flight_id)
  • UNIQUE CONSTRAINT, btree (flight_id, boarding_no)
  • UNIQUE CONSTRAINT, btree (flight_id, seat_no)
  • FOREIGN KEY (ticket_no, flight_id) REFERENCES ticket_flights(ticket_no, flight_id)
ticket_noflight_idboarding_noseat_no
100054352123513062512D
bookings - table des réservations.
  • book_refNuméro de réservation
  • book_dateDate de réservation
  • total_amountCoût total de la réservation
  • PRIMARY KEY, btree (book_ref)
book_refbook_datetotal_amount
100000F2017-07-05 00:12:00+00265700.00
flights - table des vols.
  • flight_idID de vol
  • flight_noNuméro de vol
  • scheduled_departureHeure de départ prévue
  • scheduled_arrivalHeure d'arrivée prévue
  • departure_airportAéroport de départ
  • arrival_airportAéroport d'arrivée
  • statusStatut du vol
  • aircraft_codeCode avion (IATA)
  • actual_departureHeure de départ réelle
  • actual_arrivalHeure d'arrivée réelle
  • PRIMARY KEY, btree (flight_id)
  • UNIQUE CONSTRAINT, btree (flight_no, scheduled_departure)
flight_id flight_no scheduled_departure scheduled_arrival departure_airport arrival_airport status aircraft_code actual_departure actual_arrival
11185PG01342017-09-10 06:50:00+002017-09-10 11:55:00+00DMEBTKScheduled319
seats - table des sièges d'avions.
  • aircraft_codeCode avion (IATA)
  • seat_noNuméro de siège
  • fare_conditionsClasse de voyage
  • PRIMARY KEY, btree (aircraft_code, seat_no)
  • FOREIGN KEY (aircraft_code) REFERENCES aircrafts(aircraft_code) ON DELETE CASCADE
aircraft_codeseat_nofare_conditions
13192ABusiness
ticket_flights - relations entre billets et vols.
  • ticket_noNuméro de billet
  • flight_idID de vol
  • fare_conditionsClasse de voyage
  • amountCoût du voyage
  • PRIMARY KEY, btree (ticket_no, flight_id)
  • FOREIGN KEY (flight_id) REFERENCES flights(flight_id)
  • FOREIGN KEY (ticket_no) REFERENCES tickets(ticket_no)
ticket_no flight_id fare_conditions amount
1000543215977630625Business42100.00
tickets - table des billets.
  • ticket_noNuméro de billet
  • book_refNuméro de réservation
  • passenger_idIdentifiant du passager
  • passenger_nameNom du passager
  • contact_dataInformations de contact du passager
ticket_no book_ref passenger_id passenger_name contact_data
1000543200098706B0468149 604011VALERIY TIKHONOV{"phone": "+70127117011"}
  • PRIMARY KEY, btree (ticket_no)
  • FOREIGN KEY (book_ref) REFERENCES bookings(book_ref)

Exemples de requêtes

Ces requêtes montrent comment les données sont reliées. Copiez-en une et exécutez-la dans le bac à sable.

Un billet et sa réservation : le passager et le montant de la réservation.

SELECT t.ticket_no, t.passenger_name, b.book_date, b.total_amount
FROM tickets t
JOIN bookings b ON b.book_ref = t.book_ref
ORDER BY t.ticket_no
LIMIT 3;
ticket_nopassenger_namebook_datetotal_amount
0005432000987VALERIY TIKHONOV2017-07-05 17:19:00+0012400.00
0005432000988EVGENIYA ALEKSEEVA2017-07-05 17:19:00+0012400.00
0005432000989ARTUR GERASIMOV2017-06-28 22:55:00+0024700.00

Un vol et son avion : le nom anglais lu dans une colonne JSONB avec ->>.

SELECT f.flight_no, f.departure_airport, f.arrival_airport,
       a.model ->> 'en' AS aircraft
FROM flights f
JOIN aircrafts_data a ON a.aircraft_code = f.aircraft_code
ORDER BY f.flight_id
LIMIT 3;
flight_nodeparture_airportarrival_airportaircraft
PG0405DMELEDAirbus A321-200
PG0404DMELEDAirbus A321-200
PG0405DMELEDAirbus A321-200

Tarif et siège : du segment de billet au vol et à la carte d'embarquement. Le LEFT JOIN garde les segments sans carte.

SELECT tf.ticket_no, f.flight_no, tf.fare_conditions, tf.amount, bp.seat_no
FROM ticket_flights tf
JOIN flights f ON f.flight_id = tf.flight_id
LEFT JOIN boarding_passes bp
       ON bp.ticket_no = tf.ticket_no AND bp.flight_id = tf.flight_id
ORDER BY tf.ticket_no, f.flight_id
LIMIT 3;
ticket_noflight_nofare_conditionsamountseat_no
0005432000987PG0242Economy6200.007A
0005432000988PG0242Economy6200.0010E
0005432000989PG0242Economy6200.0018E

Exercices SQL par thème

La base Bookings compte 52 exercices, des recherches simples jusqu'à l'analyse sur un million de lignes. Les solutions sont vérifiées automatiquement sur un vrai serveur PostgreSQL. Le nombre à droite indique combien d'exercices compte le thème ; les points colorés montrent la plage de difficulté.

Par où commencer

Les premiers exercices sur la base Bookings :

  1. Données des aéroports
  2. Liste des aéroports par ville
  3. Avions long-courriers
  4. Avions Boeing
  5. Vols de Domodedovo
  6. Avions ayant décollé de Domodedovo
  7. Obtenir les réservations par date
  8. Analyse d'utilisation des avions
  9. Types de tarifs
  10. Avions sans classe Affaires

Tous les exercices Bookings →

Questions fréquentes

Faut-il installer PostgreSQL pour utiliser Bookings ?

Non. Les exercices et le bac à sable de SQLtest.online exécutent les requêtes sur nos serveurs : un navigateur suffit. Dans le bac à sable, Bookings est disponible sous PostgreSQL 18.

Où télécharger la base de démonstration Bookings ?

Postgres Professional la publie en plusieurs tailles sur son site, avec la description du schéma.

Pourquoi certains noms sont-ils entre accolades ?

Les noms d'aéroports, de villes et d'avions sont des objets JSONB avec des valeurs en anglais et en russe. Utilisez ->> 'en' pour obtenir le texte anglais, ou interrogez les vues, qui choisissent une langue.