Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Projekt bazy danych, pozycje w kategorii, podkategorii i motywie

Pokażę ci pomysł, którego IMHO moim zdaniem dobrze jest użyć:najpierw utwórz tabelę kategorii:

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;

następnie dla swojej tabeli produktów możesz zachować ją taką, jaka jest:

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

Teraz Zwykle możesz mieć Produkt należący do kilku kategorii. Dlatego właściwym sposobem na to jest posiadanie relacji m:n między produktem a kategorią. i można to zrobić, dodając:

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;

i możesz zachować motyw bez zmian.

zobaczysz, że category tabela może obsługiwać kategorie zagnieżdżania za pomocą category_father_id klucz obcy na sobie.

Należy jednak pamiętać, że w końcu zawsze chodzi o logikę domeny/biznesu.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nie można wstawić danych do bazy danych za pomocą opcji(textarea)

  2. Autoinkrementacja identyfikatora tabeli przy użyciu kombinacji ciągów w bazie danych automatycznie

  3. Scal wiersze o tym samym identyfikatorze w tablicę

  4. Jak JOIN 2 tabele w MYSQL z tym samym identyfikatorem w wielu wierszach?

  5. alternatywny kod MySQL dla INET6_ATON