Et af målene med godt databasedesign er at fjerne dataredundans (duplikerede data). Du kan opnå dette mål ved at opdele dataene i mange emnebaserede tabeller, så hver oplysning kun repræsenteres én gang. Du giver derefter Access en metode til at samle de opdelte oplysninger igen – det gør du ved at placere fælles felter i tabeller, der er relaterede. Du kan dog kun udføre dette trin korrekt, når du har forstået relationerne mellem dine tabeller og angivet disse relationer i databasen.
I denne artikel
Introduktion
Når du har oprettet en tabel for hvert emne i databasen, skal du give Access en metode til at samle disse oplysninger igen, når det er nødvendigt. Det gør du ved at indsætte fælles felter i de relaterede tabeller og ved at definere relationer mellem tabellerne. Du kan derefter oprette forespørgsler, formularer og rapporter, der viser oplysninger fra flere tabeller på én gang. Den formular, der vises her, indeholder f.eks. oplysninger, der er hentet fra flere tabeller:
1. Oplysningerne i denne formular stammer fra tabellen Kunder...
2. ...tabellen Ordrer...
3. ...tabellen Produkter...
4. ...og tabellen Ordredetaljer.
Kundenavnet i feltet Faktura til hentes fra tabellen Kunder, værdierne Ordre-id og Ordredata kommer fra tabellen Ordrer, produktnavnet kommer fra tabellen Produkter, og værdierne Pris pr enhed og Antal kommer fra tabellen Ordrespecifikationer. Disse tabeller er kædet sammen på forskellige måder for at hente oplysninger fra dem til formularen.
I eksemplet ovenfor skal felterne i tabellerne koordineres, så de viser oplysninger om den samme ordre. De koordineres ved hjælp af tabelrelationer. En tabelrelation sammenligner data i nøglefelter, der ofte er et felt, som har samme navn i begge felter. I de fleste tilfælde fungerer disse tilsvarende felter som den primære nøgle i den ene tabel, hvilket giver hver post et entydigt id, og som en fremmed nøgle i den anden tabel. Medarbejdere kan f.eks. forbindes med ordrer, de er ansvarlige for, ved at oprette en tabelrelation mellem felterne Medarbejder-id i tabellerne Medarbejdere og Ordrer.
1. Medarbejder-id vises i begge tabeller - som primær nøgle ...
2. ... og som fremmed nøgle.
Typer af tabelrelationer
Der findes tre typer tabelrelationer i Access.
-
En en-til-mange-relation
Lad os bruge en ordresporingsdatabase, der indeholder tabellen Kunder og tabellen Ordrer som eksempel. En kunde kan afgive ethvert antal ordrer. Det betyder, at der for hver kunde i tabellen Kunder kan være mange ordrer i tabellen Ordrer. Relationen mellem tabellen Kunder og tabellen Ordrer er derfor en en til mange-relation.
Når du skal repræsentere en en til mange-relation i databasedesignet, skal du tage den primære nøgle på én-siden af relationen og føje den til tabellen som et eller flere ekstra felter på mange-siden af relationen. I dette tilfælde skal du f.eks. føje et nyt felt – id-feltet fra tabellen Kunder – til tabellen Ordrer og give det navnet Kunde-id. Access kan derefter bruge kunde-id'et i tabellen Ordrer til at finde den korrekte kunde for hver ordre.
-
En mange-til-mange-relation
Lad os nu se på relationen mellem tabellen Produkter og tabellen Ordrer. En enkelt ordre kan omfatte mere end ét produkt. Og et enkelt produkt kan forekomme i mange ordrer. Derfor kan der for hver post i tabellen Ordrer være mange poster i tabellen Produkter. Og for hver post i tabellen Produkter kan der være mange poster i tabellen Ordrer. Denne relation kaldes en mange til mange-relation. Bemærk, at du skal se på begge sider af relationen, når du skal identificere en mange til mange-relation.
For at repræsentere en mange til mange-relation skal du oprette en tredje tabel, der ofte kaldes en samlingstabel, der opdeler mange til mange-relationen i to en til mange-relationer. Du skal indsætte den primære nøgle fra hver af de to tabeller i den tredje tabel. Det medfører, at hver forekomst af relationen registreres i den tredje tabel. Tabellen Ordrer og tabellen Produkter har f.eks. en mange til mange-relation, der defineres ved at oprette to en til mange-relationer til tabellen Ordreoplysninger. Én ordre kan bestå af mange produkter, og hvert produkt kan forekomme i mange ordrer.
-
En en-til-en-relation
I en en til en-relation kan hver post i den første tabel kun have én tilsvarende post i den anden tabel, og hver post i den anden tabel kan kun have én tilsvarende post i den første tabel. Denne relation er ikke almindelig, fordi de fleste oplysninger, der er relateret på denne måde, findes i samme tabel. Du kan anvende en en til en-relation til at opdele en tabel med mange felter, til at isolere en del af en tabel af sikkerhedsgrunde eller til at lagre oplysninger, der kun gælder for en del af hovedtabellen. Når du har en sådan relation, skal de to tabeller dele et fælles felt.
Hvorfor skal der oprettes tabelrelationer?
Du kan oprette tabelrelationer udtrykkeligt ved at bruge vinduet Relationer eller ved at trække et felt fra ruden Feltliste. Access bruger tabelrelationer til at bestemme, hvordan tabeller skal sammenkædes, når du skal bruge dem i et databaseobjekt. Der er flere grunde til, at du skal oprette tabelrelationer, inden du opretter andre databaseobjekter, som f.eks. formularer, forespørgsler og rapporter.
-
Tabelrelationer giver oplysninger til forespørgselsdesign
Hvis du vil arbejde med poster fra mere end én tabel, skal du ofte oprette en forespørgsel, der forbinder tabellerne. Forespørgslen fungerer ved at sammenligne værdierne i det primære nøglefelt i den første tabel med et fremmed nøglefelt i den anden tabel. Hvis du f.eks. vil returnere rækker, der viser alle ordrer for hver kunde, skal du oprette en forespørgsel, der forbinder tabellen Kunder med tabellen Ordrer baseret på feltet Kunde-id. I vinduet Relationer kan du manuelt angive de felter, der skal forbindes. Men hvis du allerede har defineret en relation mellem tabellerne, leverer Access standardjoinforbindelsen baseret på den eksisterende tabelrelation. Hvis du bruger en af forespørgselsguiderne, bruger Access desuden de oplysninger, der indsamles fra de tabelrelationer, du allerede har defineret, til at give dig informerede valgmuligheder og til at udfylde egenskabsindstillinger med de relevante standardværdier.
-
Tabelrelationer giver oplysninger til formular- og rapportdesign
Når du designer en formular eller rapport, bruger Access de oplysninger, der indsamles fra de tabelrelationer, du allerede har defineret, til at give dig informerede valgmuligheder og til på forhånd at udfylde egenskabsindstillinger med de relevante standardværdier.
-
Tabelrelationer er det grundlag, hvorpå du kan gennemtvinge referentiel integritet for at undgå uafhængige poster i databasen. En uafhængig post er en post, der refererer til en anden post, der ikke findes, som f.eks. en ordrepost, der refererer til en kundepost, der ikke findes.
Når du designer en database, opdeler du oplysningerne i tabeller, som hver har en primær nøgle. Du føjer derefter fremmede nøgler til relaterede tabeller, der henviser til disse primære nøgler. Disse par af primære nøgler og fremmede nøgler udgør grundlaget for tabelrelationer og forespørgsler med flere tabeller. Det er vigtigt, at disse referencer til fremmede nøgler og primære nøgler forbliver synkroniserede. Referentiel integritet, som afhænger af tabelrelationer, hjælper med at sikre, at henvisninger er synkroniserede.
Forstå referentiel integritet
Når du designer en database, opdeler du databaseoplysningerne i mange emnebaserede tabeller for at minimere dataredundans. Du kan derefter give Access en metode til at samle dataene igen ved at placere fælles felter i relaterede tabeller. Du kan repræsentere en en til mange-relation ved f.eks. at tage den primære nøgle fra én-tabellen og føje den til mange-tabellen som et ekstra felt. Hvis du vil samle dataene igen, tager Access værdien i mange-tabellen og slår den tilsvarende værdi op i en-tabellen. På den måde refererer mange-tabellen til de tilsvarende værdier i én-tabellen.
Lad os f.eks. antage, at du har en en til mange-relation mellem Speditionsfirmaer og Ordrer, og du vil slette et speditionsfirma. Hvis det speditionsfirma, du vil slette, har ordrer i tabellen Ordrer, bliver disse ordrer "uafhængige", når du sletter posten i Speditionsfirma. Ordrerne indeholder stadig et speditionsfirma-id, men id'et er ikke længere gyldigt, fordi den post, det refererer til, ikke længere findes.
Formålet med referentiel integritet er at forhindre elementer uden overordnede og holde henvisningerne synkroniserede, så denne hypotetiske situation aldrig opstår.
Du gennemtvinger referentiel integritet ved at aktivere det for en tabelrelation. Når det gennemtvinges, afviser Access enhver handling, der overtræder referentiel integritet for den pågældende tabelrelation. Det betyder, at Access afviser både opdateringer, der ændrer destinationen for en reference, og sletninger, der fjerner destinationen for en reference. Det er muligt, at du har et helt gyldigt behov for at ændre den primære nøgle for et speditionsfirma, der har ordrer i tabellen Ordrer. I sådanne tilfælde er det, du virkelig har brug for, at Access automatisk opdaterer alle de påvirkede rækker som en del af en enkelt handling. På den måde sikrer Access , at opdateringen fuldføres fuldt ud, så databasen ikke efterlades i en inkonsekvent tilstand, hvor nogle rækker opdateres, og andre ikke. Derfor understøtter Access indstillingen Kaskadevis opdatering af relaterede felter . Når du gennemtvinger referentiel integritet og vælger indstillingen Kaskadevis opdatering af relaterede felter , og du derefter opdaterer en primær nøgle, opdaterer Access automatisk alle felter, der refererer til den primære nøgle.
Du har muligvis også en gyldig grund til at slette en række og alle relaterede poster, som f.eks. en post for et speditionsfirma og alle de poster, der er relateret til det pågældende speditionsfirma. Derfor understøtter Access indstillingen Kaskadevis sletning af relaterede poster . Når du gennemtvinger referentiel integritet og vælger indstillingen Kaskadevis sletning af relaterede poster , og du derefter sletter en post på relationens primære nøgleside, sletter Access automatisk alle de poster, der refererer til den primære nøgle.
Få vist tabelrelationer
Klik på Relationer under fanen Databaseværktøjer for at få vist tabelrelationerne. Vinduet Relationer åbnes og viser alle eksisterende relationer. Hvis der ikke er defineret nogen tabelrelationer, og du åbner vinduet Relationer for første gang, bliver du Access bedt om at føje en tabel eller forespørgsel til vinduet.
Åbne vinduet Relationer
-
Klik på Filer, klik på Åbn, og vælg og åbn derefter databasen.
-
Klik på Relationer i gruppen Relationer under fanen Databaseværktøjer.
-
Klik på Alle relationer i gruppen Relationer under fanen Relationer.Dette viser alle de definerede relationer i databasen. Bemærk, at skjulte tabeller (tabeller, hvis afkrydsningsfelt Skjult er markeret i dialogboksen for tabellens Egenskaber), og deres relationer vises ikke, medmindre afkrydsningsfeltet Vis skjulte objekter er markeret i dialogboksen Navigationsindstillinger.
En tabelrelation vises med en relationslinje mellem tabellerne i vinduet Tabeller. En relation, der ikke gennemtvinger referentiel integritet, vises som en tynd linje mellem de fælles felter, der understøtter relationen. Når du vælger relationen ved at klikke på dens linje, bliver linjen tykkere for at angive, at den er valgt. Hvis du gennemtvinger referentiel integritet for denne relation, bliver linjen tykkere i hver ende. Tallet 1 vises desuden over den tykke del af linjen på den ene side af relationen og symbolet for uendelighed (8) vises over den tykke del af linjen på den anden side.
Når vinduet Relationer er aktivt, kan du vælge fra følgende kommandoer på båndet:
Gør følgende i gruppen Værktøjer under fanen Relationer – Design:
-
Rediger relationer Åbner dialogboksen Rediger relationer. Når du markerer en relationslinje, kan du klikke på Rediger relationer for at ændre tabelrelationen. Du kan også dobbeltklikke på relationslinjen.
-
Ryd layout Fjerner alle tabeller og relationer, der vises i vinduet Relationer. Bemærk, at kommandoen kun skjuler tabellerne og relationerne - den sletter dem ikke.
-
Relationsrapport Opretter en rapport, der viser tabellerne og relationerne i databasen. Rapporten viser kun de tabeller og relationer, der ikke er skjult i vinduet Relationer.
Gør følgende i gruppen Relationer under fanen Relationsdesign:
-
Tilføj tabeller Gør det muligt at vise markeringen af tabeller i vinduet Relationer.
-
Skjul tabel Skjuler den markerede tabel i vinduet Relationer.
-
Direkte relationer Viser alle relationer og relaterede tabeller for den markerede tabel i vinduet Relationer, hvis de ikke allerede vises.
-
Vis alle relationer Viser alle relationer og relaterede tabeller i databasen i vinduet Relationer. Bemærk, at skjulte tabeller (tabeller, hvor afkrydsningsfeltet Skjult er markeret i dialogboksen Egenskaber for tabellen) og deres relationer ikke vises, medmindre du har markeret Vis skjulte objekter i dialogboksen Navigationsindstillinger.
-
Luk Lukker vinduet Relationer. Hvis du har ændret layoutet i vinduet Relationer, bliver du spurgt, om du vil gemme ændringerne.