Задать вопрос
RayMefise
@RayMefise
Java, PHP, C, C++, C#, .NET, QT

Имеет ли смысл разбивать значения свойств товаров по разным таблицам?

Проектирую базу данных под интернет магазин с большим количеством товаров и свойств.
В большинстве проектов значения свойств товаров хранятся все в одной таблице, не зависимо от типа свойства.
Но есть вариант когда значения свойств товара разбиваются на разные таблицы по типам значений: строки в одной таблице, числа в другой, элементы списка в третей.
У обоих подходов есть свои плюсы и минусы, но меня больше интересует быстродействие, в каком случае запросы будут выполняться быстрее (например при поиске товара по значению свойств) и в каком случае будет меньше проблем с возможным мусором в базе (по сути оба метода используют не нормализованную базу)
  • Вопрос задан
  • 203 просмотра
Подписаться 2 Средний 1 комментарий
Ответ пользователя unfilled К ответам на вопрос (2)
unfilled
@unfilled
EAV (entity-attribute-value) и быстродействие - это, в общем случае, понятия прямо противоположные. Например, вы захотите сделать выбор всех товаров со свойством "Вес" и значением свойства 500 грамм - никакие индексы вам не помогут (точнее мало помогут), при достаточно большом количестве товаров и свойств.
В обоих случаях (всё в одной EAV-таблице, всё в EAV-таблицах по типам данных) у вас возможен мусор в базе, т.к. не будут работать никакие ограничения целостности (FK, CHECK, DEFAULT).
Если вы всё-таки хотите работать с EAV, можно сделать таблицу Entity|Attribute|Value_str|Value_int|Value_boolean. Какой, кхм, сорт выбирать - имхо, разницы нет.
Ответ написан