Нека ви покажем една идея, която IMHO според мен е добре да се използва:първо създайте таблицата с категории:
CREATE TABLE `category` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`category_father_id` int(11) DEFAULT '0',
`is_active` tinyint(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `category_father_id` (`category_father_id`),
CONSTRAINT `constraint_name` FOREIGN KEY (`category_father_id`) REFERENCES `category` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
след това за вашата продуктова таблица можете да я запазите такава, каквато е:
CREATE TABLE Product (ProductID int, Description nvarchar(100));
Сега Обикновено можете да имате продукт, който принадлежи към няколко категории. Следователно, правилният начин да го направите е да имате връзка m:n между продукт и категория. и може да се направи чрез добавяне на:
create table product_category(
ProductId int(11) not null,
CategoryId int(11) not null,
unique (ProductId,CategoryId),
foreign key (ProductId) references Product (ProductID) on update cascade on delete cascade,
foreign key (CategoryId) references category (id) on update cascade on delete cascade
)engine=innodb;
и можете да запазите темата такава, каквато е.
ще видите тази category
таблицата може да обработва категориите за влагане чрез category_father_id
външен ключ на себе си.
Но една бележка, която трябва да имате предвид, е, че в края на краищата винаги става дума за вашия домейн/бизнес логика.