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

Databasedesign, varer i kategori, underkategori og tema

Lad os vise dig en idé, hvilken IMHO jeg synes, den er god at bruge:opret først kategoritabellen:

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;

så til din produkttabel kan du beholde den som den er:

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

Nu Normalt kan du have et produkt, der tilhører flere kategorier. Derfor er den korrekte måde at gøre det på at have m:n relation mellem Produkt og Kategori. og det kan gøres ved at tilføje:

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;

og du kan beholde temaet som det er.

du vil se den category tabel kan håndtere indlejringskategorierne ved hjælp af category_father_id fremmednøgle på sig selv.

Men en note at huske på er, når alt kommer til alt, handler det altid om dit domæne/forretningslogik.




  1. Kan du deltage i en underforespørgsel med Doctrine 2 DQL?

  2. Optimering af en haversine-formel SQL-kald i PHP

  3. Brug mysqldump til at sikkerhedskopiere MySQL eller MariaDB

  4. Hvordan finder jeg et deaktiveret indeks på SQL server 2008