SQLinfo.ru - Все о MySQL

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

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

Вы не зашли.

#1 12.10.2014 17:33:44

mouseweb
Участник
Зарегистрирован: 12.10.2014
Сообщений: 1

Правильность хранения данных и время выполнения запроса

Есть 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)

Неактивен

 

#2 12.10.2014 20:07:44

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2422

Re: Правильность хранения данных и время выполнения запроса

Не будет переизбыка - это классический случай отношения "многие ко многим".


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

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