Projekt bazy danych SQL

0

Witam, robię aplikacje webowa z wykorzystaniem bazy danych. Chciałbym poradzić się kogoś mądrzejszego ode mnie czy prawidłowo zaprojektowałem bazę danych. Ogólnie aplikacja będzie służyła do harmonogramowania usług. Ktoś ma jakąś usługę (niech to będzie szkoła jazdy) - zakłada sobie konto, wystawia usługę, tworzy harmonogram z konkretną datą, godziną. Inny użytkownik może zapisać się na dany termin - wtedy wartość kolumny CzyDostepne jest zmieniana na false, a do tabeli UzytkownikHarmonogram dodawany jest id użytkownika i id harmonogramu, który użytkownik zarezerwował . Mam nadzieję, że mniej więcej wiadomo o co chodzi. Wrzucam w załączniku model wykonany w Workbench'u.

Głównie chodzi mi o rozwiązanie z tabelą "Harmonogram" - czy rozbijać to na jeszcze jedną tabelę przechowującą terminy i w "Harmonogram" tylko dopisać ID jakiegoś terminu, czy może jeszcze inaczej. Liczę na pomoc.

0

Dlaczego w harmonogramie godziny są typu double ?

0

To tylko tak na szybko robione, wszystko będzie miało odpowiedni typ (Time bądź DateTime).

0

A ja nie bardzo ten schemat rozumiem.
Ktoś ma szkołę jazdy i dodaje swoją usługę w systemie. Wyobrażam sobie, że wklepuje, że np 20.11.2017 jest dostępny w godzinach 12:00 - 15:00, później odbiera dzieci ze szkoły, ale między 18:00 a 22:00 znowu jest dostępny.
Wstawia więc dwa rekordy do bazy:

ID Data Start Koniec CzyDostepny UslugaID
1 2017-11-20 12:00 15:00 0 1
2 2017-11-20 18:00 22:00 0 1

I jak do tego ma się dopisać ktoś, kto chce zarezerwować jedną godzinę o 13:00?

0

Taka sytuacja : szkoła jazdy wystawia dostępność od np 12 dp 15 tej. 3 godz. Uzytkownik chce zarezerwować tylko godzine. W tablicy UzytkownikHarmonogram nie masz info ile godzin zarezerwował. Do tego w tablicy Harmonogram odznaczysz CzyDostepny na false. Czyli teoretycznie szkola jazdy ma jeszcze wolne 2 godz ale nikt juz ich nie zarezerwuje

0

napisałeś w komentarzu "
Dopisuje ewentualnie kolumnę IleGodzin w UzytkownikHarmonogram. Pytanie do Ciebie czy to miałeś namyśli podsuwając taki pomysł. Nie wiem czy byłoby to lepsze i bardziej optymalne/wydajne od tego co zaproponowałem. Bo w tym przypadku co napisałeś, nie widzę innego rozwiązania niż 'rozbicie' godzin i dodanie kolejnego rekordu do tabeli. Wychodzi na jedno w sumie, tylko jeśli usługodawca określi konkretne terminy nie ma tej zabawy z 'rozdzielaniem' terminu. Jak to widzisz?"
No więc tak :
jeśli najmniejszą jednostką czasu jest godzina, to w tablicy Harmonogram możesz zostawić tylko pole GodzinaOd. Czyli jeśli szkoła jazdy jest dostępna w godzinach od 12 do 15 to wstawiasz 3 rekordy : 12,13,14. Użytkownik wybiera godzinę, która go interesuje, czyli w tablicy UzytkownikHarmonogram wystarczy tylko id użytkownika i id godziny z harmonogramu. nie było by potrzeby wtedy cokolwiek rozbijać.
Chyba że od razu założyłeś że w tablicy Harmonogram GodzinaPoczątek - GodzinaKoniec będzie obejmowała tylko jedną godzinę. czyli dostępnośc od 12 do 15 wpiszesz jako 3 rekordy.

1

Czyli jeśli szkoła jazdy jest dostępna w godzinach od 12 do 15 to wstawiasz 3 rekordy : 12,13,14

Absolutnie sie z tym nie zgadzam. Najgorsza rzecza jest pakowanie do bazy nadmiarowych danych, ktore byc moze w ogole nie zostana uzyte

0

czyli uważasz, że lepiej jest wpisać jeden rekord z godzinaOd 12 GodzinaDo 15 i jeśli użytkownik wybierze godzinę np. od 13 do 15 to potem wpisywać dwie wolne godziny jako dwa rekordy 12-13 i 14-15 ? .Czy lepiej w tablicy UzytkownikHarmonogram dodać jeszcze pola godzina od - do oznaczające w jakich godzinach użytkownik wybrał usługę?

0

Jedna tabela przechowuje godziny dostępności i granulację usługi (czy tam czas trwania jednej z nich) usługodawcy.
Druga tabela przechowuje informacje o zajętych terminach usługodawcy i klientach, którzy je zajęli.

Baza danych ma trzymać dane, a nie być odwzorowaniem 1:1 interfejsu użytkownika (takie rzeczy tylko w Excelu ;)). To zadanie aplikacji - pobrać dane z bazy, zinterpretować je i wyświetlić użytkownikowi.

0
Zwrob napisał(a):

Czyli jeśli szkoła jazdy jest dostępna w godzinach od 12 do 15 to wstawiasz 3 rekordy : 12,13,14. Użytkownik wybiera godzinę, która go interesuje, czyli w tablicy UzytkownikHarmonogram wystarczy tylko id użytkownika i id godziny z harmonogramu. nie było by potrzeby wtedy cokolwiek rozbijać.

No okej ktoś sobie chcę o 12 wziąć 2h to gdzieś ta liczba godzin musi być zapisana. I co wtedy z tą 13? Tak jak ktoś napisał shagrin, dane mogą być niewykorzystane już po pierwszej rezerwacji jeśli ktoś sobie weźmie o tej 12 dwie godziny.

Zwrob napisał(a):

czyli uważasz, że lepiej jest wpisać jeden rekord z godzinaOd 12 GodzinaDo 15 i jeśli użytkownik wybierze godzinę np. od 13 do 15 to potem wpisywać dwie wolne godziny jako dwa rekordy 12-13 i 14-15 ? .Czy lepiej w tablicy UzytkownikHarmonogram dodać jeszcze pola godzina od - do oznaczające w jakich godzinach użytkownik wybrał usługę?

Raczej usługodawca ustala godziny od - do, użytkownik tylko wybierze te, które go interesują.

somekind napisał(a):

Jedna tabela przechowuje godziny dostępności i granulację usługi (czy tam czas trwania jednej z nich) usługodawcy.
Druga tabela przechowuje informacje o zajętych terminach usługodawcy i klientach, którzy je zajęli.

Jeśli przechowywane są godziny dostępności, to w jakim celu jeszcze czas trwania?

Tabela Harmonogram

Id GodzinaOd GodzinaDo CzyDostepne UslugaId
1 12:00 14:00 0 1
2 14:00 15:00 0 1

Jeśli ktoś (uzytkownikId=1) zarezerwował pierwszy termin (Id=1) to CzyDostepne zmieniane jest na 1, a tabela HarmonogramUzytkownik(Rezerwacje) wygląda tak:

HarmonogramId UzytkownikId
1 1
0

ok, pytanie : dla harmonogramu o id=1 masz dostępne 2 godz, od 12:00 do 14:00. Czy dopuszczasz możliwość zarezerwowania w tym czasie tylko jednej godziny, np. od 12 do 13 ?

0
Riko94 napisał(a):

Jeśli przechowywane są godziny dostępności, to w jakim celu jeszcze czas trwania?

Godziny dostępności, czyli np. 8:00 - 18:00. Granulacja, czyli np. 1h.
Czas trwania po to, aby wiedzieć, które godziny zostały zużyte.
Potem na podstawie danych z tych dwóch tabeli można wyliczyć, które godziny są jeszcze wolne.
Mam rację?

0
Zwrob napisał(a):

ok, pytanie : dla harmonogramu o id=1 masz dostępne 2 godz, od 12:00 do 14:00. Czy dopuszczasz możliwość zarezerwowania w tym czasie tylko jednej godziny, np. od 12 do 13 ?

Raczej nie. Zależy jak usługodawca to ustali. On wystawia usługę i tworzy konkretne terminy.

somekind napisał(a):

Godziny dostępności, czyli np. 8:00 - 18:00. Granulacja, czyli np. 1h.
Czas trwania po to, aby wiedzieć, które godziny zostały zużyte.
Potem na podstawie danych z tych dwóch tabeli można wyliczyć, które godziny są jeszcze wolne.
Mam rację?

Nie do końca rozumiem co masz na myśli. Usługodawca ustala dostępność czyli 8:00 - 18:00 i czas trwania 1h. I to ma być jedna tabela?
W drugiej natomiast podawany jest id harmonogramu, godz. rozpoczęcia, czas trwania (zakładając, że użytkownik będzie mógł wybrać czas trwania, gdzie najmniej to 1 godzina) i id użytkownika, który to zarezerwował? Dobrze zrozumiałem?

0
Riko94 napisał(a):

Nie do końca rozumiem co masz na myśli. Usługodawca ustala dostępność czyli 8:00 - 18:00 i czas trwania 1h. I to ma być jedna tabela?
W drugiej natomiast podawany jest id harmonogramu, godz. rozpoczęcia, czas trwania (zakładając, że użytkownik będzie mógł wybrać czas trwania, gdzie najmniej to 1 godzina) i id użytkownika, który to zarezerwował? Dobrze zrozumiałem?

Spróbuję narysować:

HarmonogramUsług

Id IdFirmy Początek Koniec CzasTrwaniaWMinutach DzienTygodnia Data
1 997 8:00 18:00 20 Pn null
2 997 8:00 16:00 60 Wt null
3 997 8:00 12:00 30 Śr null
4 997 14:00 18:00 60 Śr null
5 997 8:00 16:00 60 Czw null
6 997 8:00 12:00 15 null 24.12.2016

Czyli firma w poniedziałki pracuje o 8 do 18 i oferuje wizyty 20 minutowe, we wtorki i czwartki od 8 do 16 oferuje wizyty 60 minutowe, a w środy między 8 a 12 oferuje wizyty 30 minutowe, a między 14 a 18 wizyty 60 minutowe.
Ponadto w wigilię pracuje od 8 do 12 z wizytami 15 minutowymi.

Ta struktura pozwala Ci opisać dowolną dostępność czasową usług. Możesz oczywiście trzymać okresy dostępności (czyli dwie ostatnie kolumny) w oddzielnej tabeli, żeby pozbyć się tych nulli. (Ale za to będziesz miał joiny.)

Druga tabela:
WykorzystanieUsług

Id IdKlienta IdFirmy DataCzas
1 123 997 13.12.2016 10:00
2 666 997 14.12.2016 08:30
1 666 997 14.12.2016 09:00

Klient 123 zarezerwował 13 grudnia termin na 10:00, a klient 666 zarezerwował dwa terminy 14 grudnia (o 8:30 i o 9:00, czyli w praktyce godzinę). W ten sposób możesz przechowywać informacje o dowolnie dokonanych rezerwacjach.
Sprawdzenie jak długo trwa ta zarezerwowana wizyta jest dość proste:

  1. Jeśli dla danej firmy podana data występuje w tabeli HarmonogramUsług, odnajdź właściwy zakres godzin i odczytaj wartość.
  2. Jeśli dla danej firmy podana data nie występuje w tabeli HarmonogramUsług, oblicz z niej dzień tygodnia, odnajdź właściwy zakres godzin i odczytaj wartość.
0

Mam 2 pytania:
HarmonogramUslug - czwartek i wtorek są zdublowane, to chyba nie jest najlepsza opcja? (Poza tym dzień tygodnia powinien być oznaczany 1-7 lub 0-6)

WykorzystanieUsług - po co wpisywać dwa rekordy (8:30, 9:00 zamiast ilości jednostek?

Id IdKlienta IdFirmy Start IloscJednostek
1 123 997 13.12.2016 10:00 1
2 666 997 14.12.2016 08:30 2
0
shagrin napisał(a):

Mam 2 pytania:
HarmonogramUslug - czwartek i wtorek są zdublowane, to chyba nie jest najlepsza opcja?

Na to pytanie odpowiedziałem dość niejasno w swoim poście:

Możesz oczywiście trzymać okresy dostępności (czyli dwie ostatnie kolumny) w oddzielnej tabeli, żeby pozbyć się tych nulli. (Ale za to będziesz miał joiny.)

Jak przeniesiesz "definicje czasu" do oddzielnej tabeli z kolumnami IdHarmonogramu, DzieńTygodnia, Data, to będziesz mogła jeden rekord HarmonogramUsług połączyć z wieloma odpowiadającymi mu dniami tygodnia.
Albo można DzieńTygodnia zrobić jako maskę bitową (Pn: 1, Wt: 2, Śr: 4, itd.), i wówczas wartość 10 oznacza np. wtorek i czwartek.

(Poza tym dzień tygodnia powinien być oznaczany 1-7 lub 0-6)

Jasne, zależało mi po prostu na czytelności przykładu, nie chciałem, aby ktoś tam wstawiał polskie skróty. :)

WykorzystanieUsług - po co wpisywać dwa rekordy (8:30, 9:00 zamiast ilości jednostek?
||=Id|| IdKlienta|| IdFirmy|| Start|| IloscJednostek
||1|| 123|| 997|| 13.12.2016 10:00|| 1
||2|| 666|| 997|| 14.12.2016 08:30|| 2

Może i tak byłoby lepiej. Dla mnie to szczególny przypadek (bo przecież nie trzeba brać dwóch pod rząd). Z drugiej strony, prawdopodobnie najczęściej rezerwowałoby się właśnie pod rząd. Albo i nie, to pewno zależy od rodzaju usługi.

0
somekind napisał(a):

HarmonogramUsług

||=Id||IdFirmy||Początek||Koniec||CzasTrwaniaWMinutach||DzienTygodnia||Data
||1||997||8:00||18:00||20||Pn||null
||2||997||8:00||16:00||60||Wt||null
||3||997||8:00||12:00||30||Śr||null
||4||997||14:00||18:00||60||Śr||null
||5||997||8:00||16:00||60||Czw||null
||6||997||8:00||12:00||15||null||24.12.2016

Ta struktura pozwala Ci opisać dowolną dostępność czasową usług. Możesz oczywiście trzymać okresy dostępności (czyli dwie ostatnie kolumny) w oddzielnej tabeli, żeby pozbyć się tych nulli. (Ale za to będziesz miał joiny.)

Tu bym polemizował jedynie z kolumną CzasTrwaniawMinutach, ja bym zrobił MinimalnyCzasTrwaniaWizytyWMinutach i przypisał to do firmy, bo jaki zakład usługowy na sztywno ustala, że w danym dniu tylko 60 minutowe wizyty...

somekind napisał(a):

Druga tabela:
WykorzystanieUsług

||=Id||IdKlienta||IdFirmy||DataCzas
||1||123||997||13.12.2016 10:00
||2||666||997||14.12.2016 08:30
||1||666||997||14.12.2016 09:00

Klient 123 zarezerwował 13 grudnia termin na 10:00, a klient 666 zarezerwował dwa terminy 14 grudnia (o 8:30 i o 9:00, czyli w praktyce godzinę). W ten sposób możesz przechowywać informacje o dowolnie dokonanych rezerwacjach.

Dla mnie nieelastyczne, bo jak zadzwoni klient że 14 wpadnie na 8 i wiem, że się wyrobię w 30 minut?
Tu bym jednak zmienił DataCzas na DataCzasOd i dodał kolumnę DataCzasDo gdzie różnica w minutach musi być > większa MinimalnyCzasTrwaniaWizytyWMinutach.
Rozważyłbym też dodanie kolumny zatwiedzonaPrzezFirmę bitową, ale to już sprawa drugorzędna...

@shagrin:
HarmonogramUslug - czwartek i wtorek są zdublowane, to chyba nie jest najlepsza opcja? (Poza tym dzień tygodnia powinien być oznaczany 1-7 lub 0-6)

@somekind sie machnął i ma dwie środy ;) wtorek i piątek mają takie same godziny przyjęć, ale nie są powielone bo dotyczą innego dnia tygodnia.

0
Panczo napisał(a):

Tu bym polemizował jedynie z kolumną CzasTrwaniawMinutach, ja bym zrobił MinimalnyCzasTrwaniaWizytyWMinutach i przypisał to do firmy, bo jaki zakład usługowy na sztywno ustala, że w danym dniu tylko 60 minutowe wizyty...

Przychodnia lekarska, jakakolwiek szkoła/kurs, fryzjer... w skrócie te wszystkie, do których umawia się na konkretne usługi na konkretne godziny.
Jeśli nie da się ustalić czasu długości wizyty, to cały problem nie istnieje, bo niemożliwe jest w takiej sytuacji stworzenie rezerwacji.

Dla mnie nieelastyczne, bo jak zadzwoni klient że 14 wpadnie na 8 i wiem, że się wyrobię w 30 minut?

Bo wiesz czym się zajmujesz i taką usługę świadczysz.

Generalnie wydaje mi się, że czas trwania wizyty powinien być jeden dla całej firmy, no bo przecież lekcja języka to zawsze 45 minut, godzina jazd z instruktorem to 1h, wizyta lekarska to 15 minut, a mycie samochodu osobowego to 2h. Ale może nie mam racji, dlatego zasugerowałem coś bardziej elastycznego, co pozwala na dowolne manipulowanie harmonogramem.
Ewentualnie można zamienić ten "czas trwania" w harmonogramie na złączenie z tabelą RodzajUsługi, która będzie przechowywała informacje o czasie trwania różnego rodzaju usług, jeśli firma oferuje usługi wielu typów o różnych czasach trwania.

Tu bym jednak zmienił DataCzas na DataCzasOd i dodał kolumnę DataCzasDo gdzie różnica w minutach musi być > większa MinimalnyCzasTrwaniaWizytyWMinutach.

Ok, można zrobić i tak - tylko po co w sumie ten minimalny czas trwania wtedy?
No i odbiję piłeczkę - jaki rodzaj usług wymaga czegoś takiego i na jakiej zasadzie precyzuje się ten czas trwania podczas umawiania klienta? I jak czas trwania usługi będzie ustalał użytkownik systemu, który tutaj projektujemy? (Bo jak rozumiem taka jest idea, żeby klienci sami siebie zapisywali.)

@somekind sie machnął i ma dwie środy

Nie, nie mam. Po prostu między 8:00 a 12:00 dostępne są wizyty półgodzinne, między 14:00 a 18:00 wizyty godzinne, a między 12:00 a 14:00 jest przerwa.

0
somekind napisał(a):

Przychodnia lekarska, jakakolwiek szkoła/kurs, fryzjer... w skrócie te wszystkie, do których umawia się na konkretne usługi na konkretne godziny.
Jeśli nie da się ustalić czasu długości wizyty, to cały problem nie istnieje, bo niemożliwe jest w takiej sytuacji stworzenie rezerwacji.

Szkoła, kurs nie wydaje mi się dobrym porównaniem, bo tam zapisuje się na konkretną jednostkę treningowa, która jest dostępna w konkretnych ramach czasowych, i nie mogę się wciskać w luki w harmonogramie, tylko działać w ramach ustalonych grafików.

Stworzenie rezerwacji na usługę nie może być procesem jednostronnym. W swoim przykładzie też podałeś że ktoś wykorzystuje 2 godziny, a ktoś inny jedną, ostateczną decyzje zawsze podejmuje właściciel/wykonawca harmonogramu. Rezerwacja terminu jest co najwyżej początkiem procesu. Przecież mój syn u fryzjera zajmuje 15 minut, żona czasem 2 i wiecej...

somekind napisał(a):

Ewentualnie można zamienić ten "czas trwania" w harmonogramie na złączenie z tabelą RodzajUsługi, która będzie przechowywała informacje o czasie trwania różnego rodzaju usług, jeśli firma oferuje usługi wielu typów o różnych czasach trwania.

To wydaje się sensowne

somekind napisał(a):

Ok, można zrobić i tak - tylko po co w sumie ten minimalny czas trwania wtedy?
No i odbiję piłeczkę - jaki rodzaj usług wymaga czegoś takiego i na jakiej zasadzie precyzuje się ten czas trwania podczas umawiania klienta? I jak czas trwania usługi będzie ustalał użytkownik systemu, który tutaj projektujemy? (Bo jak rozumiem taka jest idea, żeby klienci sami siebie zapisywali.)

Minimalny czas trwania, jest po to aby w ciągu godziny nie zapisało mi się więcej osób w cyklach np. minutowych...
Co do odbicia piłeczki to bardziej chyba w stronę OP-a, ale dla mnie:
Właściciel harmonogramu, może dawać terminy jak mu się podoba, bo to w końcu on tym zarządza. Całe te harmonogramy to próba okiełznania ludzi wpisujących mu dane do tegoż i ma mu to ułatwić opanowanie tego. Stąd proponowane pole bitowe, terminzatwierdzony. Patrząc na niektóre tego typu usługi, widzę, ze wybiera się usługę, która ma zdefiniowany czas trwania i na jej podstawie ustawia się w harmonogramie okres. I to wydaje się ok, zakładając, że potrafimy zdefiniować nasze usługi.

somekind napisał(a):

Nie, nie mam. Po prostu między 8:00 a 12:00 dostępne są wizyty półgodzinne, między 14:00 a 18:00 wizyty godzinne, a między 12:00 a 14:00 jest przerwa.

No patrz, na to nie wpadłem, że mogą być przerwy... To analizując dalej brak też informacji od kiedy lub do kiedy dany harmonogram jest ważny, bo co w przypadku gdy chcemy zmienić godziny otwarcia? To pytanie do OP-a ;)

0

@somekind Teraz już rozumiem wszystko i chyba to rozwiązanie jest najlepsze. Natomiast RodzajUsługi też jest ciekawe tylko chyba też nie w każdym wypadku z racji, że wiele usług miałoby tylko jeden rodzaj usług - szkoła jazdy, kort tenisowy, squash, gabinet dentystyczny (choćby telefonicznie to dentysta raczej nie pyta ile zębów do leczenia itp). Z drugiej strony salony fryzjerskie szczególnie damskie zdecydowanie dobrym rozwiązaniem jest RodzajUsługi, czy choćby myjnie samochodowe, gdzie mogą być różne rodzaje (samo mycie, mycie + mycie wnętrza) i ich czas minimalny czas trwania będzie różny.
No i druga sprawa, że jeśli użytkownik będzie się zapisywał na cokolwiek, to musi mieć podgląd jakie terminy są już zarezerwowane lub jakie są wolne, żeby nie robić tego w ciemno.

Panczo napisał(a):

Szkoła, kurs nie wydaje mi się dobrym porównaniem, bo tam zapisuje się na konkretną jednostkę treningowa, która jest dostępna w konkretnych ramach czasowych, i nie mogę się wciskać w luki w harmonogramie, tylko działać w ramach ustalonych grafików.

Stworzenie rezerwacji na usługę nie może być procesem jednostronnym. W swoim przykładzie też podałeś że ktoś wykorzystuje 2 godziny, a ktoś inny jedną, ostateczną decyzje zawsze podejmuje właściciel/wykonawca harmonogramu. Rezerwacja terminu jest co najwyżej początkiem procesu. Przecież mój syn u fryzjera zajmuje 15 minut, żona czasem 2 i wiecej...

Co do pierwszego to chyba właśnie są dobrym porównaniem, szkoła jazdy ustala minimalną jednostkę 60 min. Można wziąć 1 czy 2 jednostki i tak jak mówisz, nie będzie możliwość wcisnąć się w luki.

Tabela RodzajUsługi jest właśnie świetnym rozwiązaniem na to, że ktoś zajmuję dwie godziny, a ktoś 15 minut w zależności od usługi.

0

@Riko94 Chodziło mi o szkołe/kurs w klasycznym znaczeniu, np idę do szkoły językowej, kurs programowania i dostaje grafik i nie mam możliwości zmiany godzin. Szkoła jazdy jako dostawca lekcji jak najbardziej jest dobrym przykładem

0

@Panczo No tak, ale wtedy jako rodzaj usługi można konkretne lekcje, tylko należałoby wprowadzić ograniczoną liczbę osób.

0
Panczo napisał(a):

Szkoła, kurs nie wydaje mi się dobrym porównaniem, bo tam zapisuje się na konkretną jednostkę treningowa, która jest dostępna w konkretnych ramach czasowych, i nie mogę się wciskać w luki w harmonogramie, tylko działać w ramach ustalonych grafików.

Z wyjątkiem tych szkół i kursów, które działają na godziny.

Stworzenie rezerwacji na usługę nie może być procesem jednostronnym.

To w takim razie jaki jest cel tego wątku?

Minimalny czas trwania, jest po to aby w ciągu godziny nie zapisało mi się więcej osób w cyklach np. minutowych...

To nie rozwiązuje żadnego problemu, bo mogą się zapisać w cyklach np. piętnastominutowych podczas gdy okazuje się, że np. pierwsza osoba zajmie minimum godzinę.
Po prostu taki system może działać tylko dla usług, których czas trwania da się zaplanować.

To analizując dalej brak też informacji od kiedy lub do kiedy dany harmonogram jest ważny, bo co w przypadku gdy chcemy zmienić godziny otwarcia? To pytanie do OP-a ;)

To zmieniamy i już jest nieważny. :)

Riko94 napisał(a):

@somekind Teraz już rozumiem wszystko i chyba to rozwiązanie jest najlepsze. Natomiast RodzajUsługi też jest ciekawe tylko chyba też nie w każdym wypadku z racji, że wiele usług miałoby tylko jeden rodzaj usług - szkoła jazdy, kort tenisowy, squash, gabinet dentystyczny (choćby telefonicznie to dentysta raczej nie pyta ile zębów do leczenia itp).

Jeden to tylko szczególny przypadek wielu. Po prostu na poziomie GUI wystarczy w takim przypadku nie dać użytkownikowi możliwości wyboru.

No i druga sprawa, że jeśli użytkownik będzie się zapisywał na cokolwiek, to musi mieć podgląd jakie terminy są już zarezerwowane lub jakie są wolne, żeby nie robić tego w ciemno.

No pewno, ale dane do tego trzymasz w drugiej tabeli.

0

@somekind No tak w wykorzystanieUslug jest wszystko.

Rozważając dodanie tabeli RodzajUsługi przedstawiałoby się to tak? :

HarmonogramUslug

Id IdFirmy Poczatek Koniec DzienTyg Data
1 997 8 18 Pn null
2 997 9 17 Wt null
3 997 8 16 Czw null
4 997 8 15 Pt null

RodzajUslugi (niech to będzie gabinet masażu)

Id Nazwa CzasTrwaniawMin IdHarmonogramUslug
1 Masaż relaksacyjny 30 1
2 Masaż relaksacyjny 30 2
3 Masaż relaksacyjny 30 3
4 Masaż relaksacyjny 30 4
5 Masaż leczniczy 60 1
6 Masaż leczniczy 60 2
7 Masaż leczniczy 60 3
8 Masaż leczniczy 60 4

WykorzystanieUslug

Id IdKlient IdRodzajUslugi DataCzas
1 123 2 13.12.2016 10:00
2 666 5 13.12.2016 14:00
0
somekind napisał(a):

Stworzenie rezerwacji na usługę nie może być procesem jednostronnym.

To w takim razie jaki jest cel tego wątku?

Stworzenie rezerwacji przez użytkownika, moim zdaniem musi być potwierdzone przez właściciela, bo chyba tylko w idealnym świecie ludzie będą się umawiać w jednym miejscu i sekretarka telefonicznie będzie prosić o logowanie na stronie z harmonogramem.

somekind napisał(a):

Minimalny czas trwania, jest po to aby w ciągu godziny nie zapisało mi się więcej osób w cyklach np. minutowych...

To nie rozwiązuje żadnego problemu, bo mogą się zapisać w cyklach np. piętnastominutowych podczas gdy okazuje się, że np. pierwsza osoba zajmie minimum godzinę.
Po prostu taki system może działać tylko dla usług, których czas trwania da się zaplanować.

Na tej samej zasadzie jak mając zdefiniowany czas wizyty, zaklepie cały dzień, umawiając kolejne wizyty jedna po drugiej.
Nie uważam, aby to musiało być tylko dla usług których jesteśmy w stanie określić czas trwania, to kwestia marginesu czasowego ;)

Ale to takie luźne rozmowy, bo OP nie przedstawił załozeń jak to ma działać i jakie informacje przechowywać więc pozostaje przerzucanie się pomysłami.

somekind napisał(a):

To zmieniamy i już jest nieważny. :)

:)

0

Takk sobie odpowiem za @somekind ;)

Rozważając dodanie tabeli RodzajUsługi przedstawiałoby się to tak? :

Tabelę HarmonogramUslug zmieniłbym na DefinicjaHarmonogramu*

Id IdFirmy Poczatek Koniec DzienTyg Data
1 997 8 18 Pn null
1 997 9 17 Wt null
1 997 8 16 Czw null
1 997 8 15 Pt null

RodzajUslugi (niech to będzie gabinet masażu)
Tu jest niepotrzebna kolumna IdHarmonogramUsług
Tylko definicja rodzaju i czasu

Id Nazwa CzasTrwaniawMin
1 Masaż relaksacyjny 30
2 Masaż leczniczy 60

WykorzystanieUslug
To tylko wpisy w harmonogramie + jakiego harmonogramu korzysta

Id IdHarmonogram IdKlient IdRodzajUslugi DataCzas
1 1 123 1 13.12.2016 10:00
2 1 666 2 13.12.2016 14:00
0
Panczo napisał(a):

Stworzenie rezerwacji przez użytkownika, moim zdaniem musi być potwierdzone przez właściciela, bo chyba tylko w idealnym świecie ludzie będą się umawiać w jednym miejscu i sekretarka telefonicznie będzie prosić o logowanie na stronie z harmonogramem.

A czemu sekretarka nie może używać tego samego systemu, którego używają klienci?

Panczo napisał(a):

RodzajUslugi (niech to będzie gabinet masażu)
Tu jest niepotrzebna kolumna IdHarmonogramUsług
Tylko definicja rodzaju i czasu

A co jeśli zachodzi potrzeba zdefiniowania różnych usług w różnych dniach/porach dnia? Pierwotny pomysł autora na to pozwala, Twój nie.

0
somekind napisał(a):

A czemu sekretarka nie może używać tego samego systemu, którego używają klienci?

Może i nawet powinna, tylko co w sytuacji gdy podczas rozmowy i ustalania terminu ktoś go zajmie?
Albo umówi klienta, bo szef jej kazał, a on nie zajmuje się harmonogramem. Albo szef nie wpisał że ma w tym dniu urlop, albo masażysta zachorował.

somekind napisał(a):

A co jeśli zachodzi potrzeba zdefiniowania różnych usług w różnych dniach/porach dnia? Pierwotny pomysł autora na to pozwala, Twój nie.

Szczerze, nie widze takiej potrzeby, nawet zastanawiałem się nad przykładem, ze takie ograniczenie było by potrzebne. Może nauka jazdy robi plac tylko rano, albo w godzinach szczytu, aby nie tracić czasu w korkach... Ale to chyba naciągane trochę, usługi w końcu są elastyczne, ale w takiej sytuacji dałbym godziny dostępności w tabeli rodzaju usług.
Brakuje też właściwie tam idfirmy: więc po zmianie np tak:

Id idFirmy Nazwa CzasTrwaniawMin godzinOd godzinaDO
1 997 Masaż relaksacyjny 30 8 14
2 997 Masaż leczniczy 60 14 18

Bardziej zwracam uwagę, że zaproponowana struktura nie pozwala zdefiniować kilku harmonogramów per firma (moja tak), np salon masażu ma kilku masażystów

0

@Panczo W przypadku dodania godzin od-do w rodzaju usługi, można chyba usunąć godziny dostępności z Harmonogramu. Choć wydaję mi się, że początkowy twój zamysł bez godzi był lepszy, ale z dodaniem IdFirmy jak najbardziej. Weźmy na to, że gabinet jest prywatną usługą i prowadzi go jedna osoba (masażysta), która wykonuje różne usługi. Wtedy są one dostępne cały czas.

0

Z harmonogramu dowiadujesz się w jakich godzinach w danym dniu jest możliwość dodawania wpisow w harmonogramie, więc musi zostać początek i koniec.
Nasuneło mi sie że jeszcze powinna być tabela łącząca rodzajusługi z harmonogramem, bo może byc tak, ze rózne usługi w ramach harmonogramu oferujemy, np zakład lekarski ma róznych specjalistow medycyny, szkola nauczycieli róznych specjalności itd.
Co do ogółu to my się tu mozemy z @somekind przerzucać pomysłami/wizjami/argumentami, ale tratuj to jako wskazówki, bo decyzja nalezy do Ciebie i Ty najlepiej wiesz jaką funkcjonalność chcesz zaimplementować.

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