Relationer av typen många-till-många
En relation av typen många-till-många inträffar när flera poster i en tabell är kopplas till flera poster i en annan tabell. Till exempel finns en relation av typen många-till-många mellan kunder och produkter – kunder kan köpa olika produkter, och produkter kan köpas av flera kunder.
Relaterade databassystem brukar inte tillåta att du använder en direkt relation av typen många-till-många mellan två tabeller. Ett exempel är att hålla reda på fakturor. Om det fanns många fakturor med samma fakturanummer och en av dina kunder frågade om ett fakturanummer skulle du inte veta vilken faktura som menas. Detta är en anledning till att ge varje faktura ett unikt värde.
För att undvika det här problemet kan du dela upp relationen av typen många-till-många i två relationer av typen en-till-många genom att använda en tredje tabell, en så kallad kopplingstabell. Varje post i en kopplingstabell omfattar ett matchande fält som innehåller värdet för primärnycklarna i de två tabeller som den kopplar samman. (I kopplingstabellen är de här matchande fälten främmande nycklar.) De här främmande nyckelfälten fylls i med data när poster i kopplingstabellen skapas från någon av tabellerna den kopplar samman.
Ett typiskt exempel på en relation av typen många-till-många är en mellan studenter och klasser. En student kan registrera sig för många klasser, och en klass kan innehålla många studenter.
Följande exempel innehåller en tabell som heter Studenter, som innehåller en post för varje elev, och en tabell som heter Klasser som innehåller en post för varje klass. Tabellen Registreringar är en kopplingstabell som skapar två relationer av typen en-till-många mellan de två tabellerna.
Primärnyckeln StudentID identifierar på ett unikt sätt varje elev i tabellen Studenter. Primärnyckeln KlassID identifierar på ett unikt sätt varje klass i tabellen Klasser. Tabellen Registreringar innehåller de främmande nycklarna StudentID och KlassID.
Så här skapar du en kopplingstabell för en relation av typen många-till-många:
- Skapa en tabell som heter Registreringar enligt exemplet ovan. Den kommer att vara kopplingstabellen.
- Skapa ett fält för StudentID och ett för KlassID i tabellen Registreringar.
Kopplingstabeller innehåller ofta fält som kanske inte är logiskt att ha i någon annan tabell. Du kan lägga till fält i tabellen Registreringar, såsom fältet Datum för att hålla reda på när någon började i en klass, och fältet Kostnad för att spåra hur mycket en student har betalt för att gå i en klass.
- Skapa en relation mellan tabellernas två StudentID-fält. Skapa sedan en relation mellan tabellernas två KlassID-fält.
Om den här designen används och en student registrerar sig i tre klasser har studenten en post i tabellen Studenter och tre poster i tabellen Registreringar (en post för varje klass som eleven har registrerats i).
Kommentarer
- Kopplingstabeller kan komma åt fält och data i olika tabeller utan att en separat relation behöver skapas. Om du till exempel vill visa en lista över alla klasser som en elev har registrerats i skapar du en portal på en layout baserat på tabellen Studenter. Designa portalen så att den visar relaterade poster från tabellen Klasser. Lägg sedan till lämpliga fält från Klasser på portalen. När du bläddrar bland poster i layouten Studenter visar portalen alla klasser som en viss student har registrerats i.