Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Design de banco de dados, itens em categoria, subcategoria e tema


Vamos te mostrar uma ideia de qual IMHO acho bom ser usado:primeiro crie a tabela de categorias:
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;

então, para sua tabela de produtos, você pode mantê-la como está:
CREATE TABLE Product (ProductID int, Description nvarchar(100));

Agora Normalmente você pode ter um Produto que pertence a várias categorias. Portanto, a maneira correta de fazer isso é ter uma relação m:n entre Produto e Categoria. e isso pode ser feito adicionando:
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;

e você pode manter o tema como está.

você verá que category table pode lidar com as categorias de aninhamento usando category_father_id chave estrangeira nele mesmo.

Mas uma observação a ter em mente é que, afinal, trata-se sempre da sua lógica de domínio/negócios.