Avatar billede and1234 Nybegynder
09. november 2012 - 16:14 Der er 3 kommentarer og
1 løsning

Input til database design - oprettelse af tabeller

Hej Alle Sammen

- Og tak for et godt forum, der er virkelig meget godt og spændende læsestof :).

Jeg er ved at lave en mindre opgave i PHP, JavaScript og MySQL. Opgaven går ud på; lave en database i MySQL og efterfølgende lave en webstruktur der kan "vise" og "indlæse" data i databasen.

I forhold til databasestrukturen, har jeg brug for input, idet min viden omkring emnet er stærkt begrænset - så håber I kan hjælpe (jeg har allerede indhentet noget inspiration på forummet til nærværende problemstilling - tak).   

Min database indeholder sportsresultater, deltagere, klubber, stævner, vægtklasser m.m. som alle har en relation til hinanden. Jeg er meget i tvivl omkring designet (E/R diagram) og tilhørende Normal Former. Jeg har identificeret følgende tabeller, kolonnenavne og primærnøgler (PK) samt fremmednøgler (FK).     

Konkurrence
dato (PK) (jeg har læst at man ikke kan have én tabel (stævne) bestående af både; data, stævnenavn og sted? - så der for opsplitning i 2 tabeller).
Turneringer_sted (FK)

Turneringer
Sted (PK)
turneringsnavn

Aldersklasse
Id (PK)
aldersklasse
lower_class
upper_class

VægtklasseMale
vægtklasse (PK)
lower_weight
upper_weight

VægtklasseFemale
vægtklasse (PK)
lower_weight
upper_weight

Klub
navn (PK)
sted (sted skal ikke forveksles med turnings_steder, idet turneringer kan lægge andre steder end i klubber)

Medlem
Id (PK)
Firstname
Lastname
Alder
køn
klub_navn (FK) (én klub kan have mange medlemmer, men kun ét medlem kan kun være medlem af en klub)

Deltager (skal "binde" resultater, medlem og vægt/aldersklasse sammen)
Id (PK)
medlem_id(FK)
resultat_id (FK)
VægtklasseFemale_ vægtklasse (FK)
VægtklasseMale_ vægtklasse (FK)
Aldersklasse_ id (FK)
Bodyweight (er usikker på om den skal ligge I tabel Medlem, dog kan bodyweight variere en del)
points (beregnes ud fra en matematisk formel, heri indgår; køn, vægt, total, alder)

Discipliner
Id (PK)
jerk
snatch
total (jerk + snatch)

Resultater
Id (PK)
discipline_id (FK)
turninger_sted (FK)

Hvis I har input til ovenstående må I meget gerne kommentere? - min største bekymring går på, om relationerne til specielt tabel; "deltager" er korrekt.

På forhånd tak.

MvH Anders
09. november 2012 - 17:14 #1
Jeg står og skal afsted, men lige et par hurtige inputs.  Mere kan følge senere.

Jeg vil gætte på, at hvert stævnested kan i tidens løb bruges til mange stævner på forskellige datoer.  Derfor ville jeg lave en tabel 'Sted' der indeholder navnet på stedet og andre oplysninger der måtte være nyttige, så som adresse, og navn og telefon nummer på en kontaktperson, men ikke nogen dato.

Hvis derimod hvert stævnenavn kun forekommer en gang og på en bestemt dato.  Det kan være 'Festivalstævne 2012', 'Festivalstævne 2013', 'Jubilæumsstævne' o.s.v., men unikke navne på hvert stævne.  I så fald kunne jeg se en tabel med stævnenavn, dato, og sted.  (Alltså du har datoen i den forkerte af de to tabeller.)

Så vil jeg foreslå kun at have en tabel for vægtklasser.  Enten skal navnet på en vægtklasse indeholde male eller female (fluevægt male, fluevægt female, o.s.v.) eller også skal tabellen have et felt for køn.  Såsom:

vægtklasse køn lower upper
fluevægt  male  40  45
mellevægt male  46  60
fluevægt female 35  50

o.s.v.

Fordelen er, at du så ikke i Deltagere skal have flere felter for vægtklasse.

Bodyweight, hvis den ikke ligger fast for en person men varierer fra stævne til stævne er det nok relevant at have den i Deltager.

Men ellers er du stort set igang i den rigtige retning.
Avatar billede and1234 Nybegynder
10. november 2012 - 12:01 #2
Hej Christian  m.fl.

- Og mange tak for responsen - er bestemt noget jeg vil bruge i mit design. Jeg ved ikke hvorledes "pointsystemet" virker her på forummet, men mange tak for inputtene indtil videre :).

Efter dine fornuftige input, består min database af følgende tabeller + attributter:

Sted
Id (PK)
By
Adresse
Stævne_id (FK)

Stævne
Id (PK)
Navn
Dato

Klub
Id (PK)
navn
Sted_Id (FK)

Medlem
Id (PK)
Firstname
Middelname
Lastname
Alder
Køn (er noget usikker på om køn er forkert placeret, idet den også ligger i tabel vægtklasse, dog med en anden betydning/kontekst?)
klub_Id (FK)

Aldersklasse
Id (PK)
aldersklasse
lower_class
upper_class

Vægtklasse
Id (PK)
vægtklasse
lower_weight
upper_weight
køn

Deltager
Id (PK)
medlem_id(FK)
resultat_id (FK)
Vægtklasse_id (FK)
Aldersklasse_id (FK)
Bodyweight
points (beregnes ud fra en matematisk formel, heri indgår; køn, vægt, total, alder)

Discipliner
Id (PK)
jerk
snatch
total (jerk + snatch, måske skal denne flyttes op til tabel deltager, idet den ikke er en selvstændig disciplin)

Resultater
Id (PK)
discipline_id (FK)
stævne_id (FK) (er lidt usikker på om stævne_id skal med her?)

Hertil har jeg udarbejdet et relationsdesign i phpMyAdmin, Version: 3.5.2.2. (kan ikke lige finde ud af, at indsætte/kopier billedet her på forummet) 

I forhold til ovenstående må I/Christian meget gerne komme med input/kritik? - mine største bekymringer er pt.; relationerne til- og fra resultater - om disse er korrekte.

Ydermere er jeg usikker på, om køn kan være både i tabel; "Vægtklasse" og i "Medlem" - selvom de har to forskellige betydninger i de to tabeller. 

På forhånd tak.

MvH Anders
10. november 2012 - 16:54 #3
Ok, videre kommentarer/spørgsmål.

Sted:  Jeg går ud fra, at stederne er fysiske bygninger eller anlæg såsom Solsidehallen i Nørresundby eller Idrætsparken i København.  Hvert sted kan bruges til mange stævner på mange tidspunkter, hvorimod jeg går ud fra, at et stævne kun finder sted på et sted på en dato.  Så stedet består uanset stævner og datoer, så Sted tabellen skal kun have id, by, og adresse, ikke stævne.  (En sidebemærkning:  'By' er vist et reserveret ord, så det kan give problemer at bruge det som navn på et felt. Du kan bruge 'bynavn' eller 'town'.)

Stævne:  Den tabel skal så have FK til Sted.  Altså felterne id, navn, dato, sted_id(FK)

I Klub bruger du sted_id.  Men er de steder stævnerne holdes og klubbernes hjemsted de samme?  Jeg ville gætte på, som sagt, at et stævne sted kan være Solsidehallen i Nørresundby, og at der kan være klubber fra Nørresundby men ikke nødvendigvis fra Solsidehallen.  Så jeg vil foreslå i Klub felterne Id, navn, og adresse eller bynavn.

Medlem:  Alder - det har det med at forandre sig i tidens løb.  Jeg vil foreslå i stedet at bruge fødselsdag.  Den applikation du bruger databasen til beregner så alderen.  Ellers skal du rende rundt og opdatere tabellen hele tiden.

Disciplinerne forstår jeg ikke helt.  Hvis det drejer sig om en sport hvor der er forskellige discipliner ligesom der ved svømning er crawl, brystsvømning, medley (der vist er en blanding af begge), o.s.v., så er den normale måde at lave en tabel med to felter, id, og disciplin navn.

Resultater forstår jeg heller ikke helt.  Jeg kan gætte på, at der i hvert stævne køres en række discipliner, såsom crawl herrer, crawl damer, brystsvømning juniorer.  I hver disciplin er der en første, anden, og tredjeplads.  I så fald skal Resultat tabellen have felterne id, disciplin, stævne, placering. 

Så er det vel således, at en deltager i et stævne kan deltage i flere discipliner, både crawl og brystsvømning (eller tilsvarende i din sport.)  Så der er en mange-til-mange relation mellem deltager og disciplin.  Hvert medlem kan deltage i mange discipliner og hver disciplin har mange deltagere.  Der vil jeg foreslå en Deltager-Disciplin tabel med felterne id, deltager_id, disciplin_id og resultat_id.

Dette er blot hurtige kommentarer baseret på begrænset forståelse, så det skal nok passes til, men jeg har prøvet at lave en opstilling af tabellerne og deres sammenhæng som jeg forstår det i øjeblikket.  Den kan du se her:

http://christianjorgensen.be/Capture.PNG 

Jeg håber den vil være til nytte.
Avatar billede and1234 Nybegynder
10. november 2012 - 20:11 #4
Hej Christian

Tusind tak for inputtene/hjælpen og respekt for din indsats m.m. specielt mht. relationsdiagrammet.

Jeg har nu nærstuderet dine bemærkninger, og de virker alle logiske og rationelle - vil helt sikkert bruge disse i videre forløb :).

MvH Anders
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
Computerworld tilbyder specialiserede kurser i database-management

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