SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 31.10.2010 20:00:00

elslepas
Участник
Зарегистрирован: 31.10.2010
Сообщений: 16

Помогите со схемой таблиц

Добрый день. Разрабатываю сайт для турфирмы. Возникла проблем с правильноый архитектурой базы. Опишу проблему подробнее. Есть тур с параметрами заголовок, краткое описание, полное описание, минимальная стоимост. К каждому туру могут быть добавлены несколько городов из разных стран, несколько дат вылета, несколько дней(продолжительность отдыха) и несколько категорий отелей(от 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)

Какой из этих вариантов лучше?

Неактивен

 

#2 01.11.2010 01:24:47

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6756

Re: Помогите со схемой таблиц

Второй способ, безусловно, ужасен. Никогда так не делайте.

В первом способе я бы немного реструктурировал данные. Точнее даже
идеологию. Тур — это уже готовое действие. С датой, городом и прочим.
То есть я бы сделал отдельно описание тура (то, что у Вас называлось
туром), а информацию о конкретном туре отделил бы в свою табличку.

То есть что-то типа
tour_description (id, name, description, ...);
tour (id, description_id, city_id, date, days, hotel_mask);

country_id однозначно получается из city_id, его хранить дополнительно
не надо в таблице туров. Что касается звезд отелей — если это будет
основной критерий поиска — тогда надо делать отдельную табличку
так, как Вы описали. Но у меня ощущение, что этот критерий поиска
почти всегда второстепенный (сначала ищут, куда поехать и почем,
а потом уже выбирают, сколько звездочек они потянут за эти деньги).
Тогда вполне можно сделать битовую маску типа SET или хранить просто
числом.

Ну и еще есть ощущение, что город и отели должны находиться в описании
тура: в конце концов, если есть тур в Афины, то город в зависимости от даты
поездки не меняется. И набор гостиниц в нем тоже wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson