Расписание полетов БД Модель SQL Server

Я пытаюсь создать модель БД в SQL Server для хранения расписаний рейсов (не в режиме реального времени), наконец-то я придумал модель с 2 БД, но не понял, какую из них выбрать для хранения расписаний.

Подход:1 Для каждого рейса храните расписания в одном столбце (123X56X) вместе с названием рейса, временем вылета, временем прибытия, источником, пунктом назначения. (123X56X) Это означает, что конкретный рейс доступен в воскресенье (1), понедельник (2), вторник (3), четверг (5) и пятницу (6).

Подход:2 Сохраните название рейса, время вылета, время прибытия, источник, пункт назначения в одной таблице и создайте новую таблицу отображения для расписаний.

Table1 - wk_days

wk_day_id   wk_day_short     wk_day_long
1              Sun             Sunday
2              Mon             Monday

Таблица2 - расписание полетов

flight_sch_id   flight_id   src_city_id dest_city_id    Depart_tm   Arrival_tm  Duration
1                 1           1            2              6:00        8:00        2:00

Table3 - flight_schedule_wk_days

flight_sch_id   wk_day_id   
1                  2           
1                  3
1                  4
2                  2
2                  3
2                  4

Пожалуйста, предложите, какой из них лучше?

1 ответ

Решение

База данных расписания полетов на самом деле немного сложнее в реальном мире, чем любой из ваших примеров. (Подробнее об этом чуть позже.)

Чтобы ответить на ваш вопрос: В целом, подход с использованием нормализованной базы данных - лучшая идея, особенно для транзакционной базы данных. Второй дизайн нормализован. Ваш первый вариант напоминает старые плоские файловые системы COBOL, такие как оригинальная система SABRE.

Использование нормализованного подхода делает ваши запросы намного проще и эффективнее. Выяснение того, какие рейсы выполняются во вторник, означает сканирование и анализ строк для каждой записи в варианте 1. В варианте 2 ваша база данных может использовать индекс для ответа на этот вопрос без необходимости читать и анализировать каждую запись.

В более широком смысле, рейс - это не просто пункт отправления и пункт назначения в определенное время в определенный набор дней недели. Вот несколько вещей, с которыми должна справиться реальная база данных расписания полетов:

  • Полеты имеют идентификатор авиакомпании
  • Полеты есть у авиакомпании-авиакомпании, которая может отличаться от продавца (т.е. "код-акция")
  • Полеты могут иметь несколько этапов (то есть несколько наборов отправлений и пунктов назначения под одним номером)
  • Полеты, как определено системами планирования, имеют дни недели, как и ваша модель, но они также должны иметь дату начала и дату окончания для диапазона дат, в котором будет выполняться полет.

В зависимости от того, для чего предназначено ваше приложение, вам может потребоваться принять во внимание некоторые или все из них.

Другие вопросы по тегам