8bit
Новичок
Добрый день. Имеется две сущности - товары и категории товаров. Количество категорий небольшое (<10) и фиксированное. Каждый товар может принадлежать к некоторому количеству категорий, таким образом связь между сущностями - многие ко многим. 80% запросов к БД - это выборки вида "товар с ценой такой-то, принадлежащий категориями [cat1, cat3, cat7, ...]". Товары добавляются, количество категорий, как уже сказано, постоянное. Вопрос, как оптимально спроектировать БД в плане производительности. На ум пришли следующие варианты:
1. 3 таблицы, раскрывающие связь многие-ко-многим. Минус - громоздкие и медленные запросы с джойнами.
2. Одна таблица с полем categories, которое является FULLTEXT INDEX. Категории в поле перечислены просто через разделитель - cat1,cat2,catN. Ищем через MATCH (categories) AGAINST ('cat'). Кажется самый предпочтительный вариант и должен работать быстро.
3. Одна таблица с полями [cat1-catN]. Каждое поле категории булевое. Запрос вида SELECT * FROM `products` WHERE `cat1`=1 AND `cat2`=0 AND `cat3`=1 и тд. Привязывать категории к структуре таблицы кажется плохим решением, хотя с производительностью должно быть хорошо.
Собственно хочется узнать мнения, какой же вариант лучше выбрать и возможно другие решения.
И еще небольшой вопрос не по теме: нормально ли использовать таблицы MyISAM и InnoDB в одной БД?
1. 3 таблицы, раскрывающие связь многие-ко-многим. Минус - громоздкие и медленные запросы с джойнами.
2. Одна таблица с полем categories, которое является FULLTEXT INDEX. Категории в поле перечислены просто через разделитель - cat1,cat2,catN. Ищем через MATCH (categories) AGAINST ('cat'). Кажется самый предпочтительный вариант и должен работать быстро.
3. Одна таблица с полями [cat1-catN]. Каждое поле категории булевое. Запрос вида SELECT * FROM `products` WHERE `cat1`=1 AND `cat2`=0 AND `cat3`=1 и тд. Привязывать категории к структуре таблицы кажется плохим решением, хотя с производительностью должно быть хорошо.
Собственно хочется узнать мнения, какой же вариант лучше выбрать и возможно другие решения.
И еще небольшой вопрос не по теме: нормально ли использовать таблицы MyISAM и InnoDB в одной БД?