Grundlæggende oplysninger om databasedesign

Grundlæggende oplysninger om databasedesign

En korrekt designet database giver dig adgang til nøjagtige oplysninger, der er opdateret. Da et korrekt design er afgørende for, at du når dine mål i arbejdet med en database, er det værd at investere den tid, der kræves for lære principperne for godt design. I sidste ende er der meget større sandsynlighed for, at du ender med en database, der opfylder dine behov, og som nemt kan tilpasses ændringer.

I denne artikel får du retningslinjer for planlægning af en skrivebordsdatabase. Du lærer at beslutte, hvilke oplysninger du har brug for, hvordan du inddeler disse oplysninger i de rette tabeller og kolonner, og hvordan disse tabeller er relateret til hinanden. Du bør læse denne artikel, før du opretter din første skrivebordsdatabase.

Vigtigt!: Access giver designoplevelser, der gør det muligt at oprette databaseprogrammer til internettet. Mange designovervejelser er anderledes, når du designer til internettet. I denne artikel diskuteres der ikke design af webdatabaseprogrammer. Du kan få mere at vide i artiklen Opbyg en database, der skal deles på internettet.

I denne artikel

Nogle vigtige databaseudtryk

Hvad er et godt databasedesign?

Designprocessen

Fastslå formålet med databasen

Find og organiser de nødvendige oplysninger

Inddel oplysninger i tabeller

Omdan oplysningselementer til kolonner

Angiv primære nøgler

Opret tabelrelationerne

Finjuster designet

Anvend normaliseringsreglerne


Nogle vigtige databaseudtryk

Access organiserer dine oplysninger i tabeller: lister over rækker og kolonner reminiscent i en bogholders pad eller et regneark. I en simpel database kan du muligvis kun have én tabel. For de fleste databaser skal du bruge mere end én. For eksempel har du muligvis en tabel, der gemmer oplysninger om produkter, en anden tabel, der indeholder oplysninger om ordrer, og en anden tabel med oplysninger om kunder.

Tre tabeller i dataark

Hver række er mere korrekt kaldet en post, og hver kolonne, et felt. En post er en meningsfuld og ensartet måde at kombinere oplysninger om noget på. Et felt er et enkelt oplysningselement – en elementtype, der vises i hver post. I tabellen produkter skal du for eksempel gemme oplysninger om et produkt i hver række eller post. Hver kolonne eller felt indeholder nogle typer oplysninger om produktet, f. eks navnet eller prisen.

Toppen af siden

Hvad er et godt databasedesign?

Der er visse principper, som udgør en vejledning for processen med at designe en database. Det første princip er, at dublerede oplysninger (også kaldet overflødige data) er noget makværk, fordi det er spild af plads og øger risikoen for fejl og uoverensstemmelser. Det andet princip er, at oplysningernes korrekthed og fuldstændighed er vigtig. Hvis databasen indeholder forkerte oplysninger, vil alle rapporter, der trækker oplysninger fra databasen, også indeholde forkerte oplysninger. Som resultat deraf vil de beslutninger, du træffer, som er baseret på disse rapporter, derfor bygge på et forkert grundlag.

Et godt databasedesign er derfor et, som:

  • Opdeler dine oplysninger i emnebaserede tabeller for at reducere mængden af redundante data.

  • Giver Acces de oplysninger, der er nødvendige for at sammenføje oplysningerne i tabellerne efter behov.

  • Er med til at understøtte og sikre dine oplysningers nøjagtighed og integritet.

  • Er tilpasset dine data- og rapporteringsbehov.

Toppen af siden

Designprocessen

Designprocessen består af følgende trin:

  • Fastslå formålet med databasen    

    Dette er med til at forberede dig til de resterende trin.

  • Find og organiser de nødvendige oplysninger     

    Indhent alle de typer oplysninger, du vil registrere i databasen, f.eks. produktnavn og ordrenummer.

  • Inddel oplysningerne i tabeller    

    Inddel dine oplysningselementer i overordnede enheder eller emner såsom Produkter eller Ordrer. Hvert emne bliver så til en tabel.

  • Omdan oplysningselementer til kolonner    

    Beslutte, hvilke oplysninger du vil gemme i hver tabel. Hvert element bliver til et felt, og det vises som en kolonne i tabellen. Tabellen Medarbejdere kan for eksempel inkludere felter som efter navn og ansættelsesdato.

  • Angiv primære nøgler    

    Vælg en primær nøgle for hver tabel. Den primære nøgle er en kolonne, der bruges til entydigt at identificere hver række. Et eksempel kan være Produkt-id eller Ordre-id.

  • Konfigurer tabelrelationerne    

    Kig på hver tabel, og beslut, hvordan dataene i den ene tabel er relateret til data i andre tabeller. Føj felter til tabeller, eller opret nye tabeller for at tydeliggøre relationer, som det er nødvendigt.

  • Tilpas dit design    

    Analysér dit design for fejl. Opret tabellerne, og tilføj nogle få poster med eksempeldata. Se, om du kan hente de ønskede resultater fra tabellerne. Foretag justeringer i designet efter behov.

  • Anvend normaliseringsreglerne    

    Anvend datanormaliseringsreglerne for at se, om tabellerne er struktureret korrekt. Foretag justeringer i tabellerne efter behov.

Toppen af siden

Fastslå formålet med databasen

Det er en god ide at skrive formålet med databasen på papir – dens formål, hvordan du forventer at bruge den, og hvem der bruger den. For en lille database, der er baseret på en privat virksomhed, kan du f. eks. skrive en enkelt, der minder om "kundedatabasen indeholder en liste over kundeoplysninger til brug for at fremstille mails og rapporter". Hvis databasen er mere kompleks eller bruges af mange personer, så ofte sker det i en virksomheds indstilling, kan formålet nemt være et afsnit eller mere og skal inkludere, hvornår og hvordan hver enkelt person vil bruge databasen. Ideen er at have en veludviklet mission, der kan referere til hele designprocessen. Hvis du har en sådan erklæring, kan det hjælpe dig med at fokusere på dine mål, når du træffer beslutninger.

Toppen af siden

Find og organiser de nødvendige oplysninger

Hvis du vil finde og organisere de oplysninger, du skal bruge, skal du starte med de eksisterende oplysninger. Du kan f. eks. registrere indkøbsordrer i en finans eller gemme kundeoplysninger i papirformularer i et arkivskab. Saml disse dokumenter, og få vist hver type oplysninger, der vises (f. eks. hver boks, du udfylder i en formular). Hvis du ikke har nogen eksisterende formularer, skal du i stedet forestille dig, at du skal designe en formular for at registrere kundeoplysningerne. Hvilke oplysninger vil du indsætte i formularen? Hvilke udfyldningsfelter vil du oprette? Identificer og Vis alle disse elementer. Antag f. eks., at du i øjeblikket gemmer kundelisten på kartotekskort. Det kan være en god ide at undersøge disse kort, at hvert kort indeholder en Kundenavn, adresse, by, stat, postnummer og telefonnummer. Hvert af disse elementer repræsenterer en potentiel kolonne i en tabel.

Når du forbereder denne liste, skal du ikke bekymre dig om at gøre det hele perfekt i første forsøg. Prøv i stedet at angive alle de elementer, du kommer i tanke om. Hvis andre skal bruge databasen, kan du også spørge dem om deres ideer. Du kan finjustere listen senere.

Derefter skal du overveje de typer af rapporter eller mails, du vil oprette fra databasen. Du vil måske gerne have, at en produkt salgsrapport viser salg efter område eller en oversigtsrapport, der viser produktets lagerniveauer. Du kan også oprette standardbreve, der skal sendes til kunder, der meddeler en salgs begivenhed eller tilbyder en præmie. Design rapporten på din mening, og Forestil dig, hvordan den ser ud. Hvilke oplysninger vil du indsætte i rapporten? Vise hvert element. Gør det samme for standardbrevet og til alle andre rapporter, du forventer at oprette.

Person, der forestiller sig en lagerrapport

At overveje de rapporter og forsendelser du måske kommer til at oprette, hjælper dig med at identificere de elementer, du skal bruge i databasen. Antag eksempelvis, at du giver kunderne mulighed for at tilmelde sig (eller framelde sig) periodiske mailopdateringer, og du vil udskrive en liste over dem, der har tilmeldt sig. For at registrere disse oplysninger tilføjer du en kolonne med navnet "Send mail" i tabellen. For hver kunde kan du angive feltet til Ja eller Nej.

Kravet om at sende mails til kunder medfører, at der skal registreres endnu et element. Når du ved, at en kunde ønsker at modtage mails, skal du også kende den mailadresse, du skal sende dem til. Derfor skal du registrere en mailadresse for hver kunde.

Det er en god ide at oprette en prototype for hver rapport eller output liste og overveje, hvilke elementer du skal bruge til at oprette rapporten. Når du for eksempel undersøger et standardbrev, kan det være, at der er nogle få ting, du skal være opmærksom på. Hvis du vil medtage en korrekt starthilsen – for eksempel "Mr.", "Mrs." eller "MS."-strengen, der starter en hilsen, skal du oprette et starthilsen element. Du kan også typisk starte et brev med "Kære hr. Smith" i stedet for "kære. Mr. Sylvester Smith ". Det antyder, at du normalt vil gemme det efter navn, der er adskilt fra fornavnet.

Det er vigtigt at huske, at du skal opdele hver oplysning i de mindste nyttige dele. Hvis der er tale om et navn, så du kan få det efterfølgende navn tilgængelig, skal du opdele navnet i to dele – fornavn og efter navn. Hvis du vil sortere en rapport efter efter navn, hjælper det f. eks. at have kundens efter navn gemt separat. Hvis du vil sortere, søge efter, beregne eller rapportere på baggrund af et oplysningselement, bør du lægge dette element i et separat felt.

Overvej de spørgsmål, som du ønsker, at databasen skal besvare. Hvor mange salg af dit udvalgte produkt har du for eksempel lukket sidste måned? Hvor kan dine bedste kunder live? Hvem er leverandøren for dit mest sælgende produkt? Hvis du forventer at skulle bruge disse spørgsmål, får du nul til at optage flere elementer.

Efter at have indsamlet disse oplysninger er du klar til det næste trin.

Toppen af siden

Inddel oplysningerne i tabeller

Hvis du vil opdele oplysningerne i tabeller, skal du vælge de overordnede enheder eller emner. Når du for eksempel vil finde og organisere oplysninger til en produkt salgsdatabase, kan den foreløbige liste se sådan ud:

Håndskrevne oplysninger, der er inddelt i emner

De overordnede enheder, der er vist her, er produkterne, leverandørerne, kunderne og ordrerne. Det giver derfor mening at starte med disse fire tabeller: en til fakta om produkter, én til fakta om leverandører, én til fakta om kunder og en til fakta om ordrer. Selvom det ikke fuldfører listen, er det et godt sted at starte. Du kan fortsætte med at finjustere listen, indtil du har et design, der fungerer godt.

Når du første gang gennemser den foreløbige liste over elementer, kan det være fristende at samle dem alle i én enkelt tabel i stedet for de fire, der er vist i den foregående illustration. Du finder ud af her, hvorfor det er en dårlig ide. Overvej et øjeblik den tabel, der er vist her:

Tabel, der indeholder både produkter og leverandører

I dette tilfælde indeholder hver række oplysninger om både produktet og dets leverandør. Da du kan have mange produkter fra den samme leverandør, skal oplysninger om leverandørens navn og adresse gentages mange gange. Det er spild af diskplads. Det er en meget bedre løsning kun at registrere leverandøroplysningerne én gang i en separat tabel med Leverandører, og derefter sammenkæde den pågældende tabel med tabellen Produkter.

Et andet problem med dette design bliver tydeligt, når du vil redigere oplysninger om leverandøren. Antag f.eks., at du vil ændre en leverandørs adresse. Da den vises mange forskellige steder, ændrer du måske adressen ved et uheld ét sted, men glemmer at ændre den de andre steder. Du løser dette problem ved kun at registrere leverandørens adresse ét sted.

Når du designer din database, skal du altid prøve at optage hver oplysning lige én gang. Hvis du finder de samme oplysninger, som er flere forskellige steder, f. eks adressen for en bestemt leverandør, skal du sætte disse oplysninger i en separat tabel.

Et sidste scenarie kan være, at Coho Winery kun leverer ét produkt, som du gerne vil slette, men du vil gerne bevare oplysningerne om leverandørens navn og adresse. Hvordan vil du med slette produktposten uden at miste leverandøroplysningerne? Det kan du ikke. Da hver post indeholder oplysninger om et produkt samt oplysninger om en leverandør, kan du ikke slette det ene uden også at slette det andet. Du kan derfor inddele den ene tabel i to dele for at holde disse oplysninger adskilt: den første til produktoplysninger og den anden til leverandøroplysninger. Når du sletter en produktpost, sletter du så kun oplysningerne om produktet, og ikke oplysningerne om leverandøren.

Når du har valgt det emne, der er repræsenteret af en tabel, bør kolonnerne i den pågældende tabel kun gemme oplysninger om emnet. Eksempelvis skal produkttabellen kun indeholde oplysninger om produkter. Da leverandøradressen er en oplysning om leverandøren og ikke en oplysning om produktet, hører det til i leverandørtabellen.

Toppen af siden

Omdan oplysningselementer til kolonner

For at bestemme kolonnerne i en tabel skal du beslutte, hvilke oplysninger der skal registreres om emnet i tabellen. Til tabellen Kunder kunne Navn, Adresse, Postnummer By, Send mail, Starthilsen og Mailadresse være et godt udgangspunkt for listen over kolonner. Hver post i tabellen indeholder det samme sæt af kolonner, så du kan gemme oplysninger om Navn, Adresse, Postnummer By, Send mail, Starthilsen og Mailadresseoplysninger for hver post. Eksempelvis indeholder adressekolonnen kundernes adresser. Hver post indeholder data om én kunde, og adressefeltet indeholder adressen på den pågældende kunde.

Når du har bestemt det første sæt kolonner for hver tabel, kan du afgrænse kolonnerne yderligere. For eksempel giver det mening at gemme kundens navn som to separate kolonner: fornavn og efter navn, så du kan sortere, søge og indeksere kun på disse kolonner. På samme måde består adressen reelt af fem adskilte komponenter, adresse, by, stat, postnummer og land/område, og det giver også mening at gemme dem i separate kolonner. Hvis du vil udføre en søgning, en filter-eller sorteringshandling efter tilstand, skal du for eksempel have statusoplysninger gemt i en separat kolonne.

Du bør også overveje, om databasen kun skal indeholde oplysninger om indenlandsk oprindelse eller internationalt. Hvis du har planer om at gemme internationale adresser, er det bedre at have en område kolonne i stedet for stat, da en sådan kolonne kan rumme både indenlandske tilstande og områder i andre lande/områder. På samme måde er postnummeret mere menings forfaldent end postnummer, hvis du vil gemme internationale adresser.

Følgende liste viser nogle tip til at beslutte dig for dine kolonner.

  • Medtag ikke beregnede data    

    I de fleste tilfælde bør du ikke gemme resultatet af beregninger i tabeller. I stedet kan du få Access til at udføre beregningerne, når du vil se resultatet. Antag f. eks., at der er et produkt i ordre rapport, der viser subtotalen af enheder i rækkefølgen for hver produktkategori i databasen. Der er dog ingen enheder på kolonnen Beregn subtotal i en tabel. I stedet indeholder tabellen produkter en række af ordre-kolonne, der gemmer enhederne for hvert produkt. Ved hjælp af disse data beregner Access subtotal, hver gang du udskriver rapporten. Selve subtotalen skal ikke gemmes i en tabel.

  • Gem oplysninger i deres mindste logiske dele    

    Du kan være frist for at få et enkelt felt til fulde navne eller for produktnavne sammen med produktbeskrivelser. Hvis du kombinerer mere end én slags oplysninger i et felt, er det svært at hente individuelle oplysninger senere. Prøv at opdele oplysningerne i logiske dele. for eksempel skal du oprette separate felter for for-og efter navn eller for produktnavn, kategori og beskrivelse.

Billede, der viser oplysninger elementer under designprocessen

Når du har justeret datakolonnerne i hver tabel, er du klar til at vælge en primær nøgle for hver tabel.

Toppen af siden

Angiv primære nøgler

Hver tabel indeholder en kolonne eller et sæt af kolonner, som entydigt identificerer hver række, der er gemt i tabellen. Dette er ofte et entydigt id, såsom et medarbejder-id eller et serienummer. I databaseterminologi kaldes oplysningerne for tabellens primære nøgle. Access bruger primær nøglefelter til hurtigt at tilknytte data fra flere tabeller og samle data for dig.

Hvis du allerede har et entydigt id for en tabel, f. eks et produktnummer, der entydigt identificerer hvert produkt i dit katalog, kan du bruge dette id som tabellens primære nøgle – men kun hvis værdierne i denne kolonne altid vil være forskellige for hver post. Du kan ikke have dublerede værdier i en primær nøgle. For eksempel må du ikke bruge personers navne som en primær nøgle, da navne ikke er entydige. Du kan nemt få to personer med samme navn i samme tabel.

En primær nøgle skal altid have en værdi. Hvis en kolonnes værdi kan blive ikke-tildelt eller ukendt (en manglende værdi) på et tidspunkt, kan den ikke bruges som en komponent i en primær nøgle.

Du bør altid vælge en primær nøgle, hvis værdi ikke ændres. En tabels primære nøgle kan bruges som reference i andre tabeller i en database, der anvender mere end én tabel. Hvis den primære nøgle ændres, skal ændringen også anvendes overalt, hvor der refereres til nøglen. Når du bruger en primær nøgle, der ikke ændres, reduceres risikoen for, at den primære nøgle ikke bliver synkroniseret med andre tabeller, der refererer til den.

Et vilkårligt entydigt nummer bruges ofte som den primære nøgle. Du kan for eksempel tildele hver ordre et entydigt ordrenummer. Det eneste formål med ordrenummer er at identificere en ordre. Når det er blevet tildelt, bliver det aldrig ændret.

Hvis du ikke har en kolonne eller et sæt kolonner, der kan oprette en god primær nøgle, kan du overveje at bruge en kolonne med datatypen automatisk nummerering. Når du brugerdatatypen Autonummerering, tildeles du automatisk en værdi for dig. Et sådant id er reelt. den indeholder ingen faktuelle oplysninger, der beskriver den række, den repræsenterer. Faktum bare id'er er ideelle til brug som en primær nøgle, fordi de ikke ændrer sig. En primær nøgle, der indeholder fakta om en række – et telefonnummer eller et kundenavn, for eksempel – er mere sandsynligt, fordi de faktuelle oplysninger kan blive ændret.

Tabellen Produkter med et primært nøglefelt

1. En kolonne, der er angivet til datatypen Automatisk nummerering udgør ofte en god primær nøgle. Der er ikke to produkt-id'er, der er ens.

I nogle tilfælde kan det være en ide at bruge to eller flere felter, som tilsammen udgør den primære nøgle for en tabel. Eksempelvis bruger en tabel med ordreoplysninger, der gemmer linjeelementer til ordrer, måske to kolonner til den primære nøgle: Ordre-id og produkt-id. Når en primær nøgle anvender mere end én kolonne, kaldes den også en sammensat nøgle.

Du kan oprette kolonnen Automatisk nummerering for hver af tabellerne som primær nøgle for produktsalgsdatabasen: Produkt-id for tabellen Produkter, Ordre-id for tabellen Ordrer, Kunde-id for tabellen Kunder og Leverandør-id for tabellen Leverandører.

Billede, der viser oplysninger elementer under designprocessen


Toppen af siden

Opret tabelrelationerne

Nu, hvor du har opdelt dine oplysninger i tabeller, skal du bruge en metode til at samle oplysningerne igen på en meningsfuld måde. Følgende formular indeholder oplysninger fra flere tabeller.

Formularen Ordrer

1. Oplysningerne i denne formular stammer fra tabellen Kunder...

2. ... tabellen Medarbejdere ...

3. ... tabellen Ordrer ...

4. ... tabellen Produkter ...

5. ... og tabellen Ordredetaljer.

Access er et relationsdatabasesystem. I en relationsdatabase inddeler du oplysningerne i separate, emnebaserede tabeller. Du kan derefter bruge tabelrelationer til at samle oplysninger efter behov.

Toppen af siden

Opret en en-til-mange-relation

Overvej dette eksempel: Tabellerne Leverandører og Produkter i produktordredatabasen. En leverandør kan levere et vilkårligt antal produkter. Det følger, at for en hvilken som helst leverandør, der er repræsenteret i tabellen Leverandører, kan der være mange produkter repræsenteret i tabellen Produkter. Relationen mellem tabellen Leverandører og tabellen Produkter er derfor en en-til-mange-relation.

En-til-mange-relation

Hvis du vil angive en en-til-mange-relation i databasedesignet, skal du tage den primære nøgle på en-siden af relationen og tilføje den som en ekstra kolonne eller kolonner i tabellen på "mange"-siden af relationen. I dette tilfælde skal du for eksempel føje kolonnen Leverandørnr fra tabellen leverandører til tabellen produkter. Access kan derefter bruge leverandørens ID-nummer i tabellen produkter til at finde den rigtige leverandør for hvert produkt.

Kolonnen Leverandør-id i tabellen Produkter kaldes en fremmed nøgle. En fremmed nøgle er en anden tabels primære nøgle. Kolonnen Leverandør-id i tabellen Produkter er en fremmed nøgle, fordi den også er den primære nøgle i tabellen Leverandører.

Billede, der viser oplysninger elementer under designprocessen

Du levere grundlaget for at sammenføje relaterede tabeller ved at danne par mellem primære nøgler og fremmede nøgler. Hvis du ikke er sikker på, hvilke tabeller der skal dele en fælles kolonne, kan du ved at identificere en en-til-mange-relation sikre dig, at de to pågældende tabeller rent faktisk kræver en delt kolonne.

Toppen af siden

Opret en mange-til-mange-relation

Lad os 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. For hver post i tabellen produkter kan der være mange poster i tabellen Ordrer. Denne type relation kaldes en mange-til-mange-relation for ethvert produkt, der kan være mange ordrer. der kan være mange produkter til enhver rækkefølge. Bemærk, at hvis du vil finde mange-til-mange-relationer mellem dine tabeller, er det vigtigt, at du betragter begge sider af relationen.

Emnerne i de to tabeller – ordrer og produkter – har en mange til mange-relation. Dette udgør et problem. For at forstå problemet skal du forestille dig, hvad der ville ske, hvis du forsøgte at oprette relationen mellem de to tabeller ved at tilføje feltet Produkt-id i tabellen Ordrer. Hvis du vil have mere end ét produkt pr. ordre, har du brug for mere end én post pr. ordre i tabellen Ordrer. Du ville ende med at gentage ordreoplysninger for hver række, der relaterer til en enkelt ordre – hvilket medfører et ineffektivt design, der kan føre til unøjagtige data. Du støder på det samme problem, hvis du placerer feltet Ordre-id i tabellen Produkter – så har du mere end én post i tabellen Produkter for hvert produkt. Hvordan kan problemet løses?

Løsningen er at oprette en tredje tabel, ofte kaldet en samlingstabel, der opdeler mange-til-mange-relationen i to en-til-mange-relationer. Du kan indsætte den primære nøgle fra hver af de to tabeller i den tredje tabel. Den tredje tabel registrerer dermed hver forekomst eller instans af relationen.

En mange-til-mange-relation

Hver post i tabellen Ordredetaljer repræsenterer ét linjeelement på en ordre. Den primære nøgle for tabellen Ordredetaljer består af to felter – de fremmede nøgler fra tabellerne Ordrer og tabellen Produkter. Det fungerer ikke at bruge feltet Ordre-id alene som den primære nøgle for denne tabel, fordi én ordre kan have mange linjeelementer. Ordre-id'et gentages for hvert linjeelement på en ordre, så feltet indeholder ikke entydige værdier. Det fungerer heller ikke kun at bruge feltet Produkt-id, fordi ét produkt kan være til stede i mange forskellige ordrer. Men sammen giver de to felter altid en entydig værdi for hver post.

I produktsalgsdatabasen er tabellen Ordrer og tabellen Produkter ikke direkte relateret til hinanden. I stedet er de indirekte relateret via tabellen Ordredetaljer. Mange-til-mange-relationen mellem ordrer og produkter er repræsenteret i databasen ved hjælp af to en-til-mange-relationer:

  • Tabellen Ordrer og tabellen Ordredetaljer har en en-til-mange-relation. Hver ordre kan have mere end ét linjeelement, men hvert linjeelement er kun forbundet til én ordre.

  • Tabellen Produkter og tabellen Ordredetaljer har en en-til-mange-relation. Hvert produkt kan have mange linjeelementer, der er knyttet til det, men hvert linjeelement refererer kun til ét produkt.

I tabellen Ordredetaljer kan du se alle produkterne på en bestemt ordre. Du kan også se alle ordrer på et bestemt produkt.

Efter at have inkorporeret tabellen Ordredetaljer kan listen over tabeller og felter se omtrent sådan ud:

Billede, der viser oplysninger elementer under designprocessen


Toppen af siden

Oprette en en til en-relation

En anden type relation er en en-til-en-relation. Antag f.eks., at du skal registrere nogle særlige supplerende produktoplysninger, som du sjældent skal bruge, eller som kun gælder for nogle få produkter. Da du ikke har brug for oplysningerne ofte, og fordi lagring af oplysningerne i tabellen Produkter resulterer i tomme pladser for hvert af de produkter, de ikke er gældende for, skal du placere dem i en separat tabel. Ligesom med tabellen Produkter bruger du Produkt-id som den primære nøgle. Forholdet mellem denne supplerende tabel og tabellen Produkter er en-til-en-relation. For hver post i tabellen Produkter findes der en enkelt matchende post i den supplerende tabel. Når du identificerer sådan en relation, skal begge tabeller have et felt til fælles.

Når du registrerer behovet for en-til-en-relation i din database, skal du overveje, om du kan sammensætte oplysningerne fra de to tabeller i én tabel. Hvis du af en eller anden grund ikke vil gøre det, måske fordi det resulterer i en masse tomme pladser, kan du i den følgende liste se, hvordan du kan repræsentere relationen i dit design:

  • Hvis de to tabeller ikke har det samme emne, kan du sandsynligvis konfigurere relationen ved at bruge den samme primære nøgle i begge tabeller.

  • Hvis de to tabeller har forskellige emner med forskellige primære nøgler, skal du vælge en af tabellerne (lige meget hvilken) og indsætte dens primære nøgle i den anden tabel som en fremmed nøgle.

Ved at fastslå relationer mellem tabeller kan du sikre dig, at du har de rette tabeller og kolonner. Når der findes en en-til-en- eller en en-til-mange-relation, skal de tabeller, det drejer sig om, have en eller flere fælles kolonner. Når der findes en mange-til-mange-relation, er der brug for en tredje tabel til at repræsentere relationen.

Toppen af siden

Finjuster designet

Når du har de tabeller, felter og relationer, du skal bruge, skal du oprette og udfylde dine tabeller med eksempeldata og prøve at arbejde med oplysningerne: oprette forespørgsler, tilføje nye poster osv. Hvis du gør dette, kan du fremhæve potentielle problemer – det kan være nødvendigt at tilføje en kolonne, som du har glemt at indsætte under designfasen, eller du har måske en tabel, som du skal opdele i to tabeller for at fjerne duplikeringen.

Se, om du kan bruge databasen til at få de svar, du ønsker. Opret grove udkast til formularer og rapporter, og se, om de viser de data, du forventer. Hold øje med unødvendig duplikering af data, og rediger dit design for at fjerne dubletterne, når du finder dem.

Når du afprøver din første database, vil du sikkert opdage, at der er plads til forbedring. Her er nogle ting, du skal kontrollere:

  • Har du glemt nogen kolonner? Hvis det er tilfældet, hører oplysningerne så til i de eksisterende tabeller? Hvis det er oplysninger om noget andet, skal du muligvis oprette en anden tabel. Opret en kolonne for hvert oplysningselement, du skal registrere. Hvis oplysningerne ikke kan beregnes ud fra andre kolonner, er det sandsynligt, at du skal bruge en ny kolonne til dem.

  • Er ingen kolonner unødvendige, fordi de kan beregnes ud fra eksisterende felter? Hvis et oplysningselement kan beregnes ud fra andre eksisterende kolonner – en rabatpris, der beregnes ud fra detailprisen, f. eks, er det normalt bedre at gøre det, og undgå at oprette en ny kolonne.

  • Indtaster du gentagne gange de samme oplysninger i en af tabellerne? Hvis det er tilfældet, skal du sandsynligvis dele tabellen i to tabeller, der har en en-til-mange-relation.

  • Har du tabeller med mange felter, et begrænset antal poster og mange tomme felter i individuelle poster? Hvis det er tilfældet, skal du overveje at ændre tabellens design, så den har færre felter og flere poster.

  • Er hvert oplysningselement blevet opdelt i dets mindste brugbare dele? Hvis du vil rapportere, sortere, søge eller beregne på et oplysningselement, skal du placere det pågældende element i sin egen kolonne.

  • Indeholder hver kolonne en oplysning om tabellens emne? Hvis en kolonne ikke indeholder oplysninger om tabellens emne, hører det til i en anden tabel.

  • Er alle relationer mellem tabeller repræsenteret enten af almindelige felter eller af en tredje tabel? En-til-en- og en-til-mange-relationer kræver fælles kolonner. Mange-til-mange-relationer kræver en tredje tabel.

Finjustering af tabellen Produkter

Lad os antage, at hvert produkt i databasen produktsalg falder under en generel kategori, f. eks drikkevarer, krydderier eller skaldyr. Tabellen produkter kan indeholde et felt, der viser kategorien for hvert produkt.

Antag, at du efter at have undersøgt og finjusteret databasens design beslutter dig for at gemme en beskrivelse af kategorien sammen med dens navn. Hvis du tilføjer feltet Beskrivelse af kategori i tabellen Produkter, skal du gentage hver kategoribeskrivelse for hvert produkt, der falder inden for kategorien – dette er ikke en god løsning.

En bedre løsning er at gøre Kategorier til et nyt emne, som databasen skal registrere, og give det sin egen tabel og sin egen primære nøgle. Du kan derefter tilføje den primære nøgle fra tabellen Kategorier i tabellen Produkter som en fremmed nøgle.

Tabellerne Kategorier og Produkter har en en-til-mange-relation: En kategori kan indeholde mere end ét produkt, men et produkt kan kun tilhøre én kategori.

Når du gennemgår tabelstrukturen, skal du være på Lookout for gentagne grupper. Overvej for eksempel en tabel, der indeholder følgende kolonner:

  • Produkt-id

  • Navn

  • Produkt-id1

  • Navn1

  • Produkt-id2

  • Navn2

  • Produkt-id3

  • Navn3

Her er hvert produkt en gentagende gruppe af kolonner, der kun adskiller sig fra de andre ved at tilføje et tal i slutningen af kolonnenavnet. Når du ser kolonner, der er nummereret på denne måde, skal du genoverveje dit design.

Sådan et design har flere svagheder. For det første tvinger det dig til at sætte en øvre grænse for antallet af produkter. Så snart du overskrider denne grænse, skal du tilføje en ny gruppe af kolonner i tabelstrukturen, hvilket er en større administrativ opgave.

Et andet problem er, at de leverandører, der har færre end det maksimale antal produkter, afkorter noget plads, da de ekstra kolonner vil være tomme. Den mest alvorlige fejl med et sådant design er, at det gør mange opgaver vanskelige at udføre, f. eks sortering eller indeksering af tabellen efter produkt-ID eller navn.

Når du opdager gentagende grupper, skal du gennemgå designet omhyggeligt med henblik på at opdele tabellen i to. I eksemplet ovenfor er det bedre at bruge to tabeller – én til leverandører og én til produkter – sammenkædet med leverandør-id.

Toppen af siden

Anvend normaliseringsreglerne

Du kan anvende datanormaliseringsreglerne (sommetider blot kaldet normaliseringsregler) som det næste trin i dit design. Du bruger disse regler til at se, om tabellerne er struktureret korrekt. Processen med at anvende regler på databasedesignet kaldes normalisering af databasen, eller bare normalisering.

Normalisering er især nyttigt, når du har angivet alle oplysningerne og har opnået midlertidigt design. Formålet er at hjælpe dig med at sikre, at du har opdelt dine oplysningselementer i de rette tabeller. Normalisering kan dog ikke sikre, at du har alle de korrekte dataelementer til at starte med.

Du skal anvende reglerne i rækkefølge på hvert enkelt trin for at sikre, at dit design ender med at have en af de såkaldte "normalformer". Fem normalformer er generelt anerkendt – fra den første normalform til den femte normalform. Denne artikel beskæftiger sig med de første tre, fordi de dækker alt, hvad der kræves for størstedelen af databasedesigns.

Første normalformular

Første normale formular angiver, at der skal være en enkelt værdi i skæringspunktet for hver række og kolonne i tabellen, og aldrig en liste over værdier. Du kan for eksempel ikke have et felt med navnet pris, som du placerer mere end én pris på. Hvis du tror, at hver enkelt sektion af rækker og kolonner skal være en celle, kan hver celle kun indeholde én værdi.

Anden normalform

Anden normalform kræver, at hver kolonne, der ikke er en nøgle, er helt afhængig af hele den primære nøgle, og ikke kun en del af nøglen. Denne regel gælder, når du har en primær nøgle, der består af mere end én kolonne. Antag f. eks., at du har en tabel, der indeholder følgende kolonner, hvor ordre-ID og produkt-ID udgør den primære nøgle:

  • Ordre-id (primær nøgle)

  • Produkt-id (primær nøgle)

  • Produktnavn

Dette design overtræder anden normalform, fordi kolonnen Produktnavn er afhængig af Produkt-id, men ikke af Ordre-id, så den er ikke afhængig af hele den primære nøgle. Du skal fjerne Produktnavn fra tabellen. Den hører til i en anden tabel (Produkter).

Tredje normalform

Tredje normalform kræver ikke bare, at enhver kolonne, der ikke er en nøgle, skal være afhængig af den primære nøgle, men også at kolonner, som ikke er nøgler, skal være uafhængige af hinanden.

En anden måde at sige dette er, at hver kolonne uden nøgler skal være afhængig af den primære nøgle, og at der ikke er noget, men den primære nøgle. Antag f. eks., at du har en tabel, der indeholder følgende kolonner:

  • Produkt-id (primær nøgle)

  • Navn

  • Vejledende udsalgspris

  • Rabat

Antag, at Rabat afhænger af den vejledende udsalgspris. Denne tabel overholder ikke tredje normalform, fordi kolonnen Rabat, som ikke er en nøgle, er afhængig af en anden kolonne, som ikke er en nøgle, nemlig Vejledende udsalgspris. Kolonneuafhængighed betyder, at du skal kunne ændre eventuelle kolonner, som ikke er nøgler, uden at det påvirker andre kolonner. Hvis du ændrer en værdi i feltet Vejledende udsalgspris, ændres Rabat tilsvarende og overtræder dermed denne regel. I dette tilfælde bør Rabat flyttes til en anden tabel, som bruger Vejledende udsalgspris som nøgle.

Toppen af siden

Har du brug for mere hjælp?

Udvid dine Office-færdigheder
Gå på opdagelse i kurser
Få nye funktioner først
Bliv Office Insider

Var disse oplysninger nyttige?

Tak for din feedback!

Tak for din feedback! Det lyder, som om det vil kunne hjælpe, hvis du bliver sat i forbindelse med en af vores Office-supportteknikere.

×