как мне составить маршрут обратного путешествия или маршрут в одну сторону - PullRequest
0 голосов
/ 26 января 2012

Я не совсем уверен, как решить эту проблему:

  • Цена за поездки в одну сторону отличается от цены за маршрут туда и обратно.

Вбэкэнд, у меня есть таблица для хранения маршрута (который дает идентификатор).У меня есть другая таблица цен, которая определяет цену этого идентификатора от startDate до endDate.

Моя таблица маршрутов может представлять информацию только для поездки в один конец.Как мне моделировать маршруты туда и обратно?

Один из способов справиться с этим был:

иметь другой столбец в таблице: returnId

, если returnId = -1 -> одинобратная поездка else returnId = id в свой бесплатный маршрут

, например, A -> B - маршрут туда и обратно, а C -> D - маршрут в одну сторону;

Это будет выглядеть примерно так:

Id    |    Departure    |    Arrival    |    ReturnId
1     |    A            |    B          |      3
2     |    C            |    D          |     -1
3     |    B            |    A          |      1

В этом случае таблица цен

Id    |    StartDate    |    EndDate    |    Price
1     |    Jan 1, 2012  |    Dec 10,2012|      150.00
3     |    Jan 1, 2012  |    Dec 10,2012|      150.00
2     |    Jan 1, 2012  |    Dec 10,2012|      100.00

Я хотел бы услышать мысли / предложения по этому дизайну?

РЕДАКТИРОВАТЬ:

Я добавил связанный вопрос , и я думаю, что ответ на эту проблему должен удовлетворить оба требования.

Одна вещь, которую я хотел бы отметить, это... цена за поездку туда и обратно указывается как единица, а не как отдельные компоненты от A-> B и обратно, B-> A.

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

Ответы [ 2 ]

1 голос
/ 26 января 2012

Вместо того, чтобы добавлять самоподключение таким образом, у меня была бы таблица «Поездка», которая содержит отображение «один ко многим» «Поездка в маршрут» (где 1 поездка состоит из нескольких маршрутов).Таким образом, поездка может иметь более 2 этапов.

Что-то вроде:

Trip_Itineraries
TripId     |   ItineraryId
1          |   1
1          |   2
2          |   3

Itinerary
ItineraryId    |   Departure    |    Arrival
1              |   A            |    B      
2              |   B            |    A      
3              |   C            |    D 

Pricing
ItineraryId    |    StartDate    |    EndDate       |    Price
1              |    Jan 1, 2012  |    Jul 10,2012   |    100.00
2              |    Jul 1, 2012  |    Dec 10,2012   |    100.00
2              |    Jul 1, 2012  |    Dec 10,2012   |    150.00

Тогда вы можете сделать:

SELECT T.TripId, sum(P.price) 
FROM Trip_Itineraries T INNER JOIN Pricing P ON T.ItineraryId = P.ItineraryId
GROUP BY T.TripId

, чтобы получить общую стоимостьдля поездки ..

0 голосов
/ 26 января 2012

Смешал два ответа и придумал это:

Путешествие

  • journeyId
  • багажная политика
  • разное

Сегмент

  • segmentId
  • идентификационный номер поездки (ФК)
  • информация о сегменте

Цена

  • journeyId
  • STARTDATE
  • ENDDATE
  • цена

Путешествие

Jid |   baggage             |   misc
1   |   "baggage policy1"   |   "round trip A->B"
2   |   "baggage policy2"   |   "one-way C->D"
3   |   "baggage policy3"   |   "one-way E->H with a hop in F, followed by G to H"

Сегмент

Id  |   Jid |   Dep |   Arrival
1   |   1   |   A   |   B
2   |   1   |   B   |   A
3   |   2   |   C   |   D
4   |   3   |   E   |   F
5   |   3   |   F   |   G
6   |   3   |   G   |   H

Цена

JourneyId    |    StartDate    |    EndDate    |    Price
1            |    Jan 1, 2012  |    Dec 10,2012|      150.00
3            |    Jan 1, 2012  |    Dec 10,2012|      150.00
2            |    Jan 1, 2012  |    Dec 10,2012|      100.00

Мысли?

...