@porozhnyy

EAV — как сделать структуру более универсальной и легкой?

Всем привет! Возникла задача реализовать мини интернет-магазин. Особенность - атрибуты товаров динамичны, т.е. может продаваться как крыло от боинга, так и сланцы. И сайт должен быть сделан и отдан, никакой тех.поддержки. С такими условиями при построении модели БД была выбрана модель EAV как наиболее универсальная. Построил стандартную модель, вот как выглядит:
SET FOREIGN_KEY_CHECKS=0;

-- ----------------------------
-- Table structure for attributevalue
-- ----------------------------
DROP TABLE IF EXISTS `attributevalue`;
CREATE TABLE `attributevalue` (
  `attribute_id` bigint(20) NOT NULL,
  `product_id` int(11) unsigned DEFAULT NULL,
  `attribute_value` text,
  KEY `product_id` (`product_id`),
  CONSTRAINT `product_id` FOREIGN KEY (`product_id`) REFERENCES `productentity` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Table structure for productattribute
-- ----------------------------
DROP TABLE IF EXISTS `productattribute`;
CREATE TABLE `productattribute` (
  `attribute_id` bigint(20) NOT NULL,
  `product_id` int(11) unsigned DEFAULT NULL,
  `attribute_name` varchar(255) DEFAULT NULL,
  KEY `product_id_attr` (`product_id`),
  CONSTRAINT `product_id_attr` FOREIGN KEY (`product_id`) REFERENCES `productentity` (`product_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- ----------------------------
-- Table structure for productentity
-- ----------------------------
DROP TABLE IF EXISTS `productentity`;
CREATE TABLE `productentity` (
  `product_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`product_id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4;


Но помимо вывода самих атрибутов нужно реализовать поиск по ним. Например, разделить атрибуты на группы, и назначать тип фильтра(чекбокс, диапазон, выпадающий список). Кто решал подобные задачи - подскажите, как лучше сделать? А то не хочется изобретать велосипед в век полетов в космос...
  • Вопрос задан
  • 381 просмотр
Решения вопроса 1
madmages
@madmages
Человек прямоходящий
если вы используете EAV только для содержания товаров то тогда все хорошо, но если вам нужно там же держать и группы атрибутов то тогда названия таблиц немного не те.

Если все же группы атрибут в EAV то тогда названия должны быть такими же как расшифровка EAV.

element>attr_group atribut>child_attr
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы