Задавайте вопросы, мы ответим
Вы не зашли.
Добрый день. Разрабатываю сайт для турфирмы. Возникла проблем с правильноый архитектурой базы. Опишу проблему подробнее. Есть тур с параметрами заголовок, краткое описание, полное описание, минимальная стоимост. К каждому туру могут быть добавлены несколько городов из разных стран, несколько дат вылета, несколько дней(продолжительность отдыха) и несколько категорий отелей(от 1 до 5). Вдальнейшем надо будет делать поиск по всем таблицам с определенными параметрами ожидатся около 1 -2 млн туров. Встает вопрос о правильной организации бд.
Вот как я представляю себе решение этой проблемы
Таблица tour
id(автоинкремент)
title
pirce
text_opisanie_min
text_opisanie
Таблица country_city
id_tour (идентификатро таблиы tour)
id_country
id_city
Таблица days
id_tour
days
Таблица date
id_tour
date
Таблица hotel_stars
id_tour
stars
К примеру в таблицах days, date, hotel_stars сделать оба поля инедексными и по полям days, date, stars сделать партицирование. Не приведет ли индекс по двум полям к снижению скорости, или лучше сделать индексными полями только days, date, satrs, ведь по ним восновном будет производиться поиск.
Или все параметры, которые могут принимать несколько значений записать через запятую в одно поле:
Таблица tour
id(автоинкремент)
title
pirce
text_opisanie_min
text_opisanie
id_country (к примеру 1,2,25,30)
id_city (к примеру 3,5,6,7)
days (к примеру 2,7)
satrs (к примеру 4,5)
date (12.02.2011, 14.02.2011)
Какой из этих вариантов лучше?
Неактивен
Второй способ, безусловно, ужасен. Никогда так не делайте.
В первом способе я бы немного реструктурировал данные. Точнее даже
идеологию. Тур — это уже готовое действие. С датой, городом и прочим.
То есть я бы сделал отдельно описание тура (то, что у Вас называлось
туром), а информацию о конкретном туре отделил бы в свою табличку.
То есть что-то типа
tour_description (id, name, description, ...);
tour (id, description_id, city_id, date, days, hotel_mask);
country_id однозначно получается из city_id, его хранить дополнительно
не надо в таблице туров. Что касается звезд отелей — если это будет
основной критерий поиска — тогда надо делать отдельную табличку
так, как Вы описали. Но у меня ощущение, что этот критерий поиска
почти всегда второстепенный (сначала ищут, куда поехать и почем,
а потом уже выбирают, сколько звездочек они потянут за эти деньги).
Тогда вполне можно сделать битовую маску типа SET или хранить просто
числом.
Ну и еще есть ощущение, что город и отели должны находиться в описании
тура: в конце концов, если есть тур в Афины, то город в зависимости от даты
поездки не меняется. И набор гостиниц в нем тоже
Неактивен