powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных аэропорта
11 сообщений из 11, страница 1 из 1
База данных аэропорта
    #39137615
Chuvak13
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прикладываю схему, которая уже есть, но меня интересует несколько вопросов.

1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется
2. Рейс может быть беспосадочным или же с посадками. Если он с посадками, то как записывать аэропорты посадок?
3. Информация о клиенте может быть найдена с использованием "номера лояльности", если клиент его не имеет, то данные вводит сам
4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути . Так же клиент должен иметь свой id на каждую часть рейса.
5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса.

Не могу понять, как именно нужно переделать базу данных для выполнения заданий.
...
Рейтинг: 0 / 0
База данных аэропорта
    #39137684
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется
Материализуйте расписание храня не дни недели а сами рейсы на N месяцев/лет вперед
> Если он с посадками, то как записывать аэропорты посадок?
Вводите таблицу маршрут дочернюю к рейс
>Информация о клиенте может быть найдена с использованием "номера лояльности"
Клиет определяется по айди.
>4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути
см пункт 2
>5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса.
Нужна постановка задачи для багажа
...
Рейтинг: 0 / 0
База данных аэропорта
    #39137750
Serguei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chuvak13Прикладываю схему, которая уже есть, но меня интересует несколько вопросов.

1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется
2. Рейс может быть беспосадочным или же с посадками. Если он с посадками, то как записывать аэропорты посадок?
3. Информация о клиенте может быть найдена с использованием "номера лояльности", если клиент его не имеет, то данные вводит сам
4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути . Так же клиент должен иметь свой id на каждую часть рейса.
5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса.

Не могу понять, как именно нужно переделать базу данных для выполнения заданий.

1. в расписании у вас уже указаны даты в которые рейс летает- пожалуйста вычисляйте дни недели. Нет проблем
2. Я бы в таком случае рейс сделал составным 2 коротких "подрейса" и рейса, который в себе их объединяет (достаточно связь в рейсе саму на себя
3. не вижу проблем - ищите. Только не забудьте атрибут у клиента
4. я бы Связь между рейсом и заказом по другому сделал. Связал бы дату рейса с заказом, а для мест бы сделал таблицу один ко многим "Места в заказе" и туда бы из рейса связь (хочешь на каждый подрейс указывайте место, хочешь сразу на весь маршрут)
Странное требование что клиент должен иметь id на каждый подрейс - ну это как два рейса (подрейса) -два пассажира. почему и с 1 id не сделать.
5. связывайте багаж с местами в заказе только через промежуточную таблицу (там будет связь с "подрейсом")
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138094
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АВИАКОМПАНИЯ:

Нафига в Авиакомпании страна и город? Аэрофлот к какому городу относится?

Рейс может быть беспосадочным или же с посадками.
Это "с посадками" или с "пересадками" ?

Что такое Рейс? Это рейс с точки зрения авиакомпании или с точки зрения пасажира (билет) ?

Сейчас у тебя рейс - полная шняга, т.к. противоречит пункту 4 ТЗ.

РЕЙСЫ

По нормальному я бы назвал Route (рейс) или Ticket (билет для пасажира) который состоит из Unit'ов (или Leg'ов).

Ticket (Билет для пасажира):

Выкинуть авиакомпании. Т.к. один билет может состоять из Unit'ов разных авиакомпаний (например авиакомпании).
Аэропорт отправления и прибытия - так же можно выкинуть, можно оставить (нарушая нормальную форму). Т.е. их можно взять так же из Unit'ов. Это будет отправление в первом юните и прибытие в последнем
Время в пути - так же можно (нужно выкинуть), так как это расчетная величина
Есть ли багаж - включен / не включен.
Id багажа - если он есть

TicketUnit:

Ссылка на Ticket
Номер по порядку
Авиакомпания
Код рейса авиакомпании
Что-то еще уникальное к коду рейса (дата?)
Аэропорт откуда, аэропорт куда -- возможно подтягивать из рейса, если есть таблица БД рейсов
Дата и время вылета, дата и время прилета -- возможно подтягивать из рейса, если есть БД рейсов

Время в пути - расчетное, так же как время в воздухе и время stop light, stop over в аэропортах пересадок.

Если рейс это с точки зрения авиакомпаний, то там все будет КРАЙНЕ сложно. Т.к. он AFAIK так же будет состоит из Unit'ов, на которые должны накладываться правила тарификации и соответственно Unit'ы могут быть Priceable (включаемые в один билет) или не прайсайблами (запрещено включать в один билет).

Ну и соответственно билет с точки зрения пассажира != возможным рейсам одной авиакомпании. Скорее всего.

БАГАЖ

Вообще не понял, нафига отдельные в п.5. багаж должен что-то включать. Багаж должен лететь вслед за клиентом и 100% дублировать информацию из Ticket'а. Т.е. нафига для него отдельная сущность? Просто поле "есть багаж", "нет" и возможно Id багажа в таблице Ticket.

Как-то так. AFAIK

P.S.
А вообще задача сложная с точки зрения предметной области. И ТЗ крайне не конкретное или автор его не все привел.

Если задача по программированию - нафига всякие сложности с огрызками из предметной области (типа "номера лояльности", дни недели на рейсе)
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138230
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
должны быть указаны дни недели, когда этот рейс выполняется
Вижу только два нормальных варианта:
1) Сделать 7 колонок: Day1, Day2 ... Day7
2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг.
3) Делать табличку "дни недели" + связка N:N - полный БРЕД
Оптимально вариант 1.

Посмотрел на описание международного справочник рейсов, промежуточные аэропорта для рейса авиакомпании хранят в виде строки через разделитель.

Интересно, как преподаватель планируется хранить информацию о коде-шаринге ))). Когда один самолет делится между разными авиа-компаниями и ему присвоено несколько разных кодов. (можно задать преподу, с целью ввести его в ступор)

Яstop light, stop over
Очепятка, читать как layover и stopover


Вот как выглядит перелет с точки зрения пассажира на google.com/flight

https://www.google.com/flights/#search;f=ROV;t=LHR;d=2016-01-20;r=2016-01-24;tt=o;sel=ROVDME0S71156-DMELHR1BA236

Перелет Ростов-Лондон
Одна пересадка, две разные Авиакомпании

Коде-шаринг
S7 1156, S7 4001

BA 8776, BA 236

https://www.google.com/flights/#search;f=ROV;t=LHR;d=2016-01-20;r=2016-01-24;tt=o;sel=ROVSVO0SU1157-SVOVIE0SU2352-VIELHR0BA705
Две пересадки, коде шаринга не наблюдается, в заказе коды нескольких авиакомпаний

SU 1157, SU 2352, AB 5061
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138277
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsevдолжны быть указаны дни недели, когда этот рейс выполняется
Вижу только два нормальных варианта:
1) Сделать 7 колонок: Day1, Day2 ... Day7
2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг.
3) Делать табличку "дни недели" + связка N:N - полный БРЕД
Оптимально вариант 1.

Вы как-то можете это аргументировать?
Я бы сказал наоборот - разумен вариант 3 (если задача ставится ровно так, как описал ТС - т.е. расписание задается днями недели и только ими)
Например, Вы как индексировать будете Ваш вариант 1 (уж не говорю про 2), если понадобится?
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138340
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинLeonid Kudryavtsevпропущено...

Вижу только два нормальных варианта:
1) Сделать 7 колонок: Day1, Day2 ... Day7
2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг.
3) Делать табличку "дни недели" + связка N:N - полный БРЕД
Оптимально вариант 1.

Вы как-то можете это аргументировать?
Я бы сказал наоборот - разумен вариант 3 (если задача ставится ровно так, как описал ТС - т.е. расписание задается днями недели и только ими)
Например, Вы как индексировать будете Ваш вариант 1 (уж не говорю про 2), если понадобится?
Описание Т.С. - для меня не понятно. Какие-то выхваченные куски из задания + совершенно левая схема, никак с заданием не согласующаяся.

Ключевые слова, "если понадобится".

Индексировать вариант 1 - легко, 7 индексов.

Но в 99% случаев не понадобится, т.к. искать рейсы "летающие по понедельникам", никто не будет. Вероятнее, что будут искать по дате/времени конкретного вылета. А с учетом, что у автора в Т.З. упомянуты " номер места ", то явно, что для задачи "оформление заказа"/"бронирование" должна быть табличка с конкретными вылетами, конкретной ценой (она со временем меняется) и наличием/отсутствием свободных мест. Что чистым справочником рейсов (с частотой полетов), уже являться не будет.

Т.ч. данный справочник - чисто справочник. И доступ пойдет чисто по ID. Все информация о днях недель в SQL будет совершенно не нужна. Скорее всего.

Но тут нужно знать задачу автора. В ТЗ об этом ни слова.

IMHO


Аргументировать - легко. Ровно так информация и представлена в международном справочнике рейсов. Т.ч. изобретать велосипед на равном месте - не стоит.

В справочнике полно и других полей, которые на N:N нарываются. Но внутренняя кухня авиакомпании - никому не интересна. IMHO & AFAIK. Так же, как и частота полетов - конечно интересна, но узкому кругу лиц и при решение узкого круга задач. Т.е. как хранить - глубоко пофиг в 99% процентов случаев.

Нафига обо всей это специфики указано в Т.З. автора - не очень понятно. И что конкретно имелось в виду.
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138363
Кот Матроскин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevИндексировать вариант 1 - легко, 7 индексов.

И как эти индексы будут использоваться в поиске "Рейсы по понедельникам или средам"? Будете городить динамику с union-ами?
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138397
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кот МатроскинLeonid KudryavtsevИндексировать вариант 1 - легко, 7 индексов.

И как эти индексы будут использоваться в поиске "Рейсы по понедельникам или средам"? Будете городить динамику с union-ами?
Скорее всего никак ))). Хотя это от базы зависит.

1) См. спойлер про кому это надо )))

2) Какой GUI. Как человек указывает "понедельник", "среда" ? Если на экране будет 7 checkbox'ов (пусть со значением null и 'Y'), то элементарно (возможно ошибся):

SELECT * FROM расписание WHERE from = :P_FROM AND to = :P_TO AND (достаточно сложная хрень отбора попадания по дате) AND ( :CB1 is null OR day1 = :CB1 ) and ( :CB2 is null OR day2 = :CB2 ) ....

Пользователь нашелкал чекбоксов - получил результат. На стороне клиента все элементарно. Один чекбокс на экране - одно поле в БД. Что для вывода на экран, что для поиска.

Но в реальной жизни, отбор пойдет по откуда - куда, дата (зима, весна, лето, осень - маршруты у АК скорее всего разные). День недели - уже не так критично. По дню недели селективность будет ниже плинтуса.

Я почему так возбудился, уже 1.5 месяца Route с Unit'ами и Leg'ами объединяю ))). А тут смотрю, умные слова "номера лояльности", "место" до которых я еще не скоро доберусь. )))
...
Рейтинг: 0 / 0
База данных аэропорта
    #39138540
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВижу только два нормальных варианта:
1) Сделать 7 колонок: Day1, Day2 ... Day7
2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг.


ни одного нормального варианта тут нет,
тут есть повод для увольнения...
...
Рейтинг: 0 / 0
База данных аэропорта
    #39141900
baza906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Chuvak13,

Предложения по пунктам:
1. Ввести таблицу "Календарь". Таблица болжна включать в себя даты, заполненные до необхаодимого момента и необходимые отрибуты по ним (нужные вам дни недели, и т.д. к примеру, последний день месяца). Джоин производить по датам.
2. В таблице "Рейс" оставить только аэропорт отправки. Ввести таблицу "Пересадка"(либо "Посадка") в которой будут храниться аэропорты посадок. Таким образом, в случает, если пересадок нет, в этой таблице будет храниться только первая и крайняя посадка, если есть - все посадки последовательно. Таблица должна содержать 3 столбца: id_рейса, id_аэропорта, id_посадки.
3. Создать таблицу "Лояльность" и хранить там списки имеющих лояльность клиентов.
4. Добавить в таблицу "Заказ" столбец id_посадки и производить заказ для каждой посадки, а не рейса (напоминаю, посадка будет минимум одна). Таким образом, место будет присваиваться каждому отрезку пути , либо одному, либо нескольким. Клиента так же привязать к id_посадки.
5. Аналогично связать багаж с пересадкой
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / База данных аэропорта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]