Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да присвоя множество идентификатори на един ред в MySQL?

Както вече предложиха други, връзката много към много е представена във физическия модел чрез маса за свързване. Ще свърша работата с краката и ще ви илюстрирам това:

CATEGORY_ITEM е съединителната маса. Той има съставен PK, състоящ се от FKs, мигрирали от другите две таблици. Примерни данни...

КАТЕГОРИЯ:

CATEGORY_ID CATEGORY
----------- --------
1           Apple
2           Orange

ITEM:

ITEM_ID     NAME
-------     ----
1           Foo
2           Bar

CATEGORY_ITEM:

CATEGORY_ID ITEM_ID
----------- -------
1           1
2           1
1           2

Горното означава:„Foo е едновременно Apple и Orange, Bar е само Apple“ .

PK гарантира, че дадена комбинация от категория и артикул не може да съществува повече от веднъж. Категорията или е свързана с елемента на isn't - не може да бъде свързана няколко пъти.

Тъй като основно искате да търсите елементи от дадена категория, редът на полетата в PK е {CATEGORY_ID, ITEM_ID}, така че основният индекс може да удовлетвори тази заявка. Точното обяснение защо е извън този обхват - ако се интересувате, горещо препоръчвам да прочетете Използвайте индекса, Люк ! .

И тъй като InnoDB използва клъстериране , това също така ще съхранява елементи, принадлежащи към една и съща категория, физически близо един до друг, което може да бъде доста полезно за I/O на заявката по-горе.

(Ако искате да направите заявка за категории на дадения елемент, ще трябва да обърнете реда на полетата в индекса.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Шифроване на парола в изявление за вмъкване в postgresql хвърля грешка (Необходимо е да се добави изрично привеждане на типа)

  2. Entity Framework създава име на таблица за множествено число, но изгледът очаква име на таблица в единствено число?

  3. MYSQL намира всички редове, където вторият ред е дал стойности

  4. LOAD DATA LOCAL INFILE не работи от php 5.5, използвайки PDO

  5. Код на грешка:1052. Колона „АТРИБУТ“ в списъка с полета е двусмислена