Projekt bazy danych-możliwość rezerwacji miejsca w danym dniu i godzinie

0

Witam,

chciałbym zrobić bazę danych sal lekcyjnych i czasu kiedy są zajęte a kiedy nie + możliwość ich rezerwacji.
Wyglądałoby to tak:
1.Użytkownik loguje się na stronę
2.Wybiera sale i dzień
3.Wyświetlają mu się godziny kiedy sala jest zajęta
4.Rezerwuje salę na daną godzinę.

Dodatkowo chciałbym dodać opcję planu całorocznego, czyli admin może sobie wprowadzić plan zajęć na tydzień i będzie on powielany przez cały rok.

Tutaj pytanie, jak to dobrze zrobić?

Na pewno tabela Uzytkownik, a w niej id, imie, nazwisko, haslo do logowania. Teraz id_sala (klucz obcy) który może być nulem, oczywiście jeden do wielu, w sensie że wiele sal może zarezerwować., tak byłoby ok?
Tabela sala: tutaj właśnie nie wiem jak to zrobić, skoro ona może być zajęta w wielu dniach/godzinach i muszę to potem odczytywać, a w dodatku muszę zrobić tak, aby można było wprowadzić cały tygodniowy plan na raz.
Jakieś pomysły? Podpowiedzi?

Coś takiego miałoby sens?
user image

Z góry wielkie dzięki ;)

0

coś obrazek się nie wstawił, więc podaje link
http://postimg.org/image/wjyk8jl2v/

0

podbijam,
Na pewno muszę zrobić tabelę z godzinami i połączyć jeden do wielu z datą (czyli dniem).
Jak przechowywać godziny? Dwie kolumny od i do? Tylko co to ma być text?
Potem potrzebuje to zaznaczać jakoś na stronie i tak, żeby godziny nie mogły się nakładać.

Ktoś pomoże?

2

@newbienewbiewnewbie
uzytkownicy(id,imie,nazwisko,haslo) !! nie wkladaj tutaj id_sali
sale(id,nazwa) !! po prostu sale
rezerwacje(id,od,do,id_sali,id_uzytkownika) !! od do to date / timestamp

to wystarczy do całej twojej logiki ;]

0

ok, super. Dzięki wielkie ;)
Teraz mam pytanie jak to ładnie ogarnąć w javie?
Robie sobie DAO i serwis Rezerwacji i to wystarczy?

Potrzebuje potem by user klikał sobie dzień z kalendarza i wyświetały mu się 3 tabele - dzień wcześniejszy, ten który wybrał i następny. W czasie którym sala będzie zarezerwowana, "zamaluje" na czerwono, a jeśli jest wolna to można będzie zaznaczyć jakimś check boxem, czy coś żeby zaerwerwować ;)

  1. Idąc drogą podaną przez Ciebie, to jeśli użytkownik podaje 2015-09-01 to muszę szukać po OD z rezerwacji? Ciężko to mam to sobie wyobrazić póki co, żeby to dobrze działało.
  2. Jak wstawiać roczny plan, czyli w każdy poniedziałek, wtorek itd. dany plan?

Wstawiam obrazek, sory że w paincie ale nie ma mnie w domu aktualnie, a chciałem to jakoś zobrazować na szybko ;D
http://postimg.org/image/8vohirmu9/

user image

Dzięki za podpowiedzi ;)

1

Poszukaj sobie kontrolek z wyborem godziny, w najgorszym wypadku sam zrób sobie rozwijana listę z godzinami i druga z minutami (co 5 albo 10 minut, albo pół godziny, jak uważasz lepiej będzie)

Co do szukania to tak można właśnie by było zrobić. I jak wyciągnie Ci te dane to w okresie rezerwacji zaznaczać ze zajęte na reprezentacji dnia.

Co do rocznego planu pokaż tylko jeden dzień albo tydzień i potem palisz logikę duplikowania tego na każdy tydzień w roku w backendzie. To powinna być całkiem osobna akcja /metoda ze względu na to ze to inny biznesowego proces od pojedynczej rezerwacji.

0

ok, dzięki Ci bardzo ;) trochę mi się to wszystko rozjaśnia.
To, że dodawanie rocznego planu to inna sprawa to wiem, ale to też problem nad którym myślałem ;)

Tylko teraz jeszcze, jeśli będę przechowywał w OD i DO jako date i czas. To jeśli użytkownik z kalendarza poda tylko date, w formacie np 2015-09-01 to jak to wyszukać, skoro tam jeszcze jest czas w zmiennej? :)

2

@newbienewbienewbie jeżeli użytkownik poda tylko date np. 2015-09-01 i chcesz np. wszystkie rezerwacje z tego dnia to robisz:

od 2015-09-01 0000:000
do 2015-09-01 2359:999

i takiego selecta robisz przez tego hibernate. operuj tam sobie na javowym Date a te date truncate możesz ładnie zrobić z pomocą np. JodaTime , DateUtils od Apache
no masz pełno bibliotek.

0

ok! :)
Czyli tak... czy dobrze to ogarniam:
Pobieram od użytkownika date.
Robię sobie z tego zmienne z czasem podanaDataOD (np 2015-09-01 0000) i podanaDataDO
Teraz robię selecta w stylu select * from rezerwacje where rezerwacje.od>podanaDataOD and rezerwacje.do<podanaDataDO
//jeśli pomieszałem w tym prowizorycznym zapytaniu to sorry, ale sql dopiero ogarniam ;)
To mi zwraca List<Rezerwacje> jak to teraz wysyłać do widoku, gdzie miałbym tabele z warunkiem, że jeśli przesłana wartość nie jest nulem to maluj na czerwono itd? :)
trochę mi się miesza to ;)

0

co to za WTF mi się zrobił na górze..

select * from rezerwacje where rezerwacje.od>podanaDataOd and rezerwacje.do>podanaDataDO
o takie zapytanie mi chodziło wyżej

1

no wyślij to do widoku teraz. nwm jaki masz widok? może jakieś dtosy albo coś. pamiętaj, że ostatecznie zawsze taki program możesz zakupić u mnie

0

dobra, może jakoś to ogarnę ;)
Dzięki za podpowiedzi ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1