Déjame mostrarte una idea que, en mi humilde opinión, creo que es buena para usar:primero crea la tabla de categorías:
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;
luego, para su tabla de productos, puede mantenerla tal como está:
CREATE TABLE Product (ProductID int, Description nvarchar(100));
Ahora, por lo general, puede tener un Producto que pertenezca a varias categorías. Por lo tanto, la forma correcta de hacerlo es tener una relación m:n entre Producto y Categoría. y se puede hacer agregando:
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;
y puede mantener el tema como está.
verás esa category
la tabla puede manejar las categorías de anidamiento usando category_father_id
clave foránea en sí misma.
Pero una nota a tener en cuenta es que, después de todo, siempre se trata de su dominio/lógica empresarial.