Pokażę ci pomysł, którego IMHO moim zdaniem dobrze jest użyć:najpierw utwórz tabelę kategorii:
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;
następnie dla swojej tabeli produktów możesz zachować ją taką, jaka jest:
CREATE TABLE Product (ProductID int, Description nvarchar(100));
Teraz Zwykle możesz mieć Produkt należący do kilku kategorii. Dlatego właściwym sposobem na to jest posiadanie relacji m:n między produktem a kategorią. i można to zrobić, dodając:
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;
i możesz zachować motyw bez zmian.
zobaczysz, że category
tabela może obsługiwać kategorie zagnieżdżania za pomocą category_father_id
klucz obcy na sobie.
Należy jednak pamiętać, że w końcu zawsze chodzi o logikę domeny/biznesu.