2010-06-13 12 views
10

Mam interesujący problem, próbując reprezentować złożone dane harmonogramu w bazie danych. Jako wytyczną muszę być w stanie reprezentować całość tego, co może reprezentować format iCalendar - ics - ale w bazie danych. W rzeczywistości nie implementuję niczego związanego z ics, ale daje to dobry zakres reguł, których potrzebuję, aby móc modelować dla mojego konkretnego projektu.Reprezentacja złożonej zaplanowanej rekurencji w bazie danych

Muszę zezwolić na reprezentację pojedynczego wydarzenia lub wydarzenie cykliczne w oparciu o wiele razy dziennie, dni tygodnia, tygodnia w miesiącu, miesiącu, roku lub niektóre z nich. Na przykład w trzeci czwartek listopada każdego roku lub 25 grudnia każdego roku lub co dwa tygodnie od 2 listopada do 8 września następnego roku.

Nie dbam o efektywność wstawiania, ale wydajność zapytań jest krytyczna. Operacja, którą wykonuję najczęściej, to podanie jednej daty/godziny lub zakresu dat/czasu i próba ustalenia, czy zdefiniowany harmonogram pasuje do dowolnej części zakresu dat/czasu. Inne operacje mogą być wolniejsze. Na przykład: od 15 stycznia 2010 r. Od 10:00 do 15 stycznia 2010 r. O godzinie 11:00 znajdź wszystkie harmonogramy pasujące co najmniej do części tego czasu. (tzn. harmonogram obejmujący 10:30 - 11:00 wciąż odpowiada).

Jakieś sugestie? Spojrzałem na How would one represent scheduled events in an RDBMS?, ale nie obejmuje to zakresu reguł powtarzania, które chciałbym modelować.

Odpowiedz

1

Sposób, w jaki zrobiłem coś podobnego do tego, to posiadanie dwóch stołów. Jeśli wydarzenie nie miało powtarzającego się wzoru, po prostu zapisz datę, godzinę rozpoczęcia i godzinę zakończenia. Zapytanie sprawdza, czy czas wyszukiwania jest większy niż czas rozpoczęcia dowolnego wpisu i mniejszy lub równy czasowi zakończenia tego samego zdarzenia.

W przypadku powtarzających się wydarzeń niezbyt dobrze wiem, w jaki sposób iCalendar przechowuje rekurencje, ale jeśli przechowujesz każde wydarzenie w danym dniu tygodnia (może być konieczne utworzenie wielu wierszy dla pojedynczego zdarzenia, jeśli powtarza się więcej niż jeden raz). dzień w tygodniu), a następnie wyszukaj go prawie tak samo jak powyższa tabela. W przypadku powtarzających się nawrotów, takich jak trzeci wtorek tygodnia, możesz mieć dodatkową kolumnę opisującą konkretny stan. Mogę dać ci lepszą odpowiedź, jeśli powiesz mi więcej o tym, jak ics reprezentuje taki rodzaj nawrotów.

Mam nadzieję, że to pomaga. Nie mam teraz zbyt wiele czasu. Możesz skontaktować się ze mną później, jeśli chcesz o tym porozmawiać. Obecnie jestem w Missouri, więc moja dostępność na następny tydzień będzie nieobliczalna.

-1

To może być trywialne rozwiązanie, ale jakie byłyby wady związane z dodawaniem kolumny, która definiuje powtarzalność zdarzenia (tj. Co każde x tygodni, rocznie, tygodniowo itp.) I używa się tego jako kryterium wyniku?