Definiera relationer mellan tabeller i en Access-databas

Ursprungligt KB-nummer: 304466

Obs!

Nybörjare: Kräver kunskap om användargränssnittet på enanvändardatorer. Den här artikeln gäller endast för en Microsoft Access-databas (.mdb eller .accdb).

Sammanfattning

Den här artikeln beskriver hur du definierar relationer i en Microsoft Access-databas. Artikeln innehåller följande avsnitt:

  • Vad är tabellrelationer?
  • Typer av tabellrelationer
    • En-till-många-relationer
    • Många-till-många-relationer
    • En-till-en-relationer
  • Definiera relationer mellan tabeller
    • Definiera en en-till-många- eller en-till-en-relation
    • Definiera en många-till-många-relation
  • Referensintegritet
  • Sammanhängande uppdateringar och borttagningar
  • Kopplingstyper

Vad är tabellrelationer?

I en relationsdatabas kan du med relationer förhindra redundanta data. Om du till exempel utformar en databas som spårar information om böcker kan du ha en tabell med namnet "Rubriker" som lagrar information om varje bok, till exempel bokens titel, publiceringsdatum och utgivare. Det finns också information som du kanske vill lagra om utgivaren, till exempel utgivarens telefonnummer, adress och postnummer/postnummer. Om du skulle lagra all denna information i tabellen "Rubriker" skulle utgivarens telefonnummer dupliceras för varje rubrik som utgivaren skriver ut.

En bättre lösning är att lagra utgivarens information bara en gång, i en separat tabell som vi kallar "Utgivare". Du skulle sedan placera en pekare i tabellen "Rubriker" som refererar till en post i tabellen "Publishers".

För att säkerställa att dina data förblir synkroniserade kan du framtvinga referensintegritet mellan tabeller. Relationer med referensintegritet hjälper dig att se till att informationen i en tabell matchar information i en annan. Till exempel måste varje rubrik i tabellen "Rubriker" associeras med en specifik utgivare i tabellen "Publishers". Det går inte att lägga till en rubrik i databasen för en utgivare som inte finns i databasen.

Med logiska relationer i en databas kan du effektivt fråga efter data och skapa rapporter.

Typer av tabellrelationer

En relation fungerar genom att matcha data i nyckelkolumner, vanligtvis kolumner (eller fält) som har samma namn i båda tabellerna. I de flesta fall ansluter relationen primärnyckeln, eller den unika identifierarkolumnen för varje rad, från en tabell till ett fält i en annan tabell. Kolumnen i den andra tabellen kallas för "sekundärnyckeln". Om du till exempel vill spåra försäljningen av varje bokrubrik skapar du en relation mellan primärnyckelkolumnen (vi kallar den title_ID) i tabellen "Rubriker" och en kolumn i tabellen "Försäljning" med namnet title_ID. Kolumnen title_ID i tabellen Försäljning är sekundärnyckeln.

Det finns tre typer av relationer mellan tabeller. Vilken typ av relation som skapas beror på hur de relaterade kolumnerna definieras.

En-till-många-relationer

En en-till-många-relation är den vanligaste typen av relation. I den här typen av relation kan en rad i tabell A ha många matchande rader i tabell B. Men en rad i tabell B kan bara ha en matchande rad i tabell A. Tabellerna "Publishers" och "Titles" har till exempel en en-till-många-relation. Det innebär att varje utgivare producerar många titlar. Men varje titel kommer bara från en utgivare.

En en-till-många-relation skapas om endast en av de relaterade kolumnerna är en primärnyckel eller har en unik begränsning.

I relationsfönstret i Access anges den primära nyckelsidan för en en-till-många-relation med talet 1. Den främmande nyckelsidan i en relation betecknas av en oändlighetssymbol.

Skärmbild av ett exempel på en-till-många-relationer i relationsfönstret i Access.

Många-till-många-relationer

I en många-till-många-relation kan en rad i tabell A ha många matchande rader i tabell B och vice versa. Du skapar en sådan relation genom att definiera en tredje tabell som kallas en kopplingstabell. Den primära nyckeln i kopplingstabellen består av sekundärnycklarna från både tabell A och tabell B. Tabellen "Författare" och tabellen "Rubriker" har till exempel en många-till-många-relation som definieras av en en-till-många-relation från var och en av dessa tabeller till tabellen "TitleAuthors". Primärnyckeln för tabellen "TitleAuthors" är kombinationen av kolumnen au_ID (primärnyckeln för tabellen Författare) och kolumnen title_ID (tabellen Rubriker).

Skärmbild av ett exempel på många-till-många-relationer i relationsfönstret i Access.

En-till-en-relationer

I en en-till-en-relation kan en rad i tabell A inte ha mer än en matchande rad i tabell B och vice versa. En en-till-en-relation skapas om båda de relaterade kolumnerna är primära nycklar eller har unika begränsningar.

Den här typen av relation är inte vanlig eftersom den mesta informationen som är relaterad på det här sättet finns i en tabell. Du kan använda en en-till-en-relation för att utföra följande åtgärder:

  • Dela upp en tabell med många kolumner.
  • Isolera en del av en tabell av säkerhetsskäl.
  • Lagra data som är kortvariga och enkelt kan tas bort genom att ta bort tabellen.
  • Lagra information som endast gäller för en delmängd av huvudtabellen.

I Access betecknas den primära nyckelsidan i en en-till-en-relation med en nyckelsymbol. Sekundärnyckelsidan betecknas också med en nyckelsymbol.

Definiera relationer mellan tabeller

När du skapar en relation mellan tabeller behöver inte de relaterade fälten ha samma namn. Relaterade fält måste dock ha samma datatyp om inte primärnyckelfältet är ett Räknare-fält. Du kan bara matcha ett Räknare-fält med ett talfält om FältetSizeproperty för båda matchande fälten är detsamma. Du kan till exempel matcha ett Räknare-fält och ett Tal-fält om fältenFieldSizeproperty för båda fälten ärLong Integer. Även om båda matchande fälten är talfält måste de ha inställningen SameFieldSizeproperty.

Definiera en en-till-många- eller en-till-en-relation

Följ dessa steg om du vill skapa en en-till-många- eller en-till-en-relation:

  1. Stäng alla tabeller. Du kan inte skapa eller ändra relationer mellan öppna tabeller.

  2. Följ dessa steg i Access 2002 eller Access 2003:

    1. Tryck på F11 för att växla till databasfönstret.
    2. Klicka Relationer på verktygsmenyn.

    I Access 2007, Access 2010 eller Access 2013 klickar du på Relationer i gruppen Visa/dölj på fliken Databasverktyg .

  3. Om du ännu inte har definierat några relationer i databasen visas dialogrutan Visa tabell automatiskt. Om du vill lägga till de tabeller som du vill relatera men dialogrutan Visa tabell inte visas klickar du på Visa tabell på menyn Relationer .

  4. Dubbelklicka på namnen på de tabeller som du vill relatera och stäng sedan dialogrutan Visa tabell . Om du vill skapa en relation mellan en tabell och sig själv lägger du till tabellen två gånger.

  5. Dra det fält som du vill relatera från en tabell till det relaterade fältet i den andra tabellen. Om du vill dra flera fält trycker du på Ctrl, klickar på varje fält och drar dem sedan.

    I de flesta fall drar du primärnyckelfältet (det här fältet visas i fetstil) från en tabell till ett liknande fält (det här fältet har ofta samma namn) som kallas sekundärnyckeln i den andra tabellen.

  6. Dialogrutan Redigera relationer visas. Kontrollera att fältnamnen som visas i de två kolumnerna är korrekta. Du kan ändra namnen om det behövs.

    Ange relationsalternativen om det behövs. Om du behöver information om ett specifikt objekt i dialogrutan Redigera relationer klickar du på frågetecknet och klickar sedan på objektet. (Dessa alternativ förklaras i detalj senare i den här artikeln.)

  7. Klicka på Skapa för att skapa relationen.

  8. Upprepa steg 4 till 7 för varje par tabeller som du vill relatera.

    När du stänger dialogrutan Redigera relationer frågar Access om du vill spara layouten. Oavsett om du sparar layouten eller inte sparar layouten sparas de relationer som du skapar i databasen.

    Obs!

    Du kan skapa relationer inte bara i tabeller utan även i frågor. Referensintegritet tillämpas dock inte med frågor.

Definiera en många-till-många-relation

Följ dessa steg för att skapa en många-till-många-relation:

  1. Skapa de två tabellerna som ska ha en många-till-många-relation.

  2. Skapa en tredje tabell. Det här är kopplingstabellen. I kopplingstabellen lägger du till nya fält som har samma definitioner som primärnyckelfälten från varje tabell som du skapade i steg 1. I korsningstabellen fungerar de primära nyckelfälten som sekundärnycklar. Du kan lägga till andra fält i kopplingstabellen, precis som i andra tabeller.

  3. I kopplingstabellen anger du primärnyckeln så att den innehåller primärnyckelfälten från de andra två tabellerna. I en "TitleAuthors"-kopplingstabell består till exempel den primära nyckeln av fälten OrderID och ProductID .

    Obs!

    Följ dessa steg för att skapa en primärnyckel:

    1. Öppna en tabell i designvyn.

    2. Välj det fält eller fält som du vill definiera som primärnyckel. Om du vill markera ett fält klickar du på radväljaren för önskat fält. Om du vill markera flera fält håller du ned Ctrl-tangenten och klickar sedan på radväljaren för varje fält.

    3. I Access 2002 eller Access 2003 klickar du på Primärnyckel i verktygsfältet.

      I Access 2007 klickar du på Primärnyckel i gruppen Verktyg på fliken Design .

      Obs!

      Om du vill att ordningen på fälten i en primärnyckel med flera fält ska skilja sig från ordningen på fälten i tabellen klickar du på Index i verktygsfältet för att visa dialogrutan Index och ordnar sedan om fältnamnen för indexet med namnet PrimaryKey.

  4. Definiera en en-till-många-relation mellan varje primär tabell och kopplingstabellen.

Referensintegritet

Referensintegritet är ett regelsystem som Access använder för att se till att relationerna mellan poster i relaterade tabeller är giltiga och att du inte oavsiktligt tar bort eller ändrar relaterade data. Du kan ange referensintegritet när alla följande villkor är uppfyllda:

  • Matchande fält från den primära tabellen är en primärnyckel eller har ett unikt index.
  • De relaterade fälten har samma datatyp. Det finns två undantag. Ett Räknare-fält kan vara relaterat till ett talfält som har egenskapsinställningen FieldSize Långt heltal, och ett Räknare-fält som har en FieldSize egenskapsinställning för Replikerings-ID kan vara relaterat till ett talfält som har en FieldSize egenskapsinställning för Replikerings-ID.
  • Båda tabellerna tillhör samma Access-databas. Om tabellerna är länkade tabeller måste de vara tabeller i Access-format och du måste öppna databasen där de lagras för att ange referensintegritet. Referensintegritet kan inte tillämpas för länkade tabeller från databaser i andra format.

Följande regler gäller när du använder referensintegritet:

  • Du kan inte ange ett värde i fältet sekundärnyckel i den relaterade tabellen som inte finns i primärnyckeln i den primära tabellen. Du kan dock ange ett Null-värde i sekundärnyckeln. Detta anger att posterna inte är relaterade. Du kan till exempel inte ha en order som är tilldelad till en kund som inte finns. Du kan dock ha en order som inte har tilldelats någon genom att ange ett Null-värde i fältet CustomerID .
  • Du kan inte ta bort en post från en primär tabell om det finns matchande poster i en relaterad tabell. Du kan till exempel inte ta bort en anställds post från tabellen "Anställda" om det finns order tilldelade till medarbetaren i tabellen "Beställningar".
  • Du kan inte ändra ett primärnyckelvärde i den primära tabellen om posten har relaterade poster. Du kan till exempel inte ändra en anställds ID i tabellen "Anställda" om det finns order tilldelade till den medarbetaren i tabellen "Beställningar".

Sammanhängande uppdateringar och borttagningar

För relationer där referensintegritet tillämpas kan du ange om du vill att Access automatiskt ska kaskaduppdatering eller relaterade poster för borttagning av kaskad. Om du anger de här alternativen aktiveras borttagnings- och uppdateringsåtgärder som vanligtvis förhindras av regler för referensintegritet. När du tar bort poster eller ändrar primärnyckelvärden i en primär tabell gör Access nödvändiga ändringar i relaterade tabeller för att bevara referensintegriteten.

Om du klickar för att markera kryssrutan Relaterade fält för kaskaduppdatering när du definierar en relation, varje gång du ändrar primärnyckeln för en post i den primära tabellen, uppdaterar Microsoft Access automatiskt primärnyckeln till det nya värdet i alla relaterade poster. Om du till exempel ändrar en kunds ID i tabellen "Kunder" uppdateras fältet CustomerID i tabellen "Beställningar" automatiskt för var och en av kundens beställningar så att relationen inte bryts. Få åtkomst till uppdateringar utan att visa något meddelande.

Obs!

Om primärnyckeln i den primära tabellen är ett Räknare-fält, har kryssrutan Relaterade fält för kaskaduppdatering ingen effekt eftersom du inte kan ändra värdet i ett Räknare-fält.

Om du markerar kryssrutan Ta bort relaterade poster i kaskad när du definierar en relation, tar Access automatiskt bort relaterade poster i den relaterade tabellen när du tar bort poster i den primära tabellen. Om du till exempel tar bort en kundpost från tabellen "Kunder" tas alla kundens beställningar bort automatiskt från tabellen "Beställningar". (Detta inkluderar poster i tabellen "Orderinformation" som är relaterade till posterna "Beställningar"). När du tar bort poster från ett formulär eller datablad när kryssrutan Kaskadborttagningsrelaterade poster är markerad varnar Access dig om att även relaterade poster kan tas bort. Men när du tar bort poster med hjälp av en borttagningsfråga tar Access automatiskt bort posterna i relaterade tabeller utan att visa en varning.

Kopplingstyper

Det finns tre kopplingstyper. Du kan se dem i följande skärmbild:

Skärmbild av Kopplingsegenskaper, som visar tre kopplingstyper.

Alternativ 1 definierar en inre koppling. En inre koppling är en koppling där poster från två tabeller kombineras i en frågas resultat endast om värdena i de kopplade fälten uppfyller ett angivet villkor. I en fråga är standardkopplingen en inre koppling som endast väljer poster om värdena i de kopplade fälten matchar.

Alternativ 2 definierar en vänster yttre koppling. En vänster yttre koppling är en koppling där alla poster från vänster sida av åtgärden LEFT JOIN i frågans SQL-instruktion läggs till i frågans resultat, även om det inte finns några matchande värden i det kopplade fältet från tabellen till höger.

Alternativ 3 definierar en höger yttre koppling. En yttre högerkoppling är en koppling där alla poster från höger sida av åtgärden RIGHT JOIN i frågans SQL-instruktion läggs till i frågans resultat, även om det inte finns några matchande värden i det kopplade fältet från tabellen till vänster.