Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Datenbankdesign, Artikel in Kategorie, Unterkategorie und Thema

Lassen Sie sich eine Idee zeigen, die meiner Meinung nach gut verwendet werden kann:Erstellen Sie zuerst die Kategorietabelle:

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;

dann können Sie Ihre Produkttabelle so belassen, wie sie ist:

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

Jetzt können Sie normalerweise ein Produkt haben, das zu mehreren Kategorien gehört. Daher ist der richtige Weg, dies zu tun, eine m:n-Beziehung zwischen Produkt und Kategorie zu haben. und dies kann durch Hinzufügen von:

erfolgen
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;

und Sie können das Thema beibehalten, wie es ist.

Sie werden diese category sehen Die Tabelle kann die Verschachtelungskategorien mit category_father_id handhaben Fremdschlüssel auf sich selbst.

Beachten Sie jedoch, dass es immer um Ihre Domänen-/Geschäftslogik geht.