Есть 2 таблицы:
CREATE TABLE `Options` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
CREATE TABLE `Goods` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL DEFAULT '',
`options` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `options` (`options`)
) ENGINE=MyISAM;
В таблице Options хранятся характеристики товаров (цвет, материал и т.д.):
id, name
1, красный
2, синий
3, пластик
4, стекло
и т.д.
Для каждого товара может быть записана, как одна, так и несколько характеристик. Если выбрано несколько характеристик, то в таблицу Goods в поле options записываем, например '1,2,3,4'. Id записываются через запятую, без пробелов, в порядке возрастания.
Если нам необходимо выбрать все товары из красного пластика, пишем запрос:
SELECT * from Goods WHERE CONCAT(',', options, ',') LIKE '%,1,%,3,%'
Правильно ли хранить данные в таком виде и как это влияет на скорость выполнения запросов?
Если создать дополнительную таблицу Options_Goods и в ней хранить все характеристики для товаров будет более правильно, но не будет ли переизбытка данных и как это отразится на скорости?
Отредактированно mouseweb (12.10.2014 18:10:24)