Definiera relationer mellan tabeller i en Access-databas

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Ursprungligt KB-nummer:   304466

Anteckning

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

Sammanfattning

I den här artikeln beskrivs hur du definierar relationer i en Microsoft Access-databas. Artikeln omfattar följande avsnitt:

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

Vad är tabellrelationer?

I en relationsdatabas gör relationer att du kan förhindra redundanta data. Om du till exempel utformar en databas som ska spåra information om böcker kan du ha en tabell med namnet "Titlar" som lagrar information om varje bok, till exempel bokens titel, datum för publicering och utgivare. Det finns även information om utgivaren som du kanske vill lagra, till exempel utgivarens telefonnummer, adress och postnummer. Om du skulle lagra all denna information i tabellen "Titlar" skulle utgivarens telefonnummer dupliceras för varje titel som utgivaren skriver ut.

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

Du kan se till att dina data förblir synkroniserade genom att använda referensintegritet mellan tabeller. Referensintegritetsrelationer ser till att informationen i en tabell matchar informationen i en annan. Exempelvis måste varje rubrik i tabellen "Titlar" vara kopplad till en viss utgivare i tabellen "Utgivare". 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 avfråga data och skapa rapporter.

Typer av tabellrelationer

En relation fungerar genom att data i nyckelkolumner matchas, vanligtvis kolumner (eller fält) som har samma namn i båda tabellerna. I de flesta fall kopplar relationen samman primärnyckeln, eller den unika id-kolumnen för varje rad, från en tabell till ett fält i en annan tabell. Kolumnen i den andra tabellen kallas för "foreign key". Om du till exempel vill spåra försäljningen av varje boktitel skapar du en relation mellan primärnyckelkolumnen (vi kallar den title_ID) i tabellen "Titlar" och en kolumn i tabellen "Försäljning" som heter title_ID. Kolumnen title_ID i tabellen "Försäljning" är foreign key.

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

1:många-relationer

En 1: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. Till exempel har tabellerna "Utgivare" och "Titlar" en 1:1-relation. Varje utgivare ger många rubriker. Varje rubrik kommer dock bara från en utgivare.

En 1:många-relation skapas om bara en av de relaterade kolumnerna är en primärnyckel eller har ett unikt villkor.

I relationsfönstret i Access anger primärnyckelsidan av en 1:många-relation talet 1. Externa nyckelsidan av en relation betecknas med ett oändlighetstecken.

Skärmbild av ett exempel för 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. Primärnyckeln i kopplingstabellen består av externa nycklar från både tabell A och tabell B. Exempelvis har tabellen "Författare" och tabellen "Rubriker" en många-till-många-relation som definieras av en 1:många-relation från var och en av dessa tabeller till tabellen "TitleAuthors". Primärnyckeln i tabellen "TitleAuthors" är kombinationen av kolumnen au_ID (primärnyckeln för tabellen "Författare" och kolumnen title_ID (primärnyckeln för tabellen "Rubriker").

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

1:1-relationer

I en 1:1-relation kan en rad i tabell A ha högst en matchande rad i tabell B och vice versa. En 1:1-relation skapas om båda de relaterade kolumnerna är primärnycklar eller har unika villkor.

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 1:1-relation för att utföra följande åtgärder:

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

I Access betecknas primärnyckelns sida av en 1:1-relation med en nyckelsymbol. Sidan med externa nycklar betecknas också med en nyckelsymbol.

Definiera relationer mellan tabeller

När du skapar en relation mellan tabeller behöver de relaterade fälten inte ha samma namn. Relaterade fält måste emellertid ha samma datatyp, såvida inte primärnyckelfältet är ett Räknare-fält. Du kan matcha ett Räknare-fält med ett talfält endast om fälteproperitet för båda de matchande fälten är desamma. Du kan till exempel matcha ett Räknare-fält och ett talfält om fältetypenFieldSizeproperty för båda fälten ärLong Heltal. Även om båda matchande fälten är Tal-fält måste de ha samma Inställning förFieldSizeproperty.

Definiera en 1:1- eller 1:1-relation

Så här skapar du en 1:1-relation eller en 1:1-relation:

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

  2. I Access 2002 eller Access 2003 gör du så här:

    1. Växla till fönstret Databas genom att trycka på F11.
    2. Klicka på RelationerVerktyg-menyn.

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

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

  4. Dubbelklicka på namnen på tabellerna 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 för foreign key i den andra tabellen.

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

    Ange relationsalternativ om det behövs. Om du behöver ha information om ett visst objekt i dialogrutan Redigera relationer klickar du på frågetecknet och sedan på objektet. (De här alternativen förklaras mer ingående längre fram 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 den, sparas relationerna som du skapar i databasen.

    Anteckning

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

Så här definierar du en många-till-många-relation

Så här skapar du en många-till-många-relation:

  1. Skapa de två tabeller 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 kopplingstabellen fungerar primärnyckelfälten som externa nycklar. Du kan lägga till andra fält i kopplingstabellen på samma sätt som i andra tabeller.

  3. I kopplingstabellen anger du primärnyckeln så att primärnyckelfälten från de andra två tabellerna ingår. I en kopplingstabell för "TitleAuthors" skulle primärnyckeln till exempel göras av fälten OrderID och ProductID.

    Anteckning

    Så här skapar du en primärnyckel:

    1. Öppna en tabell i designvyn.

    2. Markera det eller de fält som du vill definiera som primärnyckel. Om du vill välja 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.

      Anteckning

      Om du vill att ordningen för fälten i en flerfältsnyckel ska skilja sig från ordningen för dessa fält i tabellen klickar du på Index i verktygsfältet så att dialogrutan Index visas och ändrar sedan ordningen på fältnamnen för indexet PrimaryKey.

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

Referensintegritet

Referensintegritet är ett system med regler som används i Access för att kontrollera att relationer mellan poster i relaterade tabeller är giltiga och att du inte tar bort eller ändrar relaterade data av misstag. Du kan ange referensintegritet när alla följande villkor är sanna:

  • Matchande fält från primärtabellen ä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 Långt heltal, och ett Räknare-fält som har en egenskapsinställning för Replikerings-ID kan vara relaterat till ett talfält som har egenskapsinställningen FieldSize Replikerings-ID. FieldSize FieldSize
  • 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 användas 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 för externa nyckel i den relaterade tabellen som inte finns i primärnyckeln för den primära tabellen. Däremot kan du ange ett Null-värde i foreign key. Detta anger att posterna är orelaterade. Du kan till exempel inte ha en order som är tilldelad till en kund som inte finns. Du kan däremot ha en order som tilldelas till någon genom att ange ett Null-värde i fältet CustomerID.
  • Du kan inte ta bort en post från en primärtabell om matchande poster finns i en relaterad tabell. Du kan till exempel inte ta bort en anställd från tabellen "Anställda" om det finns en order tilldelad till den anställda i tabellen "Order".
  • Du kan inte ändra primärnyckelns värde i primärtabellen om den 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 anställda i tabellen "Order".

Sammanhängande uppdateringar och borttagningar

För relationer där referensintegritet används kan du ange om du vill att Access automatiskt ska uppdatera relaterade poster i relaterade poster eller ta bort poster i relaterade relaterade poster i relaterade poster. Om du anger de här alternativen aktiveras borttagnings- och uppdateringsåtgärder som normalt skulle förhindras av referensintegritetsregler. När du tar bort poster eller ändrar primärnyckelvärden i en primärtabell gör Access nödvändiga ändringar i relaterade tabeller för att bevara referensintegriteten.

Om du markerar kryssrutan Uppdatera poster i relaterade tabeller när du definierar en relation uppdaterar Microsoft Access automatiskt primärnyckeln till det nya värdet i alla relaterade poster när du ändrar primärnyckeln för en post i den primära tabellen. Om du till exempel ändrar en kunds ID i tabellen Kunder uppdateras fältet Kund-ID i tabellen "Order" automatiskt för varje kunds order så att relationen inte bryts. Access överlappar uppdateringar utan att visa något meddelande.

Anteckning

Om primärnyckeln i den primära tabellen är ett Räknare-fält har det ingen effekt att markera kryssrutan Uppdatera poster i relaterade tabeller eftersom du inte kan ändra värdet i ett Räknare-fält.

Om du markerar kryssrutan Ta bort poster i relaterade tabeller när du definierar en relation tas relaterade poster i den relaterade tabellen bort automatiskt 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 order automatiskt bort från tabellen "Order". (Detta inkluderar poster i tabellen "Orderdetaljer" som är relaterade till "Order"-poster). När du tar bort poster från ett formulär eller datablad när kryssrutan Ta bort poster i relaterade relaterade poster i relaterade poster är markerad varnas du om att relaterade poster också kan tas bort. Men när du tar bort poster med hjälp av en borttagningsfråga, tas posterna i relaterade tabeller bort automatiskt utan att en varning visas.

Kopplingstyper

Det finns tre kopplingstyper. Du kan se dem på 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 frågans resultat endast om värdena i de sammanslagna fälten uppfyller ett angivet villkor. I en fråga är standardkopplingen en inre koppling som bara väljer poster om värdena i de kopplingsfä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 LEFT JOIN-åtgärden i frågans SQL-instruktion läggs till i frågans resultat, även om det inte finns några matchande värden i det sammanfogade fältet från tabellen på höger sida.

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