Здравствуйте! Помогите, пожалуйста, правильно принять решение
Разрабатываю высоконагруженный проект (сайт знакомств), возник вопрос как лучше хранить анкетные данные. Имеется таблица, содержащая данные профиля:
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?