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.
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 :
| Table | Lignes | Contenu |
|---|---|---|
| bookings | 262 788 | réservations |
| tickets | 366 733 | billets, un par passager |
| ticket_flights | 1 045 726 | segments de vol des billets |
| boarding_passes | 579 686 | cartes d'embarquement |
| flights | 33 121 | vols prévus et effectués |
| airports_data | 104 | aéroports |
| aircrafts_data | 9 | modèles d'avions |
| seats | 1 339 | siè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
- 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_code | model | range | |
|---|---|---|---|
| 1 | 773 | {"en": "Boeing 777-300", "ru": "Боинг 777-300"} | 11100 |
- 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_code | airport_name | city | coordinates | timezone | |
|---|---|---|---|---|---|
| 1 | YKS | {"en": "Yakutsk Airport", "ru": "Якутск"} | {"en": "Yakutsk", "ru": "Якутск"} | (129.77099609375,62.0932998657227) | Asia/Yakutsk |
- 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_no | flight_id | boarding_no | seat_no | |
|---|---|---|---|---|
| 1 | 0005435212351 | 30625 | 1 | 2D |
- 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_ref | book_date | total_amount | |
|---|---|---|---|
| 1 | 00000F | 2017-07-05 00:12:00+00 | 265700.00 |
- 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 | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 1185 | PG0134 | 2017-09-10 06:50:00+00 | 2017-09-10 11:55:00+00 | DME | BTK | Scheduled | 319 |
- 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_code | seat_no | fare_conditions | |
|---|---|---|---|
| 1 | 319 | 2A | Business |
- 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 | |
|---|---|---|---|---|
| 1 | 0005432159776 | 30625 | Business | 42100.00 |
- 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 | |
|---|---|---|---|---|---|
| 1 | 0005432000987 | 06B046 | 8149 604011 | VALERIY 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_no | passenger_name | book_date | total_amount |
|---|---|---|---|
| 0005432000987 | VALERIY TIKHONOV | 2017-07-05 17:19:00+00 | 12400.00 |
| 0005432000988 | EVGENIYA ALEKSEEVA | 2017-07-05 17:19:00+00 | 12400.00 |
| 0005432000989 | ARTUR GERASIMOV | 2017-06-28 22:55:00+00 | 24700.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_no | departure_airport | arrival_airport | aircraft |
|---|---|---|---|
| PG0405 | DME | LED | Airbus A321-200 |
| PG0404 | DME | LED | Airbus A321-200 |
| PG0405 | DME | LED | Airbus 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_no | flight_no | fare_conditions | amount | seat_no |
|---|---|---|---|---|
| 0005432000987 | PG0242 | Economy | 6200.00 | 7A |
| 0005432000988 | PG0242 | Economy | 6200.00 | 10E |
| 0005432000989 | PG0242 | Economy | 6200.00 | 18E |
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 :
- Données des aéroports
- Liste des aéroports par ville
- Avions long-courriers
- Avions Boeing
- Vols de Domodedovo
- Avions ayant décollé de Domodedovo
- Obtenir les réservations par date
- Analyse d'utilisation des avions
- Types de tarifs
- Avions sans classe Affaires
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.