sql >> Database >  >> RDS >> Mysql

Hoe meerdere id's toewijzen aan één rij in MySQL?

Zoals anderen al hebben gesuggereerd, wordt de veel-op-veel-relatie in het fysieke model weergegeven door een verbindingstabel. Ik zal het beenwerk doen en dat voor je illustreren:

De CATEGORY_ITEM is de knooppuntentabel. Het heeft een samengestelde PK die bestaat uit FK's die zijn gemigreerd vanuit de andere twee tabellen. Voorbeeldgegevens...

CATEGORIE:

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

Het bovenstaande betekent:"Foo is zowel Apple als Orange, Bar is alleen Apple" .

De PK zorgt ervoor dat een bepaalde combinatie van categorie en item niet meer dan één keer kan bestaan. De categorie is ofwel verbonden met het item is niet - het kan niet meerdere keren worden verbonden.

Aangezien u in de eerste plaats wilt zoeken naar items van een bepaalde categorie, is de volgorde van velden in de PK {CATEGORY_ID, ITEM_ID}, zodat de onderliggende index aan die vraag kan voldoen. De exacte uitleg waarom valt buiten dit bestek - als u geïnteresseerd bent, raad ik u van harte aan om Use The Index, Luke te lezen ! .

En aangezien InnoDB clustering gebruikt , worden hiermee ook items die tot dezelfde categorie behoren fysiek dicht bij elkaar opgeslagen, wat nogal gunstig kan zijn voor de I/O van de bovenstaande query.

(Als u naar categorieën van het gegeven item wilt zoeken, moet u de volgorde van de velden in de index omdraaien.)



  1. ADODFCMP-hulpprogramma

  2. Vind dubbele records in MySQL

  3. ProgrammingError:SQLite-objecten die in een thread zijn gemaakt, kunnen alleen in diezelfde thread worden gebruikt

  4. Deelnemen aan subquery met doctrine 2 DBAL