CREATE TABLE tickets
( ticket_no
char( 13 ) NOT NULL,
-- Номер билета
book_ref
char( 6 ) NOT NULL,
-- Номер бронирования
passenger_id
varchar( 20 ) NOT NULL, -- Идентификатор пассажира
passenger_name text NOT NULL,
-- Имя пассажира
contact_data
jsonb,
-- Контактные данные пассажира
PRIMARY KEY ( ticket_no ),
FOREIGN KEY ( book_ref )
REFERENCES bookings ( book_ref )
);
Информация обо всех перелетах сохраняется в таблице
«Перелеты» (ticket_flights)
.
Перелет — это перемещение конкретного пассажира из одного города в другой на
конкретном авиарейсе. Перелеты вписываются в электронные билеты, при этом в
каждый электронный билет может быть вписано более одного перелета. Поэтому
первичным ключом будет комбинация двух атрибутов: «Номер билета» (ticket_no)
и «Идентификатор рейса» (flight_id). С каждым перелетом связан класс обслужива-
ния, значения этого атрибута подлежат проверке с помощью ограничения CHECK.
Точно такое же ограничение есть и в таблице «Места» (seats), в которой каждому ме-
сту в салоне конкретного типа самолета присваивается определенный класс обслу-
живания. Атрибут «Стоимость перелета» (amount) требует использования типа дан-
ных numeric, поскольку, как мы уже говорили ранее, денежные суммы должны запи-
сываться с определенной точностью, а гарантировать ее может только тип данных
numeric. Число цифр после запятой принимается равным двум.
Оба атрибута, составляющих первичный ключ, в свою очередь, сами являются внеш-
ними ключами.
CREATE TABLE ticket_flights
( ticket_no
char( 13 ) NOT NULL,
-- Номер билета
flight_id
integer NOT NULL,
-- Идентификатор рейса
Достарыңызбен бөлісу: |