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



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

Глава 5. Основы языка определения данных
внешние ключи состояли только из атрибута flight_id.
Существует и естественный уникальный ключ, состоящий из двух атрибутов: номер
рейса (flight_no) и время вылета по расписанию (scheduled_departure). Для
него нам придется создать уникальный ключ, чтобы избежать дублирования значе-
ний: очевидно, что в один и тот же момент времени не могут выполняться два (и бо-
лее) рейса, имеющие один и тот же номер.
Обратите внимание, что для атрибутов, имеющих смысл даты/времени, выбран тип
данных timestamptz, т. е. временная отметка с указанием часового пояса. Это важ-
но, т. к. перелеты могут совершаться между городами, находящимися в разных часо-
вых поясах, а время вылета и время прилета указываются местные.
Поясним смысл каждого из трех ограничений CHECK. Первое ограничение говорит
о том, что время прилета по расписанию должно быть больше времени вылета по
расписанию. Это представляется очевидным, т. к. длительность полета всегда больше
нуля.
Второе ограничение CHECK задает множество допустимых значений атрибута
status следующим списком:
– Scheduled — рейс доступен для бронирования (это происходит за месяц до плано-
вой даты вылета, а до этого запись о рейсе не существует в базе данных);
– On Time — рейс доступен для регистрации (за сутки до плановой даты вылета) и
не задержан;
– Delayed — рейс доступен для регистрации (за сутки до плановой даты вылета), но
задержан;
– Departed — самолет уже вылетел и находится в воздухе;
– Arrived — самолет прибыл в пункт назначения;
– Cancelled — рейс отменен.
Третье ограничение более сложное. Его можно условно разделить на две части, соеди-
ненные логической операцией «ИЛИ». Первая часть говорит о том, что если самолет
еще не прилетел
(т. е. значение actual_arrival не определено), то фактическое вре-
мя вылета нас, образно говоря, не интересует. Самолет мог еще не вылететь или уже
вылететь. Но даже если он уже и вылетел, и значение атрибута actual_departure
отлично от NULL, то все равно сравнить его со значением атрибута actual_arrival,
которое пока еще не определено, невозможно. Речь идет о сравнении вида > или <.
110


5.2. Создание и удаление таблиц
Вторая часть этого ограничения должна гарантировать, что если самолет уже при-
летел
, то, во-первых, фактическое время вылета должно быть отлично от NULL,
а во-вторых, фактическое время прилета должно быть больше фактического времени
вылета.
Просмотреть описание таблицы в базе данных можно так:


Достарыңызбен бөлісу:
1   ...   81   82   83   84   85   86   87   88   ...   256




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

    Басты бет