Расписание полетов БД Модель 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 ваша база данных может использовать индекс для ответа на этот вопрос без необходимости читать и анализировать каждую запись.
В более широком смысле, рейс - это не просто пункт отправления и пункт назначения в определенное время в определенный набор дней недели. Вот несколько вещей, с которыми должна справиться реальная база данных расписания полетов:
- Полеты имеют идентификатор авиакомпании
- Полеты есть у авиакомпании-авиакомпании, которая может отличаться от продавца (т.е. "код-акция")
- Полеты могут иметь несколько этапов (то есть несколько наборов отправлений и пунктов назначения под одним номером)
- Полеты, как определено системами планирования, имеют дни недели, как и ваша модель, но они также должны иметь дату начала и дату окончания для диапазона дат, в котором будет выполняться полет.
В зависимости от того, для чего предназначено ваше приложение, вам может потребоваться принять во внимание некоторые или все из них.