Не чего нового к увы..
eav используется во 2м и 3м варианте, да и в 1м тоже, но это не решение..
Что бы избавиться от null или пустого поля придется создать 625 вариаций, это еще хуже чем незаполненные ячейки.
willlli: Значит, не поняли, что такое EAV. Перечитайте еще раз.
Конечно, полноты ответа ради, нужно добавить, что при большой степени денормализации базы нужно посмотреть в сторону nosql решений. Но в вашем случае об этом думать вообще рано.
Упрощенный смысл EAV в том, что у вас есть таблицы:
Property Name
Я знаю, даже знаю для чего она. Только нормализация таким способом приведет к возрастанию нагрузки, возрастание на поиск, потому что запрос будут очень сложными. Чем сложнее запрос, тем он медленнее.. а кэшировать всю базу нету смысла. Вот к примеру как построена база у яндекс маркета? Однозначно это eav, но у них нету такой проблемы, как не все заполнены поля..
Может есть какие-то другие варианты хранения ?
Думаю что надо просто создать одну базу для поиска, а вторую для простого показа.
В первой хранить значения с индексом, во второй простую статистику в виде json, которая формируется из ходя из заполненных полей..
Получается что база для поиска будет вот так выглядеть:
searche_$class_cat id|name|prince|param 1|param2|param 3| param4|all
searche_$class_cat_all id|param 9|param10|param 11|.. |param25
и база для вывода
product id|name|prince|param_json|итд..
Для общего развития можно почитать: fifonik.com/hobby/progr/engine4.html
Базы данных. Проектирование, реализация и сопровождение. Теория и практика, Томас Коннолли, Каролин Бегг
Не, это подошло бы, если было 4 параметра и все они заполнялись.... а не от 25 параметров которые могут быть не заполнены.. Думаю что вообще в массиве хранить для простого вывода, а для поиска сделать единую базу со всеми параметрами и ключом на тот или иной объект "товар в нашел случаи" Не знаю только как избавить от пустых полей.. они будут тормозить базу
willlli: В моем примере ваши параметры хранятся в таблице ProductMeta по ключам равному названию параметра (key) и ключу продукта(id_product), их в у каждого товара может быть от ноля до бесконечности. Индексация по ключу ProductMeta.key и ProductMeta.value позволит мгновенно выбрать сходные товары по параметрам. И что самое интересное никаких "лишних полей", и этот вариант будет работать гораздо быстрее любого из предложенных вами.