Hej, Jag skulle ange intervall i form av Från datum, till datum. På så sätt kan en bokning var en dag, flera dagar, en vecka flera veckor, en måndad. Du har en tabell med stugor Okej tack för jättebra hjälp och tips, Stämmer bra, varje bokning ska ha en egen rad i bokningstabellen. Suveränt! Återkom bara om det blir bekymmer. Om du har en bookningstabell med ett startdatum och slutdatum som thomas föreslog så kommer du få få en lite mer komplicerad SQL sats för att finna om just denna stuga är bokad denna dag. Hmmm. Jag som trode jag var fösrst med att föreslå det. Men där ser man. :oPBokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Jag håller på med ett bokningssytem för stugor med access databas och ASP.
Jag har följande tabeller just nu med primärnyckel* och koppling till id.
MS Access tabeller
Stugtyper (StugtypID*)
Stugor (StugID*, StugtypID)
Kunder(kundID*)
Bokningar(BokningsID*,StugID,kundID)
Kriterier
- Under varje stugtyp finns ett antal stugor.
- En stuga kan bokas under hela året dvs 365 dagar per år.
- En stuga kan bokas per dag eller per vecka.
- En stuga får ej dubbelbokas.
- När en bokning är slut och kunden åkt hem tags kunden bort i kundtabellen och bokningen raderas.
- En kund bokar en stuga men kan inte lägga på fler bokningar till redan lagd bokning - ett nytt bokningsnr (BokningsID) skapas istället för den kunden.
Frågor
Hur skapar jag sedan en tabell för att hålla reda på en stuga 365 dagar om året? Stugan kan bokas per dag eller per vecka och jag måste hålla reda på vilken dag, vilket år och vilken vecka.
Gör jag 1 tabell för varje stuga med 365 poster i? Tycker att det blir så mycket tabeller...
Snälla tacksam för stor hjälp så jag inte gör helt fel i begynnelsen.Sv: Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Sv: Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
En tabell med bokningar och en foreign key till stugan som är bokad
I bokningstabellen har du som Andreas redan skrev ett från datum och ett till datum
Sedan kan du har en tabell med kunduppgifter också som kopplas ihop med bokningarna
Så det hela blir tre tabeller totalt med enkla foreign keys.
stuga
--------------------
id
stugnr + annan data
kund
--------------------
id
namn etc...
bokningar
--------------------
id
stuga_id
kund_id
från datum
till datum
Sedan får själva applikationen ta hand om och enbart ge möjligheter att boka en dag, vecka eller vad som nu krävs...Sv:Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Om en kund kommer då och vill boka Stuga1.
Kund A vill boka Stuga1 v3 år 2006 och v5 år 2007.
Sen kommer kund B och bokar Stuga1 v4 2006.
Hur löser man detta då i tabellen? Hålls allting reda på genom datat i kolumnerna från datum och till datum?
Hur blir det om Kund C bokar sin stuga dag 1 och dag 3 och kund D bokar dag 2. Då får ju kund C
2 olika poster i tabellen bokningar med Från datum och Till datum...?
Bara så jag fattar själva kontrollen...Sv: Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Men varje kund har enbart en rad i kund tabellen.
Se det som såhär, en kund kan boka en eller flera stugor.
En bokning kan bara ha en stuga och en kund
En stuga kan ha flera bokningar, bara de inte är på samma datum.
Vill kund A boka en stuga för dag 1 och 3 och kund B vill boka samma stuga för dag 2 går detta bra...
Det blir tre rader i bokningstabellen, två för kund A och en för kund B.
Vill däremot kund B boka för hela veckan som kund A har bokat två dagar på går det inte, men eftersom du använder dig av access måste du göra kontrollen så att de inte krockar i din applikation. Kanske går att göra i Access, men jag har inte jobbat något med restrictions i Access. Andra större databaser erbjuder en mängd andra möjligheter för att kontrollera att datat som matas in alltid är korrekt.
Men en kontroll från applikationens sida borde inte vara speciellt svår. Det enda det går ut på är egentligen är att kontrollera vilka datum som är lediga för en viss stuga och se till att en bokning inte hamnar mitt i någon annans bokning.
Det finns bland annat BETWEEN du kan använda i SQL, men det måste nog kombineras med lite andra algoritmer i applikationen.
Och som Chatarina Andersson skrev så ska du inte radera saker från databasen som redan har skett. Om en avbokning sker kan du självklart radera denna bokning, eller på annat sätt markera att den är avbokad.Sv:Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Nu fattar jag nog. Jag märker denna forum post som Löst - då jag tror jag klarar av att stapla upp min databas med den hjälp jag fått.
Men man vet aldrig om jag återkommer =)
Tack!Sv: Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Det som man bör tänka på vid design av databaser är att inte göra en tabell för varje objekt utan se till att varje objekt av samma typ hamnar i samma tabell.
Själva databasens design ska inte behöva ändras bara för att man beslutar sig för att till exempel bygga en ny stuga eller för att vi helt plötsligt får 400 dagar per år ;)Sv:Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Säg att du har bokat stuga 1 under v1 2006. Alltså 2-8 januari. Om jag då vill boka stugan den 3/1 eller den 5-10/1 eller den 31/12-05 till 4/1-06 och sist men inte lättas 31/12-14/1 så skall det också fallera. Alla exempel ovan måste komma tillbaka med att stugan redan är upptagen och inte kan bokas detta intervall. Det blir en rätt kymmig SQL sats för att kontrollera om stugan är upptagen eller inte.
Ett annat alternativ som gör det lite lättare är att normalisera sin databas ytterligare. Du får 2 tabeller till:
tblBookedDay
-------------------
ID|Date
tblBookedDay_Cabin
-----------------------------
ID|BookedDayId|CabinId
Detta gör att för varje dag som kan bokas så kommer det komma en post i bookedday, du måste alltså kontrollera om du för denna dag redan finns en post och så fall använda det ID, eller sätta in en ny post.
Sedan sättar du in ditt nya/gammla bookeddayId tillsammans med din cabinId i tblBookedDay_Cabin och på detta sättet så kan du bygga en lite enklare SQL fråga för att kontrollera om stugan råkar vara bokad just det datum som du vill boka på. Det kommer dock ge dig lite mer komplicerad SQL för att visa vilka dagar som en stuga är bokad. Men är mer korrekt hur man bygger databaser.
- MSv: Bokningssystem av stugor - tabell för att hålla reda på stugor och dagar?
Jag tycker det är en relativ enkel sats. Följande SQL sats hämtar bokningarna under perioden @Start till @Slut:
SELECT Count(*) AS AntalBokningar
FROM Bokningar
WHERE @Start < BokningsSlut AND @Slut > BokningsStart
Så innan uppdatering kontroller man om det existerar några poster under angiven period.
Om man redigerar en post bör man utesluta id för den post man redigerar:
SELECT Count(*) AS AntalBokningar
FROM Bokningar
WHERE @Start < BokningsSlut AND @Slut > BokningsStart AND NOT @Id = BokningsId