Avatar billede nicolailissau Nybegynder
13. november 2009 - 00:09 Der er 5 kommentarer og
1 løsning

Hjælp udformning af MySQL database

Hej eksperter.

Jeg træner noget der hedder Crossfit, og er imidlertid blevet irriteret over at der ikke findes nogle ordenlige løsninger til at søge efter træningsprogrammer. Så! jeg måtte jo tage tingene i egen hånd :)

Jeg vil nu skrive hvordan jeg har tænk mig at gøre, og så håber jeg i har tilføjelser, kritik eller forslag om ændringer.
Jeg ønsker selvfølgelig at databasen skal være så hurtig som mulig.

Jeg tænker at jeg kunne dele databasen op i tre tabeller:

1. tabel skal være en main tabel, der skal indeholde selve dataerne om workout'et. Dvs. et id, navnet på workoutet, hvilke redskaber der bruges(kode), hvilke øvelser der laves(kode) samt hvilken kategori øvelsen ligger under.

2. tabel forestiller jeg mig skal indeholde alle de forskellige typer øvelser vi kan lave. Tabellen skal indeholde id, navn, og alternative øvelser. Feltet 'øvelser' i tabel 1(main) skal via den kode der ligger deri, kunne hente info omkring de øvelser der indgår i workout'et.

3. tabel skal indeholde de forskellige redskaber, og skal hentes på samme måde via en kode i tabel 1(main).

Hvad tænker i om dette opdeling?

Mvh
Nicolai Lissau.
Avatar billede nicolailissau Nybegynder
13. november 2009 - 01:53 #1
Det skal lige siges at jeg kan finde ud af at bruge MySQL men er bestemt ingen haj.

En lille tilføjelse. Et træningsprogram kan fx se således ud:

5 runder af 7 cleans og 15 handstand pushups
Alternativ øvelse til handstand pushups: 3 pushups pr. HSPU
Navn på workout: Cindy
Redskaber brugt: barbell
Kategori: Repetationer per runde

eller sådan:

3 runder på tid af:
400 meters løb
25 kg dumbbell swings
12 Pull-ups

Navn på workout: Helen
Redskaber brugt: dumbell
kategori: tid per runde

Håber det måske gav lidt mere ide om hvad det er jeg ønsker eller må i endeligt sige til, så vil jeg prøve at uddybe.

Mvh
13. november 2009 - 07:26 #2
Hvad du beskriver synes mig en udemaerket foerste skitsering af en struktur for en traeningsprogram-database (med det forbehold at jeg intet ved om Crossfit.)  Jeg har siddet og brainstormet lidt og har de foelgende bemaerkninger:

Saadan som du beskriver det saa kunne man hvad struktur angaar sammenligne et traeningsprogram med en indkoebsordre der bestaar af et antal indkoebsordre linier.  Et grundelement i databasen vil nok vaere en oevelse (push-up, loeb, pull-up).  Til visse oevelser bruges redskaber, og oevelser kan vaere alternativer til hinanden.

Saa man kunne taenke paa disse tabeller:

REDSKAB med redskab-id og navn.

OEVELSE med oevelses-id og navn.

En saerskilt tabel for ALTERNATIV med alternativ-id, oevelse-1-id, antal-1, oevelse-2-id, antal-2.  (Hvis 1 HSPU = 3 pushup og hvis oevelses-id for HSPU er 25 og for pushup 12 saa fyldes tabellen saaledes ud: [alternativ-id], 25, 1, 12, 3)

TRAENINGSPROGRAM med traeningsprogram-id og navn (saasom Helen)

ELEMENT med element-id, traeningsprogram-id, oevelses-id, antal (linie 1  Helen, 400m loeb, 3, linie 2 Helen, 25kg dumbbell, ?antal, linie 3 Helen, pull-up, 12

Saa der der fremmednoegle fra ELEMENT til traeningsprogram-id og fra ELEMENT til oevelses-id, fremmednoegle i OEVELSE til redskab-id, og to fremmednoegler i ALTERNATIV til oevelses-id.

Saa et par spoergsmaal: 

Hvad vil man, essentielt, ognaa med Crossfit?  Hvordan maaler man kvaliteten af et traeningsprogram?  Bare for at vise hvor lidt jeg forstaar saa kunne man forestille sig at man vil braende kalorier af, og saa kunne man i oevelsestabellen tilfoeje et tal for kalorieforbrug saaledes at man for hvert oevelsesprogram ville kunne generere et tal for hvor "stort" det er (hvis man lige har tid til et lille program inden tv-avisen kommer eller man har sat loerdag morgen af til den helt store tur.)

Hvordan vil du bruge databasen?  Er det kun (eller primaert) til privat forbrug, omtrent (undskyld sammenligningen) som en privat samling af madopskrifter?  Som man maaske vil lade sine crossfit-venner kikke i og hvor man kunne tilfoeje nye traeningsprogrammer som man har fundet i et blad eller selv har komponeret?  Saa ville du maaske have brug for en tabel TRAENING for dine traenings-oplevelser med dato, traenings-program-id, navn (hvis mere end en person kan bruge den), bemaerkning, og maaske rating  Saa vil du naar du udsoeger dig dagens traeningsprogram kunne tage i betragtning dine erfaringer.

Eller skal det kunne udbredes til organisations-brug hvor en traener skal kunne laegge programmer til rette for begyndere, viderekommende, medlemmer med specielle behov..  Saa skal REDSKAB nok udbygges med eksemplarnummer og lignende saa man kan undgaa at bruge flere dumbells end klubben har, og OEVELSE skal nok udbygges med oplysninger om muskelgrupper traenet og lignende.
15. november 2009 - 01:12 #3
nicolailissau, saa du mine bemaerkninger?  Var de hjaelpfulde?  (Jeg lagde "min sjael" i besvarelsen og jeg er spaendt paa din reaktion.)
Avatar billede nicolailissau Nybegynder
16. november 2009 - 09:38 #4
Hej Christian.

Tak for din besvarelse.

Mit internet har været gået ned og jeg har derfor ikke haft mulighed for at svare tilbage.

Det lyder som en god opdeling den du kommer med, men kan du forklare lidt nærmere om fremmednøgler? Den del forstår jeg ikke helt.

Siden skal fungerer som opslag i de træningsprogrammer som bliver lagt ud på crossfit.com. Crossfit.com fungerer mere som en blog, hvor de ligger de programmer ud de laver. Ideen er at lave en samlet database over træningsprogrammerne, således at de bliver lettere at overskue og hurtigere at finde et passende program.

Kalorieforbrug, kommentarer, muskelgrupper osv. er gode ideer, men er ikke en del af første prototype ihvertfald. Måske senere :)

Men siden planlæggger jeg at skulle blive lagt ud offentligt, til alles brug.

Mvh
16. november 2009 - 11:12 #5
"Fremmednoegle" er dansk for "Foreign Key."  Man anbringer i tabel a en foreign key til tabel b for at sikre sig at der kun kan indsaettes vaerdier i tabel a der eksisterer i tabel b.  For eksempel en tabel "oevelse" med oevelsesnavn og redskab og en tabel "redskaber" med navn og oplysning om de enkelte redskaber.  Hvis man laegger en foreign key fra oevelser til redskaber saa risikerer man ikke, for eksempel, at nogen indfoerer oevelser med dombells og andre indfoerer oevelser med dombels.  Foreign Keys er ikke noedvendige for at kunne foretage soegninger i flere tabeller men det sikrer den saakaldte "referentiele integritet."

Som demonstration lavede jeg en mini-database med disse tabeller og vaerdier:

CREATE TABLE nico_redskaber(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, navn VARCHAR(30))

INSERT INTO nico_redskaber(navn) VALUES('dombels');
INSERT INTO nico_redskaber(navn) VALUES('50 kg weight');
INSERT INTO nico_redskaber(navn) VALUES('steps');

CREATE TABLE nico_oevelse(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, navn VARCHAR(30), redskaber VARCHAR(30), FOREIGN KEY (redskaber) REFERENCES nico_redskaber(navn))

INSERT INTO nico_oevelse(navn, redskaber) VALUES('pushups', NULL);
INSERT INTO nico_oevelse(navn, redskaber) VALUES('armstraek', 'dombels');
INSERT INTO nico_oevelse(navn, redskaber) VALUES('op og ned', 'steps');

og en mini-hjemmeside http://christianjorgensen.be/nicolailissau.php hvor jeg ved hjaelp af php tester databasen med denne query: 

SELECT o.navn, r.id, r.navn
FROM nico_oevelse o
JOIN nico_redskaber r ON o.redskaber = r.navn
WHERE o.navn = 'op og ned'

Jeg tillader mig at oprette dette som et svar idet jeg mener at have besvaret dit spoergsmaal. 

Held og lykke med projektet.  Du skal vel have flere spoergsmaal efterhaanden som du skrider frem, men for saadanne boer du oprette nye spoergsmaal.  Det giver muligheden for at de medlemmer af eksperten der maaske har flere eller bedre ideer end jeg kan svare.
Avatar billede nicolailissau Nybegynder
16. november 2009 - 11:40 #6
Mange tak. Jeg arbejder lidt videre med det :)
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