Создание структуры базы и требуемых запросов.

Денис16 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
20.02.2012

Доброго времени суток,

О ПРОЕКТЕ:

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

Город представляется числом.

Путь = последовательный список городов = последовательный список чисел, одномерный массив или граф.

Поиск по 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 неделя(обсуждаемо)

Большое спасибо.

Заявки фрилансеров