Avatar billede nanna31 Praktikant
08. juli 2002 - 09:17 Der er 11 kommentarer og
1 løsning

Relationel database-design


Jeg skal lave en database til en skakturnering - hver spiller deltager i X kampe og hver kamp afvikles af 2 spillere, hvilke tabeller og tilhørende primærnøgler er nødvendige ?
Avatar billede mugs Novice
08. juli 2002 - 10:00 #1
Du skal have en tabel til spillere med en primær nøgle. Kald den "Spiller".
Derefter en tabel til kampene også med en primær nøgle.
Lav en 3. tabel med kombinationsbokse til spillerfeltet og kampfeltet i de øvrige tabeller. Træk relationer mellem tabellerne med typen "alle poster fra tabel3". Denne tabel skal nødvendigvis ikke have en primær nøgle.
Avatar billede nanna31 Praktikant
08. juli 2002 - 11:51 #2
Hvad skal jeg bruge en 3 tabel til - det forstår jeg ikke ?
Avatar billede mugs Novice
08. juli 2002 - 13:03 #3
Tabellerne "Spiller" og "Kamp" er dit lager af informationer.
I Spiller kan du oprette alle informationer om spillerne, klub, adresse, erfaring o.s.v.
I Kamp opretter du kampene med tilhørende informationer som tidspunkt, hvor o.s.v.

Den tredje tabel skal indeholde mindst 2 felter: 1 kombinationsboks hvor du vælger en spiller, og en anden kombinationsboks hvos du vælger en kamp. Når du har laver relationerne, kan du lave en forespørgsel, hvor disse 2 felter en med, indsæt derefter de tilhørende felter fra tabellerne "Spiller" og "Kamp". Du vil nu få vist alle data om spiller og kamp
Avatar billede nanna31 Praktikant
08. juli 2002 - 13:17 #4
Hvad er en kombinationsboks?
Jeg forstår altså ikke nødvendigheden af den 3 tabel? - hvad er det præcist for et problem, som den 3 tabel løser?
Avatar billede mugs Novice
08. juli 2002 - 15:26 #5
En kombinationsboks laver du i tabeldesign. I Feltegenskaberne under fanen opslag kan du vælge om feltet skal være en kombinationsboks, det sikrer bl.a. mod stavefejl: Hvis du f.eks. laver en rapport over turneringens resultat er det vel ikke særlig heldigt, hvis du den ene gang staver et navn Christian og den næste Kristian.

Jeg siger ikke, at den 3. tabel løser noget problem, det er blot den måde jeg ville foretrække at lave det.

Hvis du lægger din e-mail kan jeg strikke et emsempel sammen i Access97.
Avatar billede nanna31 Praktikant
08. juli 2002 - 15:54 #6
ok takker :)

Min mail er : sbp72@hotmail.com
Gem hellere dit eksempel i tilfælde af, at det ikke kommer igennem.
Avatar billede helle_fred Nybegynder
10. juli 2002 - 11:03 #7
I lige præcis denne database, hvor du véd, at hver kamp kun involverer to spillere, kan du nøjes med to tabeller.

En Spiller-tabel med f.eks. felterne:
Spillernr, Fornavn, Efternavn, Klub.....

og en Kamp-tabel med f.eks. felterne

Kampnr, Spiller1, Spiller2, Tidspunkt, Sted, Resultat....

Hvor de to sidste felter er henvisninger til Primærnøglen i Spillertabellen.

Men du kan få problemer med at lave skærmbilleder/rapporter til din database, når spillernes kampdeltagelse fremgår at to og ikke blot et felt. Ikke værre, end at det kan klares, men nok til at gøre basen lidt kompliceret at have med at gøre.

Den bedste løsning er derfor, som mugs siger: lav tre tabeller. Spiller, Kamp og så en tredje Kampdeltagelse.

Spiller indeholder stadig Spillernr, Fornavn, Efternavn etc.

Kamp indeholder nu kun
Kampnr, Tidspunkt, Sted, Resultat.... (ikke  Spiller1 og Spiller2)

Kampdeltagelse, som er en relationstabel, indeholder referencer til primærnøgler i Spiller og Kamp:
Spillernr, Kampnr

Access har nogle bekvemme indretninger til indtastning af sådanne referencer til primærnøgler. Ellers er det ikke specielt sjovt at skulle lægge data i relationstabellen. Kombinationsbokse og lister kan slå op på feltværdier i tabellen og dermed finde den nødvendige reference.
Avatar billede nanna31 Praktikant
10. juli 2002 - 13:52 #8
Tak for mailen mugs og tak helle fred - men jeg er ikke blevet klogere på, hvorfor man ikke bare benytter to tabeller ?
Avatar billede mugs Novice
10. juli 2002 - 14:36 #9
Selv tak.
Du kan komme ud for, at en spiller f.eks. skifter adresse midt i en turnering. Hvis du kun har 2 tabeller som skitseret af helle fred, risikerer du at skulle rette spillerens adresse mange steder i db.

Hvis du benytter 3 tabeller, plukker du spillerens ID fra spillertabellen over i den tabel jeg vist har kaldt tabel3. Bemærk at det er spillerens ID du henter. D.v.s. at spillerens adresse stadig ikke er i tabel3, men du ser det ved at køre en forespørgsel, hvori relationen mellem de 2 tabeller forbinder de 2 ID-felter og så har du spillerens navn, adresse i forespørgslen. Når du så skal skifte hans adresse, skal du kun gøre det i spillertabellen, idet det er det eneste sted adressen er opført.
Avatar billede nanna31 Praktikant
10. juli 2002 - 14:44 #10
Hvis jeg kun benytter to tabeller - en med spilleroplysninger og en med turneringsoplysninger, i hvilken der findes en reference til de to spilleres ID i spiller-tabellen, så behøver jeg da heller ikke rette mere end et sted ?
Avatar billede mugs Novice
10. juli 2002 - 16:24 #11
Lav den med 2 tabeller!!!
Avatar billede nanna31 Praktikant
17. juli 2002 - 10:04 #12
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester