База данных «Аэрофлот»
Схема БД состоит из четырех таблиц:
Company (ID_comp, name)
Trip(trip_no, ID_comp, plane, town_from, town_to, time_out, time_in)
Passenger(ID_psg, name)
Pass_in_trip(trip_no, date, ID_psg, place)
Таблица Company содержит идентификатор и название компании, осуществляющей перевозку пассажиров. Таблица Trip содержит информацию о рейсах: номер рейса, идентификатор компании, тип самолета, город отправления, город прибытия, время отправления и время прибытия. Таблица Passenger содержит идентификатор и имя пассажира. Таблица Pass_in_trip содержит информацию о полетах: номер рейса, дата вылета (день), идентификатор пассажира и место, на котором он сидел во время полета. При этом следует иметь в виду, что
рейсы выполняются ежедневно, а длительность полета любого рейса менее суток;
время и дата учитывается относительно одного часового пояса;
время отправления и прибытия указывается с точностью до минуты;
среди пассажиров могут быть однофамильцы (одинаковые значения поля name, например, Bruce Willis);
номер места в салоне – это число с буквой; число определяет номер ряда, буква (a – d) – место в ряду слева направо в алфавитном порядке;
связи и ограничения показаны на схеме данных.
Нередко задают такой вопрос: “Почему в таблице Trip днём отправления/прибытия является 1900-01-01?”
В таблице Trip содержится только время отправления/прибытия, поскольку, согласно описанию предметной области, рейсы выполняются ежедневно. Присутствие даты объясняется тем, что в ранних версиях SQL Server не было отдельных типов данных для даты (DATE) и времени (TIME), которые появились только в версии 2008 года. Поэтому использовался тип DATETIME, соответствующий стандартному TIMESTAMP, включающему все составляющие штампа времени.
Что же касается конкретно даты 1900-01-01, то эта дата соответствует началу отсчета времени, т.е. нулю. Выполните запрос:
SELECT CAST(0 AS DATETIME);
[[ column ]] |
---|
[[ value ]] |
1900-01-01 00:00:00.000 |
Т.е. если ввести в столбец типа DATETIME только время, то датой этого значения станет 1900-01-01. В этом можно убедиться, явно приведя значение времени к типу DATETIME, например:
SELECT CAST('13:44:00' AS DATETIME);
[[ column ]] |
---|
[[ value ]] |
1900-01-01 13:44:00.000 |