sql >> Databasteknik >  >> RDS >> Mysql

Hur tilldelar man flera ID till en rad i MySQL?

Som andra redan har föreslagit, representeras många-till-många-relationer i den fysiska modellen av en korsningstabell. Jag ska göra benarbetet och illustrera det för dig:

CATEGORY_ITEM är korsningstabellen. Den har en sammansatt PK som består av FK:er migrerade från de andra två tabellerna. Exempeldata...

KATEGORI:

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

ARTIKEL:

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

CATEGORY_ITEM:

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

Ovanstående betyder:"Foo är både Apple och Orange, Bar är bara Apple" .

PK säkerställer att en given kombination av kategori och artikel inte kan existera mer än en gång. Kategorin är antingen kopplad till objektet är inte - den kan inte kopplas flera gånger.

Eftersom du i första hand vill söka efter objekt i en given kategori, är ordningen på fälten i PK {CATEGORY_ID, ITEM_ID} så att det underliggande indexet kan uppfylla den frågan. Den exakta förklaringen till varför ligger utanför denna ram - om du är intresserad rekommenderar jag varmt att läsa Use The Index, Luke ! .

Och eftersom InnoDB använder klustring , kommer detta också att lagra objekt som tillhör samma kategori fysiskt nära varandra, vilket kan vara ganska fördelaktigt för I/O i frågan ovan.

(Om du vill fråga efter kategorier för det givna föremålet, måste du vända ordningen på fälten i indexet.)



  1. Behöver en enum i MySQL INTE vara NULL?

  2. Yii - skapa en temporär tabell och använda den i nästa fråga ger ett allmänt fel:2014 Kan inte köra frågor medan andra obuffrade frågor är aktiva

  3. SQLzoo JOIN handledning #13

  4. får fel - SQLSTATE[21000]:Kardinalitetsbrott:1241 Operand bör innehålla 1 kolumn(er)