Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Optymalny projekt bazy danych z powtarzającym się wydarzeniem

Po prostu tworzyłbym wpis dla każdego powtórzenia wydarzenia, aż do jakiegoś horyzontu. Oznacza to jednak, że będziesz potrzebować innej tabeli, której możesz użyć do projekcji dat, jeśli przechodzą one poza datę horyzontu. Oznacza to, że będziesz potrzebować tabeli zdarzeń zawierającej jeden rekord dla każdego wystąpienia powtarzającego się zdarzenia (od 1 stycznia, 8 stycznia, od 15 stycznia do grudnia) oraz tabeli z każdym rekordem dostępnym do inicjowania przyszłych lat (początek data:1 stycznia; powtórz:7; do:2011), aby na początku 2012 r. (lub gdy tylko użytkownik poprosi o widok miesiąca 2012+) można wygenerować przyszłe zdarzenia.

Ma to dwie duże wady:

  1. Twoja baza danych zawiera dane z całego roku. Jeśli jednak dodanie danych z całego roku zrujnuje twoją wydajność, twój system prawdopodobnie jest zbyt słaby. (Wydaje się, że aplikacja kalendarza musi obsługiwać daty z wielu lat)
  2. Na końcu horyzontu zdarzeń musisz wygenerować przyszłe daty dla wydarzeń cyklicznych.

Zalety (IMO), które przeważają nad wadami:

  1. Łatwiejsza matematyka podczas wyświetlania kalendarza. Używając powyższej metody Tima, jeśli użytkownik wczyta 18 grudnia 2011 r., w jaki sposób obliczysz, które wydarzenia cykliczne powinny zostać umieszczone w tym dniu? Będziesz zmuszony przejść przez KAŻDE cykliczne wydarzenie za każdym razem, gdy wyświetlisz datę. Kompromis jest wadą nr 1, która moim zdaniem jest lepszym rozwiązaniem niż konieczność ponownego wykonywania tych obliczeń.
  2. Możesz edytować określone wystąpienia wydarzenia. Stosując metodę Tima, gdyby spotkanie miało miejsce w święto, a użytkownik zmienił je na dzień poprzedni, jak byś to w ogóle zrobił? Korzystając z opisanej tutaj metody jeden wpis na wydarzenie, możesz po prostu zmodyfikować ten rekord wydarzenia, łatwo przenosząc pojedyncze wystąpienia w kalendarzu.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak znaleźć najpopularniejsze wystąpienia słów w MySQL?

  2. Usuwanie Doctrine QueryBuilder z połączeniami

  3. LAST_INSERT_ID() zwraca wiele wierszy z 0?

  4. Wiosenne zapytanie o dane localdate zwraca błędne wpisy - minus jeden dzień

  5. Rekord androida/php nie jest wstawiany do mysql