Novo mês, novos objetivos. Sua ajuda ajuda o projeto a avançar. 🖥️ Apoie o sqltest →
Código SQL copiado para a área de transferência

Banco de dados Bookings: esquema de companhia aérea, tabelas e exercícios de SQL

Bookings é o banco de demonstração do PostgreSQL sobre uma companhia aérea: voos entre 104 aeroportos, reservas, bilhetes e cartões de embarque. No SQLtest.online você consulta o banco direto no navegador: resolve exercícios com correção automática e executa suas próprias consultas no playground, sem instalar nada.

  • 8 tabelas e 4 views
  • 33.121 voos
  • 1.045.726 trechos de bilhetes
  • 52 exercícios de SQL

O que é o Bookings

Bookings é o banco de demonstração que a Postgres Professional publica para o aprendizado de PostgreSQL. Ele modela os voos de uma companhia aérea russa: rotas, aeronaves e seus mapas de assentos, reservas, bilhetes e cartões de embarque.

Esta cópia contém voos de julho a setembro de 2017. Os nomes de aeroportos e aeronaves ficam em JSONB, em inglês e russo, e as coordenadas dos aeroportos usam o tipo point. Por isso o banco é bom para praticar recursos específicos do PostgreSQL, JOINs e análises em tabelas grandes.

Diagrama ER

O diagrama mostra as tabelas do Bookings e as chaves estrangeiras entre elas. Clique para abrir em tamanho real.

Diagrama ER do banco de dados Bookings

O que há no banco

As tabelas se dividem em dois grupos.

Dados de referência

airports_data, aircrafts_data e seats: o mapa de assentos de cada modelo de aeronave.

Vendas e voos

bookings → tickets → ticket_flights ← flights, além de boarding_passes, emitidos no check-in.

O ponto principal: uma reserva pode incluir vários passageiros, e um bilhete pode cobrir vários voos. A ligação entre bilhetes e voos é ticket_flights, a maior tabela. As views aircrafts, airports, flights_v e routes mostram os mesmos dados de forma mais amigável.

Quantos dados há nas tabelas:

TabelaLinhasConteúdo
bookings262.788reservas
tickets366.733bilhetes, um por passageiro
ticket_flights1.045.726trechos de voo dos bilhetes
boarding_passes579.686cartões de embarque
flights33.121voos programados e realizados
airports_data104aeroportos
aircrafts_data9modelos de aeronaves
seats1.339assentos por modelo de aeronave

Estrutura das tabelas

Clique em uma tabela para ver suas colunas, uma linha de exemplo e as chaves.

Lista de tabelas

aircrafts_data - tabela de aeronaves.
  • aircraft_codeCódigo único para cada aeronave
  • modelNome do modelo da aeronave em inglês e russo no formato JSON
  • rangeAlcance de voo da aeronave em quilômetros
  • PRIMARY KEY, btree (aircraft_code)
aircraft_codemodelrange
1773{"en": "Boeing 777-300", "ru": "Боинг 777-300"}11100
airports_data - tabela de aeroportos.
  • airport_codeCódigo único para cada aeroporto
  • airport_nameNome do aeroporto em inglês e russo no formato JSON
  • cityCidade do aeroporto em inglês e russo no formato JSON
  • coordinatesCoordenadas do aeroporto como POINT(longitude, latitude)
  • timezoneNome do fuso horário do aeroporto
  • PRIMARY KEY, btree (airport_code)
airport_codeairport_namecitycoordinatestimezone
1YKS{"en": "Yakutsk Airport", "ru": "Якутск"}{"en": "Yakutsk", "ru": "Якутск"}(129.77099609375,62.0932998657227)Asia/Yakutsk
boarding_passes - tabela de cartões de embarque.
  • ticket_noNúmero do bilhete
  • flight_idIdentificador do voo
  • boarding_noNúmero do cartão de embarque
  • seat_noNúmero do assento
  • PRIMARY KEY, btree (ticket_no, flight_id)
  • UNIQUE KEY, btree (flight_id, boarding_no)
  • UNIQUE KEY, btree (flight_id, seat_no)
  • FOREIGN KEY (ticket_no, flight_id) REFERÊNCIAS ticket_flights(ticket_no, flight_id)
ticket_noflight_idboarding_noseat_no
100054352123513062512D
bookings - tabela de reservas.
  • book_refNúmero da reserva
  • book_dateData da reserva
  • total_amountCusto total da reserva
  • PRIMARY KEY, btree (book_ref)
book_refbook_datetotal_amount
100000F2017-07-05 00:12:00+00265700.00
flights - tabela de voos
  • flight_idID do voo
  • flight_noNúmero do voo
  • scheduled_departureHorário programado de partida
  • scheduled_arrivalHorário programado de chegada
  • departure_airportAeroporto de partida
  • arrival_airportAeroporto de chegada
  • statusStatus do voo
  • aircraft_codeCódigo da aeronave, IATA
  • actual_departureHorário real de partida
  • actual_arrivalHorário real de chegada
  • PRIMARY KEY, btree (flight_id)
  • UNIQUE KEY, 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 - tabela de assentos de aeronaves.
  • aircraft_codeCódigo da aeronave, IATA
  • seat_noNúmero do assento
  • fare_conditionsClasse de viagem
  • PRIMARY KEY, btree (aircraft_code, seat_no)
  • FOREIGN KEY (aircraft_code) REFERÊNCIAS aircrafts(aircraft_code) ON DELETE CASCADE
aircraft_codeseat_nofare_conditions
13192ABusiness
ticket_flights - relações entre bilhetes e voos.
  • ticket_noNúmero do bilhete
  • flight_idID do voo
  • fare_conditionsClasse de viagem
  • amountCusto da viagem
  • PRIMARY KEY, btree (ticket_no, flight_id)
  • FOREIGN KEY (flight_id) REFERÊNCIAS flights(flight_id)
  • FOREIGN KEY (ticket_no) REFERÊNCIAS tickets(ticket_no)
ticket_no flight_id fare_conditions amount
1000543215977630625Business42100.00
tickets - tabela de bilhetes.
  • ticket_noNúmero do bilhete
  • book_refNúmero da reserva
  • passenger_idID do passageiro
  • passenger_nameNome do passageiro
  • contact_dataInformações de contato do passageiro
  • PRIMARY KEY, btree (ticket_no)
  • FOREIGN KEY (book_ref) REFERÊNCIAS bookings(book_ref)
ticket_no book_ref passenger_id passenger_name contact_data
1000543200098706B0468149 604011VALERIY TIKHONOV{"phone": "+70127117011"}

Exemplos de consultas

Estas consultas mostram como os dados se relacionam. Copie qualquer uma e execute no playground.

Um bilhete e sua reserva: o passageiro e o valor da reserva.

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

Um voo e sua aeronave: o nome em inglês lido de uma coluna JSONB com ->>.

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

Tarifa e assento: do trecho do bilhete ao voo e ao cartão de embarque. O LEFT JOIN mantém os trechos sem cartão.

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

Exercícios de SQL por tema

Há 52 exercícios no banco Bookings, de consultas simples a análises sobre um milhão de linhas. As soluções são verificadas automaticamente em um PostgreSQL real. O número à direita é a quantidade de exercícios do tema; os pontos coloridos mostram a faixa de dificuldade.

Por onde começar

Os primeiros exercícios do banco Bookings:

  1. Obter dados de aeroportos
  2. Obter uma lista de aeroportos
  3. Encontrar aeronaves de longo alcance
  4. Encontrar aeronaves Boeing
  5. Voos de Domodedovo
  6. Lista de aeronaves de Domodedovo
  7. Obter Reservas por Data
  8. Análise de uso de aeronaves
  9. Tipos de Tarifas
  10. Aeronaves sem Classe Executiva

Todos os exercícios do Bookings →

Perguntas frequentes

Preciso instalar o PostgreSQL para usar o Bookings?

Não. Os exercícios e o playground do SQLtest.online executam as consultas nos nossos servidores, então basta um navegador. No playground, o Bookings está disponível no PostgreSQL 18.

Onde baixar o banco de demonstração Bookings?

A Postgres Professional o publica em vários tamanhos no seu site, junto com a descrição do esquema.

Por que alguns nomes aparecem entre chaves?

Os nomes de aeroportos, cidades e aeronaves são objetos JSONB com valores em inglês e russo. Use ->> 'en' para obter o texto em inglês ou consulte as views, que escolhem um idioma.