Учебное пособие Санкт-Петербург «бхв-петербург»


NOT NULL, -- Номер билета



Pdf көрінісі
бет89/256
Дата18.11.2022
өлшемі1.88 Mb.
#465124
түріУчебное пособие
1   ...   85   86   87   88   89   90   91   92   ...   256
sql osnovi yazika

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


5.2. Создание и удаление таблиц


Достарыңызбен бөлісу:
1   ...   85   86   87   88   89   90   91   92   ...   256




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет