Skall bygga en liten bokningskalender för vår klubb, av vissa träningstillfällen. Men jag skulle önska lite förslag på upplägg av databas (Access) för att det skall bli så smidigt som möjligt. Hej! Ok, en sådan lösning var jag åxå inne på ... 1:a normalformen går ut på att varje fält i databasen (cell i tabellen) skall innehålla endast atomära värden. Alltså inga listor eller liknande i ett fält."Tanke-hjälp".....
Förutsättningar :
Endast Måndagar är bokningsbara.
3 timmar bokningsbara varje måndag. (17-18, 18-19, 19-20)
Kunna boka 3 aktiviteter per timme. (alltå totalt 9 tillfällen per måndag = 9 styck medlemmar)
Bokning mellan Måndag kl. 16.00 -- 21.00 inte tillåtet.
En medlem får endast boka ett tillfälle per måndag. (alltså inte både kl. 17-18 & 18-19.. typ)
Bokning kan endast ske tills måndagen FÖRE.
Exempel...
*) i dag e det Söndag (9/11). Skall endast kunna boka Måndagens (10/11) aktiviteter, fram till kl. 16.00.
*) Måndag (10/11) boka fram till 16.00, för samma dag, dvs måndag 10/11.
*) Bokning mellan 16.00 -- 21.00 (på måndagar) inte tillåtet.
*) Måndag (10/11) kl 22.00, bokning kan ske för Måndag 17/11
Man kan alltså inte boka FLERA dagar på en gång, endast en vecka i taget.
För att kunna boka en tid, så är man inloggad som medlem.
Idé att man bygger en tabell som ser ut så här::
fält:id ---- räknare
fält:datum ---- text
fält:tt_1_1 ---- tal
fält:tt_1_2 ---- tal
fält:tt_1_3 ---- tal
fält:tt_2_1 ---- tal
fält:tt_2_2 ---- tal
fält:tt_2_3 ---- tal
fält:tt_3_1 ---- tal
fält:tt_3_2 ---- tal
fält:tt_3_3 ---- tal
:: där 1_ står för tid 17-18, 2_ = 18-19, 3_ 19-20
:: där _1 står för aktivitet 1, _2 = aktivitet 2, _3 = aktivitet 3
exempel:
1_2 = 17-18, aktivitet 2
3_3 = 19-30, aktivitet 3
I dessa fält ( tt_*_* ) , sparar man medlemmens ID....
För att boka så visar man aktuell måndag.
De fält:tt som har fått en bokning sätter man en liten bild på, på HTML-sidan, som visar att tiden är upptagen, och när man för musen över bilden, så visas namnet på den som bokat som en "alt-text" till bilden....
För de fält:tt som är lediga, visar man en tom "kryss-ruta" (checkbox). När man kryssar i, så uppdateras automatiskt db, (den inloggades id, sparas för den fält:tt man kryssat i). Sidan laddas om och då är det en liten bild där.
Hit har jag nog kommit....
*) Hur skall man göra för att INTE tillåta bokningar mellan 16.00 -- 21.00 ?
*) Hur kan en sql-sträng se ut för att få fram "rätt" måndag ?
*) Skall man lägga in alla måndagar i db i förväg ? eller skall man lägga till måndagen först då någon bokar en tid ?
Rapporter att kunna få fram....
*) Antal/vilka träningstillfällen för varje medlem.
*) Hur bokningarna såg/ser ut en viss dag
Ja, det va en del... Hoppas att ni kan hjälpa till lite med erfarenheter av liknande och/eller tips&idéer på lösningar !! Eller om ni har helt andra åsikter hur db skall byggas upp ;-?
// Mikke-mus -- datorMUSSv: "Tanke-hjälp".....
Jag tycker du är ute på hal is när du vill tränga in en massa information om olika saker i ett och samma fält. Då bryter du faktiskt mot 1:a Normalformen ! (en helig lagtext för alla utvecklare av relationsdatabaser),
och det är ju ingen bra början i ditt lilla projekt.. :)
Jag tycker du ska börja med att fundera på en lösning med tre tabeller, minst.
MEDLEM
PASS
BOKNING
I PASS har du helt enkelt dina regler för bokningsbara pass (veckodag, tidpunkt)
(det gör ju att systemet blir flexibelt om man t.ex. ändrar sig och vill boka tisdagar)
Fält i PASS:
* pass_id
Veckodag
StartTid
SlutTid
Fält i Medlem
* medlem_id
Namn
osv
Fält i Bokning
* bokn_id
datum
pass_id
medlem_id
Du kan generera bokningsbara pass genom att läsa i din PASS-tabell och skapa det du vill ha i ditt gränssnitt, baserat på denna information, och göra detta för X veckor framåt.
OlaSv: "Tanke-hjälp".....
Men visste inte vilket som var "bäst"....
....men hur lyder normalformen då ;-)
MedlemsTBL har jag ju redan.....
så det blir inte så mycket extra.
Har du även nga funderingar kring övriga frågor....
// MikkeSv: "Tanke-hjälp".....
Läs mer här: http://www.ida.liu.se/~tompa/databaser/normalisering.html
Dina övriga frågor:
-att man inte får boka en viss tid. Det kan du hårdkoda som en regel, eller för en mer flexibel lösning läs in regeln från tabellen REGLER :)
SQL exempel för att hämta dagens bokningar:
SELECT Veckodag,StartTid,SlutTid, Namn
FROM Pass, Medlem, Bokning
where Pass.pass_id=Bokning.pass_id
AND Medlem.medlem_id = Bokning.medlem_id
AND Bokning.datum = Date()
Du lägger inte in alla måndagar i förväg, du lägger bara in att veckodag måndag är en bokningsbar dag som innehåller några bokningsbara pass.