sql >> Databasteknik >  >> RDS >> Mysql

Databasdesign , artiklar i kategori, underkategori &tema

Låt visa dig en idé vilken IMHO jag tycker det är bra att använda:skapa 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;

sedan för din produkttabell kan du behålla den som den är:

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

Nu Vanligtvis kan du ha en produkt som tillhör flera kategorier. Därför är det korrekta sättet att göra det att ha en m:n relation mellan Produkt och Kategori. och det kan göras genom att lägga till:

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;

och du kan behålla temat som det är.

du kommer att se den category tabellen kan hantera kapslingskategorierna med category_father_id främmande nyckel på sig själv.

Men en anmärkning att komma ihåg är att det trots allt alltid handlar om din domän/affärslogik.




  1. MySQL Error - SQLSTATE [42000]:Syntaxfel eller åtkomstöverträdelse:1064

  2. Hur åsidosätter man tillskrivningen av en autoinkrementerande primärnyckel när man infogar ett värde i en MySQL-tabell?

  3. Oracle 10g - optimera WHERE IS NOT NULL

  4. Behöver hjälp med sql-fråga för att hitta saker taggade med alla angivna taggar