SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 10.12.2012 17:22:57

hash-mj5
Участник
Зарегистрирован: 10.12.2012
Сообщений: 1

Множества или дополнительные таблицы?

Здравствуйте! Помогите, пожалуйста, правильно принять решение smile

Разрабатываю высоконагруженный проект (сайт знакомств), возник вопрос как лучше хранить анкетные данные. Имеется таблица, содержащая данные профиля:

CREATE TABLE `profile` (
  `id` int(11),
  `id_user` int(11),
  `height` int(2),
  `weight` int(3),
  `id_orientation` int(1),
  `id_children` int(1),
  `id_welfare` int(1),
  `id_status` int(1),
  `id_housing` int(1),
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

поле id_user ссылается на поле id в таблице пользователей программно. Остальные ID зашиты в коде и, соответсвенно никуда не ссылаются.

Также имеются ещё четыре таблицы:

CREATE TABLE `im_profile_desiredage` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_desiredage` int(11) NOT NULL,
  `id_profile` int(11) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `im_profile_ihave` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_ihave` int(11) NOT NULL,
  `id_profile` int(11) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `im_profile_seeking` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_seeking` int(11) NOT NULL,
  `id_profile` int(11) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

CREATE TABLE `im_profile_target` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_target` int(11) NOT NULL,
  `id_profile` int(11) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Поле id_profile в каждой таблице ссылается на id в таблице 'profile' , остальные IDникуда не счылаются, зашиты в коде.
Поля `id_target`, `id_seeking`, `id_desiredage`, `id_ihave` могут принимать значения в небольшом диапазоне (2-16).

В таблице 'profile' поиск будет осуществляться по всем полям, на них нужно будет повесить индекс. Но намного чаще будет просто выборка по полю 'id_user'.

Проблема:
Пришла в голову идея хранить массив значений из дополнительных таблиц не в этих самых таблицах, а завести в таблице `profile` четыре поля с типом данных SET, и искать там вхождения значений с помощью функций field_in_set() и функции пересечения множеств или проверки вхождения подмножества в множество (забыл, сходу не гуглится, напомнит кто?), но при этом не будут работать индексы.

Что лучше: использование четырёх дополнительных таблиц или полей с множествами? Индекс, видимо, в обоих случаях должен быть повешан на все поля. Какой движок при этом лучше будет использовать, MyISAM или InnoDB?

Неактивен

 

Board footer

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