Всем привет! Возникла задача реализовать мини интернет-магазин. Особенность - атрибуты товаров динамичны, т.е. может продаваться как крыло от боинга, так и сланцы. И сайт должен быть сделан и отдан, никакой тех.поддержки. С такими условиями при построении модели БД была выбрана модель 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;
Но помимо вывода самих атрибутов нужно реализовать поиск по ним. Например, разделить атрибуты на группы, и назначать тип фильтра(чекбокс, диапазон, выпадающий список). Кто решал подобные задачи - подскажите, как лучше сделать? А то не хочется изобретать велосипед в век полетов в космос...