Я бы сделал вот так:
CREATE TABLE IF NOT EXISTS `category` (
`id` int unsigned not null AUTO_INCREMENT,
`name` varchar(256) not null,
`parent_id` int unsigned,
PRIMARY KEY (`id`),
UNIQUE KEY (`name`, `parent_id`),
CONSTRAINT `category_ibfk_1` FOREIGN KEY (`parent_id`) REFERENCES `category` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB;
INSERT INTO `category` (`id`, `title`, `parent_id`) VALUES
(1, 'Бытовая техника', null),
(2, 'Стиральные машины', 1),
(3, 'Пылесосы', 1),
(4, 'Холодильники', 1),
(5, 'Транспорт', null),
(6, 'Автомобили', 5),
(7 'Мотоциклы', 5),
(8,'Катеры', 5),
(9, 'Велосипеды', 5);
CREATE TABLE IF NOT EXISTS `model` (
`id` int unsigned not null AUTO_INCREMENT,
`name` varchar(256) not null,
PRIMARY KEY (`id`),
UNIQUE KEY (`name`)
) ENGINE=InnoDB;
INSERT INTO `model` (`id`, `name`) VALUES
(1, 'Аист'),
(2, 'Орленок'),
(3, 'Дружок'),
(4, 'Спутник'),
(5, 'Десна'),
(6, 'Салют'),
(7, 'STELS');
CREATE TABLE IF NOT EXISTS `attribute` (
`id` int unsigned not null AUTO_INCREMENT,
`name` varchar(256) not null,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
INSERT INTO `attribute` (`name`) VALUES
('Кол-во скоростей');
CREATE TABLE IF NOT EXISTS `model_attribute` (
`model_id` int unsigned not null,
`attribute_id` int unsigned not null,
`value_int` int,
`value_var` varchar(4096),
PRIMARY KEY (`advert_id`, `attribute_id`),
CONSTRAINT `model_attribute_ibfk_1` FOREIGN KEY (`model_id`) REFERENCES `model` (`id`) ON DELETE CASCADE,
CONSTRAINT `model_attribute_ibfk_2` FOREIGN KEY (`attribute_id`) REFERENCES `attribute` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB;
INSERT INTO `model_attribute` (`model_id`, `attribute_id`, `value_int`, `value_var`) VALUES
(1, 1, 1, null),
(2, 1, 1, null),
(3, 1, 1, null),
(4, 1, 1, null),
(5, 1, 1, null),
(6, 1, 1, null),
(7, 1, 21, null);
CREATE TABLE IF NOT EXISTS `advert` (
`id` int unsigned not null AUTO_INCREMENT,
`title` varchar(256) not null,
`text` varchar(2048) not null,
`category_id` int unsigned not null,
`model_id` int unsigned,
PRIMARY KEY (`id`),
CONSTRAINT `advert_ibfk_1` FOREIGN KEY (`category_id`) REFERENCES `category` (`id`) ON DELETE CASCADE,
CONSTRAINT `advert_ibfk_2` FOREIGN KEY (`model_id`) REFERENCES `model` (`id`) ON DELETE SET NULL
) ENGINE=InnoDB;
INSERT INTO `advert` (`id`, `title`, `text`, `category_id`, `model_id`) VALUES
(1, '...', '...', 9, 7),
(2, '...', '...', 9, 4);
Точно такую же таблицу model_attribute при необходимости можно создать и для категорий.