![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 8.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
zabieram się za aplikację, która będzie służyła do rezerwacji terminów zajęć. Zajęcia odbywają się cyklicznie i trwają przez okres 6 miesięcy. Osoba zapisuje się na zajęcia w okreslonym dniu tygodnia i o określonej godzinie. Mam w związku z tym 3 pytania: 1) Czy rejestrując nowego uczestnika zajęć w systemie lepiej w bazie trzymać informacje o wybranym przez niego dniu tygodnia i godziny, czy policzyć wszystkie daty, w ktorych ten dzień występuje) przez całe 6 miesięcy i tak zapisać to w dedykowanej do tego tabeli? 2) Który ze sposobów opisanych wyżej lepiej (łatwiej) nadaje się do sprawdzania kolizji terminów w trakcie rejestracji kolejnego uczestnika? 3) Czy MySQL ma jakąś funkcję, która sprawdza, czy dana data 'zawiera' się w wybranym przedziale czasowym? Z góry dziękuję za pomoc. Pozdr Piotr |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
Cytat(piotras) 1) Czy rejestrując nowego uczestnika zajęć w systemie lepiej w bazie trzymać informacje o wybranym przez niego dniu tygodnia i godziny, czy policzyć wszystkie daty, w ktorych ten dzień występuje) przez całe 6 miesięcy i tak zapisać to w dedykowanej do tego tabeli? Użytkownik zapisując się na kurs będzie do niego przypisany (wiązanie użytkownik<->kurs), a z kolei kurs ma swój rozkład zajęć(?). Cytat(piotras) 2) Który ze sposobów opisanych wyżej lepiej (łatwiej) nadaje się do sprawdzania kolizji terminów w trakcie rejestracji kolejnego uczestnika? Dla danego kursu masz limit użytkowników? Sprawdzasz ilu już jest przypisanych i pozwalasz na kolejnego lub nie. Cytat(piotras) 3) Czy MySQL ma jakąś funkcję, która sprawdza, czy dana data 'zawiera' się w wybranym przedziale czasowym? between Ten post edytował mar1aczi 20.02.2013, 15:28:57 -------------------- Szanuj innych czas! Kliknij
![]() |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Bardzo często zdarza się, że przy wszelkiego rodzaju rozkładach jazdy, planach zajęć czy ogólnie harmonogramach jakieś pojedyncze zajęcia zostają przesunięte w czasie. Powodów dla tego typu przypadków jest cała masa, święta, niedyspozycyjność prowadzących, konflikt z innymi zajęciami itp. itd. Dlatego też sugerowałbym każde pojedyncze zajęcia zapisywać osobno, a nie jako "wydarzenie cykliczne".
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 41 Pomógł: 0 Dołączył: 8.07.2009 Ostrzeżenie: (0%) ![]() ![]() |
hej
Trochę uprościłem pierwszego posta, żeby łatwiej wytłumaczyć. W rzeczywistości wygląda to tak: 1. Uczestnik może zapisać się do danej grupy 2. Grupa ma określony poziom trudności, czas trwania i liczbę użytkowników 3. Grupa (a nie uczestnik) ma zdefiniowany rozkład zajęć (czyli wiązanie: uczestnik->grupa->kurs) Czyli jak lepiej? Liczyć wszystkie daty, czy zdefiniować dla grupy dzień tygodnia, godzinę i czas trwania i sprawdzać to w locie? Jeszcze jedno pytanie abstrahując od powyższego: Jeżeli sprawdzam kolizję zajęć (czy jedno nie nakłada się na drugie) lepiej mieć w bazie datetime rozpoczęcia zajęć i czas trwania, czy datetime rozpoczęcia i zakończenia? Sprawdzając (np funkcją between) chyba lepiej te drugie. Co myslicie? Pozdrawiam Piotrek Bardzo często zdarza się, że przy wszelkiego rodzaju rozkładach jazdy, planach zajęć czy ogólnie harmonogramach jakieś pojedyncze zajęcia zostają przesunięte w czasie. Powodów dla tego typu przypadków jest cała masa, święta, niedyspozycyjność prowadzących, konflikt z innymi zajęciami itp. itd. Dlatego też sugerowałbym każde pojedyncze zajęcia zapisywać osobno, a nie jako "wydarzenie cykliczne". Zajęcia z powodów technicznych nie mogą zostać przesunięte. Te zajęcia, ktore się nie odbyły dostają status 'do odrobienia' Czy proponujesz policzyć np wszystkie czwartki o 17.00 i zapisać jako osobne rekordy w bazie? |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 731 Pomógł: 141 Dołączył: 9.05.2011 Skąd: śląskie Ostrzeżenie: (0%) ![]() ![]() |
Cytat(piotras) Czyli jak lepiej? Liczyć wszystkie daty, czy zdefiniować dla grupy dzień tygodnia, godzinę i czas trwania i sprawdzać to w locie? Grupa jest przypisana do konkretnego kursu (jego id) a ten kurs z kolei ma ustalony rozkład zajęć (wiązanie kurs<->harmonogram_zajec) - ja tak bym to widział. -------------------- Szanuj innych czas! Kliknij
![]() |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Cytat Zajęcia z powodów technicznych nie mogą zostać przesunięte. Te zajęcia, ktore się nie odbyły dostają status 'do odrobienia' To nadal nie rozwiązuje wszystkich problemów. Powiedzmy, że jakaś grupa ma zajęcia raz w tygodniu, w poniedziałek o 10:00, od września do końca grudnia (ok. 16 zajęć). Co z 11 listopada, który w tym roku wypada właśnie w poniedziałek? Raczej łatwiej będzie Ci pracować z bazą danych, gdzie każde pojedyncze zajęcia są zapisane jako osobny wpis. Wyszukiwanie kolidujących terminów również powinno być dużo prostsze.Cytat [...] lepiej mieć w bazie datetime rozpoczęcia zajęć i czas trwania, czy datetime rozpoczęcia i zakończenia? Zdecydowanie druga opcja. Jednak jeżeli znajdziesz jakiś przypadek, gdzie czas trwania byłby wygodniejszy niż data i czas zakończenia zawsze możesz:1. Dynamicznie wyliczyć czas trwania jako różnicę czasu zakończenia i rozpoczęcia. 2. Trzymać datę rozpoczęcia i zakończenia oraz czas trwania w bazie. Będziesz jedynie musiał pilnować by aktualizując dane, zachować spójność informacji. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 21.08.2025 - 19:41 |