CREATE TABLE flights
( flight_id
serial NOT NULL, -- Идентификатор рейса
flight_no
char( 6 ) NOT NULL, -- Номер рейса
scheduled_departure timestamptz NOT NULL, -- Время вылета по расписанию
scheduled_arrival
timestamptz NOT NULL, -- Время прилета по расписанию
departure_airport
char( 3 ) NOT NULL, -- Аэропорт отправления
arrival_airport
char( 3 ) NOT NULL, -- Аэропорт прибытия
status
varchar( 20 ) NOT NULL, -- Статус рейса
aircraft_code
char( 3 ) NOT NULL, -- Код самолета, IATA
actual_departure
timestamptz,
-- Фактическое время вылета
actual_arrival
timestamptz,
-- Фактическое время прилета
CHECK ( scheduled_arrival > scheduled_departure ),
CHECK ( status IN ( 'On Time', 'Delayed', 'Departed',
'Arrived', 'Scheduled', 'Cancelled' )
),
CHECK ( actual_arrival IS NULL OR
( actual_departure IS NOT NULL AND
actual_arrival IS NOT NULL AND
actual_arrival > actual_departure
)
),
PRIMARY KEY ( flight_id ),
UNIQUE ( flight_no, scheduled_departure ),
FOREIGN KEY ( aircraft_code )
REFERENCES aircrafts ( aircraft_code ),
FOREIGN KEY ( arrival_airport )
REFERENCES airports ( airport_code ),
FOREIGN KEY ( departure_airport )
REFERENCES airports ( airport_code )
);
В таблице предусмотрено три внешних ключа, которые ссылаются на таблицы «Са-
молеты» и «Аэропорты». В качестве первичного ключа используется так называемый
суррогатный ключ
, состоящий из одного атрибута — flight_id. Обратите внима-
ние, что тип данных этого атрибута — serial, т. е. значения целого типа для этого
атрибута будут извлекаться из последовательности. Суррогатный ключ — это уни-
кальный ключ, назначение которого — только идентифицировать строки в таблице.
Зачастую для него используются целочисленные значения. Такому ключу не соот-
ветствует никакое свойство никакой сущности реального мира. Это — абстракция,
позволяющая в ряде случаев упростить определения таблиц, например, за счет со-
кращения числа атрибутов во внешних ключах до одного. В нашей таблице «Рейсы»
суррогатный ключ как раз и служит для того, чтобы в таблицах, ссылающихся на нее,
109
|