sql >> Database >  >> RDS >> Mysql

Database-ontwerp, items in categorie, subcategorie en thema

Laat je een idee zien welke IMHO ik denk dat het goed is om te gebruiken:maak eerst de categorietabel:

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;

dan kunt u uw producttabel behouden zoals het is:

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

Nu Meestal kunt u een product hebben dat tot verschillende categorieën behoort. Daarom is de juiste manier om dit te doen een m:n-relatie tussen Product en Categorie. en het kan worden gedaan door toe te voegen:

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;

en je kunt het thema behouden zoals het is.

je ziet die category tabel kan de nestcategorieën afhandelen met behulp van category_father_id externe sleutel op zichzelf.

Maar een opmerking om in gedachten te houden is, het gaat tenslotte altijd om uw domein/bedrijfslogica.




  1. mysql-opgeslagen procedure:het gebruik van gedeclareerde vars in een limietinstructie geeft een fout

  2. Een lijst met partitieschema's retourneren in SQL Server (T-SQL)

  3. Meerdere verbindingen met dezelfde verbindingsreeks onder één transactie, verhoogde transactie?

  4. Beste methode om relationele afhankelijkheden op meerdere niveaus te verifiëren