DatabaseDesign для путешественника - PullRequest
1 голос
/ 24 марта 2011

У меня сейчас проблемы с проектированием базы данных. Я создаю небольшую платформу для совместного использования автомобилей, и я совершенно не знаю, как хранить «предложения о совместном использовании».

У меня есть люди, путешествующие от A до D (через B , C )
A → B → C → D
И я путешествую от C до D .

Я думал о разделении первой поездки на подтипы (A → B, B → C, C → D). С помощью "соединения" на B я мог бы найти соединения с A C . Но с более промежуточными шагами это станет довольно медленно (я полагаю), имейте в виду, что вы не должны менять водителя / машину во время одной поездки.

Я читал кое-что о «вложенных множествах», чтобы построить дерево. Но я не уверен, что этот подход подойдет для моей проблемы, так как у меня нет рута (и я понятия не имею, как пройти по этому дереву в sql). На данный момент я не знаю, с чего начать. Если вы подтвердите использование вложенных наборов, я углублюсь в это.
Но я ценю любые другие идеи или предложения

пс. это мой первый пост, надеюсь, я все правильно понял:)

1 Ответ

2 голосов
/ 24 марта 2011

Как насчет одного ряда на остановку во время поездки, включая номер заказа остановки?Например:

trip | stop | place
-----+------+------
   1 |    1 |    A
   1 |    2 |    B
   1 |    3 |    C
   1 |    4 |    D

Таким образом, вы можете легко найти поездки, которые идут, например, от A до C:

SELECT t.trip
FROM trips t
JOIN trips s ON (
    t.trip = s.trip AND
    t.place = "A" AND
    s.place = "C" AND
    t.stop < s.stop
);

Таким образом, запрос всегда будет одинаковым, независимо от вложенных команд

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