|
|
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Прикладываю схему, которая уже есть, но меня интересует несколько вопросов. 1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется 2. Рейс может быть беспосадочным или же с посадками. Если он с посадками, то как записывать аэропорты посадок? 3. Информация о клиенте может быть найдена с использованием "номера лояльности", если клиент его не имеет, то данные вводит сам 4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути . Так же клиент должен иметь свой id на каждую часть рейса. 5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса. Не могу понять, как именно нужно переделать базу данных для выполнения заданий. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 20:46 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
>1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется Материализуйте расписание храня не дни недели а сами рейсы на N месяцев/лет вперед > Если он с посадками, то как записывать аэропорты посадок? Вводите таблицу маршрут дочернюю к рейс >Информация о клиенте может быть найдена с использованием "номера лояльности" Клиет определяется по айди. >4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути см пункт 2 >5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса. Нужна постановка задачи для багажа ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2015, 22:27 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Chuvak13Прикладываю схему, которая уже есть, но меня интересует несколько вопросов. 1. В расписании для каждого номера рейса должны быть указаны дни недели, когда этот рейс выполняется 2. Рейс может быть беспосадочным или же с посадками. Если он с посадками, то как записывать аэропорты посадок? 3. Информация о клиенте может быть найдена с использованием "номера лояльности", если клиент его не имеет, то данные вводит сам 4. Если рейс с посадками, то клиент должен получить номер места на каждый отрезок пути . Так же клиент должен иметь свой id на каждую часть рейса. 5. Id багажа включает информацию о всех перелетах и id пассажира на каждую часть рейса. Не могу понять, как именно нужно переделать базу данных для выполнения заданий. 1. в расписании у вас уже указаны даты в которые рейс летает- пожалуйста вычисляйте дни недели. Нет проблем 2. Я бы в таком случае рейс сделал составным 2 коротких "подрейса" и рейса, который в себе их объединяет (достаточно связь в рейсе саму на себя 3. не вижу проблем - ищите. Только не забудьте атрибут у клиента 4. я бы Связь между рейсом и заказом по другому сделал. Связал бы дату рейса с заказом, а для мест бы сделал таблицу один ко многим "Места в заказе" и туда бы из рейса связь (хочешь на каждый подрейс указывайте место, хочешь сразу на весь маршрут) Странное требование что клиент должен иметь id на каждый подрейс - ну это как два рейса (подрейса) -два пассажира. почему и с 1 id не сделать. 5. связывайте багаж с местами в заказе только через промежуточную таблицу (там будет связь с "подрейсом") ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 04:49 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
АВИАКОМПАНИЯ: Нафига в Авиакомпании страна и город? Аэрофлот к какому городу относится? Рейс может быть беспосадочным или же с посадками. Это "с посадками" или с "пересадками" ? Что такое Рейс? Это рейс с точки зрения авиакомпании или с точки зрения пасажира (билет) ? Сейчас у тебя рейс - полная шняга, т.к. противоречит пункту 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. А вообще задача сложная с точки зрения предметной области. И ТЗ крайне не конкретное или автор его не все привел. Если задача по программированию - нафига всякие сложности с огрызками из предметной области (типа "номера лояльности", дни недели на рейсе) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 13:25 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
должны быть указаны дни недели, когда этот рейс выполняется Вижу только два нормальных варианта: 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 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 15:04 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsevдолжны быть указаны дни недели, когда этот рейс выполняется Вижу только два нормальных варианта: 1) Сделать 7 колонок: Day1, Day2 ... Day7 2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг. 3) Делать табличку "дни недели" + связка N:N - полный БРЕД Оптимально вариант 1. Вы как-то можете это аргументировать? Я бы сказал наоборот - разумен вариант 3 (если задача ставится ровно так, как описал ТС - т.е. расписание задается днями недели и только ими) Например, Вы как индексировать будете Ваш вариант 1 (уж не говорю про 2), если понадобится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 15:46 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин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% процентов случаев. Нафига обо всей это специфики указано в Т.З. автора - не очень понятно. И что конкретно имелось в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 17:06 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevИндексировать вариант 1 - легко, 7 индексов. И как эти индексы будут использоваться в поиске "Рейсы по понедельникам или средам"? Будете городить динамику с union-ами? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 17:32 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Кот Матроскин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'ами объединяю ))). А тут смотрю, умные слова "номера лояльности", "место" до которых я еще не скоро доберусь. ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.12.2015, 18:09 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevВижу только два нормальных варианта: 1) Сделать 7 колонок: Day1, Day2 ... Day7 2) хранить в одном поле, разделенные через какой-то разделитель (например ","). Это нарушает правила нормализации, ну и пофиг. ни одного нормального варианта тут нет, тут есть повод для увольнения... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2015, 04:30 |
|
||
|
База данных аэропорта
|
|||
|---|---|---|---|
|
#18+
Chuvak13, Предложения по пунктам: 1. Ввести таблицу "Календарь". Таблица болжна включать в себя даты, заполненные до необхаодимого момента и необходимые отрибуты по ним (нужные вам дни недели, и т.д. к примеру, последний день месяца). Джоин производить по датам. 2. В таблице "Рейс" оставить только аэропорт отправки. Ввести таблицу "Пересадка"(либо "Посадка") в которой будут храниться аэропорты посадок. Таким образом, в случает, если пересадок нет, в этой таблице будет храниться только первая и крайняя посадка, если есть - все посадки последовательно. Таблица должна содержать 3 столбца: id_рейса, id_аэропорта, id_посадки. 3. Создать таблицу "Лояльность" и хранить там списки имеющих лояльность клиентов. 4. Добавить в таблицу "Заказ" столбец id_посадки и производить заказ для каждой посадки, а не рейса (напоминаю, посадка будет минимум одна). Таким образом, место будет присваиваться каждому отрезку пути , либо одному, либо нескольким. Клиента так же привязать к id_посадки. 5. Аналогично связать багаж с пересадкой ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.01.2016, 12:03 |
|
||
|
|

start [/forum/topic.php?fid=32&fpage=17&tid=1540412]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
39ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
| others: | 251ms |
| total: | 390ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...