NOT NULL, -- Номер билета flight_id integer NOT NULL, -- Идентификатор рейса fare_conditions varchar( 10 ) NOT NULL, -- Класс обслуживания amount numeric( 10, 2 ) NOT NULL, -- Стоимость перелета CHECK ( amount >= 0 ), CHECK ( fare_conditions IN ( 'Economy', 'Comfort', 'Business' ) ), PRIMARY KEY ( ticket_no, flight_id ), FOREIGN KEY ( flight_id ) REFERENCES flights ( flight_id ), FOREIGN KEY ( ticket_no ) REFERENCES tickets ( ticket_no ) ); Последняя таблица нашей базы — это «Посадочные талоны» (boarding_passes).
Все атрибуты, представленные в ней, за исключением атрибута «Номер посадочного
талона» (boarding_no), вам уже известны из других таблиц. А номер посадочного
талона — это просто целое число, порядковый номер пассажира при регистрации би-
летов на конкретный рейс, поэтому тип данных выбирается integer.
Обратите внимание, что эта таблица имеет связь типа 1:1 с таблицей «Перелеты». Это
объясняется тем, что пассажир, купивший билет на конкретный рейс, при регистра-
ции получает только один посадочный талон. Конечно, если пассажир не явился на
регистрацию, он не получает талона. Поэтому число строк в таблице «Посадочные
талоны» может в общем случае оказаться меньше числа строк в таблице «Переле-
ты». Логично ожидать, что первичные ключи у этих двух таблиц будут одинаковы-
ми: они включают атрибуты «Номер билета» (ticket_no) и «Идентификатор рейса»
(flight_id). Поскольку таблица «Перелеты» все же является главной в этой связке
таблиц, то в таблице «Посадочные талоны» создается внешний ключ, ссылающийся
на нее. А поскольку тип связи между таблицами — 1:1, то внешний ключ совпадает с
первичным ключом.
Известно, что номер конкретного места в самолете пассажир получает при регистра-
ции билета, а не при его бронировании, поэтому атрибут «Номер места» (seat_no)
находится в таблице «Посадочные талоны», а не в таблице «Перелеты».
Нельзя допустить, чтобы на одно место в салоне были направлены два и более пас-
сажиров, поэтому создается уникальный ключ с атрибутами «Идентификатор рейса»
(flight_id) и «Номер места» (seat_no). Еще один уникальный ключ призван га-
рантировать несовпадение номеров посадочных талонов на данном рейсе, он вклю-
чает атрибуты «Идентификатор рейса» (flight_id) и «Номер посадочного талона»
(boarding_no).
114