@zrazhevska

Как грамотно спроектировать структуру базы данных?

Использую MS SQL 2014

Есть тема - Продажа ж/д билетов

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

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

В случае сдачи билета кассир возвращает клиенту деньги (с вычислением некоторой суммы), и забирает оформленный билет, после чего отмечает данный билет как незанятый.

Вопрос состоит в том, что предполагается, что каждому поезду (в таблице поездов) соответсвует маршрут. Если запрошенное клиентом направление (начальная и конечная станция) находятся в маршруте определенного поезда, но не являются первой и последней станцией этого маршрута, этот поезд все равно должен быть предложен клиенту и надо учитывать, что в маршруте другого поезда могут так же быть эти же станции, но поезд идет наоборот от конечной к начальной запрошенной клиентом, в таком случае, этот поезд не должен быть предложен. Кроме того, необходимо просчитывать стоимость билета, в зависимости от количество станций, которые клиент проезжает.
Подскажите, пожалуйста, как правильно записывать разные маршруты для поездов и как считать сумму.
  • Вопрос задан
  • 2811 просмотров
Решения вопроса 1
MaxDukov
@MaxDukov
впишусь в проект как SRE/DevOps.
ну в лоб все выглядит несложно - для каждого поезда храните маршрут (как минимум из узловых точек), поиск поезда будет заключаться в выборке всех поездов, у которых старт ранее или равен и финиш далее или равен заказанному маршруту. Я же правильно понимаю, что поезд "туда" и "обратно" - это 2 разных поезда? и разные маршруты ( хотя и зеркальные)?
точки маршрута между узловыми можно хранить отдельно и джойнить на ходу
стоимость билета - как вариант это сумма стоимостей за каждый из "перегонов". хотя вроде бы шкала обычно не линейная.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@app25
строишь граф с аналитиками: станция , станция с которой можно попасть на эту(родительская), стоимость проезда от родительской , номер поезда, и аналитика кон/не кон....и просто рекурсивно джойнишься ..сумируешь стоимость и получаешь путь +стоимость
Ответ написан
Комментировать
@best_santa
1. У каждого отрезка маршрута должен быть тариф. Так и считать.
2. Проще простого, - булево значение. Туда-обратно - два значения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы