Laissez-vous montrer une idée qu'à mon humble avis, je pense qu'il est bon d'utiliser :créez d'abord le tableau des catégories :
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;
alors pour votre tableau de produits vous pouvez le garder tel quel :
CREATE TABLE Product (ProductID int, Description nvarchar(100));
Maintenant, vous pouvez généralement avoir un produit qui appartient à plusieurs catégories. Par conséquent, la bonne façon de procéder est d'avoir une relation m:n entre le produit et la catégorie. et cela peut être fait en ajoutant :
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;
et vous pouvez garder le thème tel quel.
vous verrez cette category
table peut gérer les catégories imbriquées en utilisant category_father_id
clé étrangère sur elle-même.
Mais une remarque à garder à l'esprit est qu'après tout, il s'agit toujours de votre domaine/logique métier.