sql >> Databasteknik >  >> RDS >> Mysql

Att länka ett tredje bord till ett bridgebord i en många till många förening

+1 för Matt Fenwick. Jag vill tillägga att du vill vara lite försiktig med dina främmande nyckelbegränsningar. Du har i princip två alternativ, som båda kan se ganska lika ut, beroende på ditt val av primärnycklar.

Alternativ ett är:Glöm den enkla skärningspunkten mellan TEACHER och INSTRUMENT och ersätt den med en komplex skärningspunkt som inkluderar teacher_id , instrument_id och level_id . Alla dessa tre kolumner skulle vara den (sammansatta) primärnyckeln för denna skärningstabell. I det här alternativet har du begränsningar för främmande nyckel definierade på teacher_id och instrument_id (och level_id om detta faktiskt är en främmande nyckel till en LEVEL tabell och inte bara ett heltal eller strängkod).

Alternativ två är:Behåll den enkla skärningspunkten mellan TEACHER och INSTRUMENT (låt oss kalla det TEACHER_INSTRUMENT även om det är fantasilöst) och lägg till en underordnad tabell som definierar de nivåer som kan läras ut. Denna underordnade tabell (låt oss kalla den SKILL ) har ett level_id och en främmande nyckel till TEACHER_INSTRUMENT . Om primärnyckeln för TEACHER_INSTRUMENT är kombinationen av teacher_id och instrument_id sedan SKILL Tabellen kommer att ha samma tre kolumner som i alternativ ett. Vad gör det här alternativet annorlunda? Begränsningen för främmande nyckel från SKILL måste vara till skärningstabellen, inte till TEACHER och INSTRUMENT .

Varför är detta viktigt? Om du väljer alternativ ett, kan du behöva ha lite extra frågelogik för att få ett fullt fyllt rutnät av färdigheter, eftersom det inte finns någon referensintegritetsbegränsning som du kan definiera som säkerställer att alla färdighetsnivåer fylls i för varje lärare/instrumentkombination.

Å andra sidan, om du väljer alternativ två, har du fördelen av separation av bekymmer mellan vem som kan använda vad och hur väl de kan lära ut det.

Vad du vill undvika är att ha en tabell som bara innehåller relationen lärare/instrument och sedan en andra som (oberoende) upprepar den relationen men lägger till detaljnivån för färdighetsnivån. Om du gör det riskerar du att dessa två saker inte är synkroniserade.



  1. Hur konverterar man dessa konstiga karaktärer? (ë, Ã, ì, ù, Ã)

  2. MySQL:Hur får man längden på text i en kolumn

  3. Gräns ​​för tillståndet WHERE col IN (...).

  4. hur man visar flera bilder (blob) från mysql med php?