Projekt bazy danych SQL

Projekt bazy danych SQL
R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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.

edytowany 1x, ostatnio: Riko94
IceHeart
Proponuję zmienić wszystkie nazwy na ich angielskie odpowiedniki.
R9
Tak, wiem. Będzie zmienione. Jest wrzucone po polsku dla lepszego zrozumienia problemu. Sam schemat jest w miarę w porządku?
mariano901229
  • Rejestracja:ponad 10 lat
  • Ostatnio:7 miesięcy
  • Postów:597
0

Dlaczego w harmonogramie godziny są typu double ?

GS
autor pytania już odpowiedział, ale np w Delphi typ Tdate czy Tadatetime jest tożsamy z typem Double
R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
0

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

shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
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?


R9
Nie dopisze się. Usługodawca ustala terminy np.: 12:00 - 13:00, 13:00 - 15:00, 18:00 - 20:00, 20:00 - 22:00. Stąd właśnie moja prośba o przyjrzenie się temu i ewentualne doradzenie jakiegoś lepszego rozwiązania.
ZW
  • Rejestracja:około 9 lat
  • Ostatnio:około 7 lat
  • Postów:66
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

shagrin
na to go własnie chciałam naprowadzić powyższym komentarzem
R9
Mam info ile godzin, bo w UzytkownikHarmonogram podaje Id konkretnego terminu. Szkoła jazdy nie ustawia całej swojej dostępności tylko pojedyncze terminy, powiedzmy pojedyncze 'jazdy' po 2h czy po 1h, zależy od tego kto to wystawia. Okej, załóżmy sytuację jak piszesz: dostępność 12-15. Ktoś rezerwuje 1h o 13 czyli 13-14. Wtedy do UzytkownikHarmonogram wrzucam id terminu (12-15) i na ile godzin tego terminu chce się zapisać - w tym przypadku 1. I wtedy co? Kolumna CzyDostepne jest do wyrzucenia, natomiast dostępne godziny muszę zmodyfikować i je rozbić: 12-13 i 14-15?
ZW
Napisałeś : "Okej, załóżmy sytuację jak piszesz: dostępność 12-15. Ktoś rezerwuje 1h o 13 czyli 13-14. Wtedy do UzytkownikHarmonogram wrzucam id terminu (12-15) i na ile godzin tego terminu chce się zapisać - w tym przypadku 1." - gdzie wrzucisz info na ile godzin ktoś chce się zapisać ? w tablicy UzytkownikHarmonogram nie masz takiej kolumny. "I wtedy co? Kolumna CzyDostepne jest do wyrzucenia, natomiast dostępne godziny muszę zmodyfikować i je rozbić" - to pytanie do mnie ? ty projektujesz bazę to sobie odpowiedz, czy dopuszczasz taką sytuację i jak planujesz ją rozwiązać
R9
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?
ZW
  • Rejestracja:około 9 lat
  • Ostatnio:około 7 lat
  • Postów:66
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.

shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
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


ZW
  • Rejestracja:około 9 lat
  • Ostatnio:około 7 lat
  • Postów:66
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ę?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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.

R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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
edytowany 2x, ostatnio: Riko94
ZW
  • Rejestracja:około 9 lat
  • Ostatnio:około 7 lat
  • Postów:66
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 ?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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ę?

R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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ść.
shagrin
  • Rejestracja:prawie 17 lat
  • Ostatnio:ponad 6 lat
  • Lokalizacja:Norwegia, Stavanger
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

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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.

edytowany 1x, ostatnio: somekind
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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.

edytowany 1x, ostatnio: somekind
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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 ;)

edytowany 1x, ostatnio: Panczo
R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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.

edytowany 1x, ostatnio: Riko94
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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

R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
0

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

edytowany 2x, ostatnio: Riko94
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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.

R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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. :)

:)

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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
edytowany 1x, ostatnio: Panczo
somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 5 godzin
  • Lokalizacja:Wrocław
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.

PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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

R9
  • Rejestracja:ponad 10 lat
  • Ostatnio:prawie 7 lat
  • Postów:36
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.

edytowany 1x, ostatnio: Riko94
PA
  • Rejestracja:ponad 22 lata
  • Ostatnio:około 10 godzin
  • Postów:3871
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ć.

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)