Mysql
 sql >> Database >  >> RDS >> Mysql

Progettazione di database, elementi in categoria, sottocategoria e tema

Lascia che ti mostri un'idea che IMHO penso sia buono da usare:prima crea la tabella delle categorie:

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;

quindi per la tua tabella prodotti puoi mantenerla così com'è:

CREATE TABLE Product (ProductID int, Description nvarchar(100));

Ora Solitamente puoi avere un Prodotto che appartiene a diverse categorie. Quindi, il modo corretto per farlo è avere una relazione m:n tra Prodotto e Categoria. e può essere fatto aggiungendo:

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 puoi mantenere il tema così com'è.

vedrai quella category table può gestire le categorie di annidamento usando category_father_id chiave esterna su se stesso.

Ma una nota da tenere a mente è, dopo tutto, che riguarda sempre il tuo dominio/la logica aziendale.