Создание структуры базы и требуемых запросов.
Доброго времени суток,
О ПРОЕКТЕ:
одни люди задают путь поездки, другие ищут свой путь в базе ранее заданных путей.
Город представляется числом.
Путь = последовательный список городов = последовательный список чисел, одномерный массив или граф.
Поиск по 2 городам из всёх путей = поиск на наличие двух чисел по массиву, сохраняя последовательность.
Пример поиска только по путям без прочих критериев:
Имеем в базе путь№1 = (233, 25, 6555544, 6789, 4099872, 56, 34)
Найти (233,6789) в пути№1 = 1
Найти (25,233) в пути№1 = 0
Найти (6789, 4099872) в пути№1 = 1
Найти (34,233) в пути№1 = 0
Найти (233,34) в пути№1 = 1
Найти (233,6788) в пути№1 = 0
Путей будет очень много, мнимум 6-7 значные числа.
Один клиент сохраняющий свой путь может указать 2 города, другой 10, третий 20. и т.д.
Я сначала хотел сохранять путь как последовательность цифр в одной ячейке. Например [1,2345,65,789,334444,500984,3]. И выбирать чем-то подобным:
SELECT .... WHERE FIND_IN_SET(point1, table.col) AND FIND_IN_SET(point2, table.col) AND FIND_IN_SET(point1, table.col)
или
SELECT ... WHERE table.col REXEXP '*point1*point2*';
НЕкоторые люди рекомендуют использовать графы, якобы должно работать быстрее, в комментариях прошу написать Ваше мнение к путю решения? Предпочтение отдаётся наиболее обоснованному. Поиск по базе путей должен быть менее ресурсоёмким и по возможности наиболее шустрым.
Есть более лучшие методы для решения задачи? NoSQL не хотелосьбы применять, но при хорошем обосновании готовы обсудить и эту тип хранения данных.
Платформа:
Linux,
MySQL, PostgreSQL, Nosql-подобные (обсуждаемо), главное чтобы была привязка к PHP.
ЗАДАНИЕ:
I. Требуется создать структуру баз(ы) путей.
Хранимая информация:
-Путь, сохраняемый в базе может иметь до 20 городов.
-Тип поездки: 4 варианта (1,2,3,4);
-Путь, цепочка из городов (от 1 до 20)
-Страна (список всех европейских)
-Время отправки с первого пункта, время прибытия в конечный пункт. Для промежуточных пунктов время не требуется.
-Регулярность: одноразовая поездка или регулярно.
Если регулярно, клиент указывает дни недели, четная или нечётная неделя.
Обдумать, как такие записи с регулярностью сохранять или выдавать.
Имеется: готовая таблица городов (id, name, country_iso) и соотв. база стран (iso, country_name, geoname_id)
II. Также надо создать запросы:
Входящие данные: страна*, город-старт*, город-цель*, время отправки, время прибытия. На выходе: список путей удовлетворяющих поиску.
(*= обязательные данные.)
Если что-то плохо объяснил, готов углубиться и подробнее описать.
Сроки: ориентировочно 1 неделя(обсуждаемо)
Большое спасибо.