Bạn sẽ cần phải xử lý các sự kiện và sự kiện riêng biệt.
EVENT WISE: Đối với các sự kiện, bạn sẽ cần phải lưu trữ quy tắc recurence (mà có thể là một rrule như theo quy định của rfc5545 mà còn là một bộ rõ ràng của ngày như rdate trong rfc5545) mà còn ngoại lệ (xem exdate của rfc5545 và có thể exrule như trong rfc2445). Bạn cũng sẽ cần phải theo dõi các thay đổi trong các quy tắc đó: Các thay đổi về tỷ lệ, cũ không có vấn đề gì khi chúng xảy ra trong tương lai và bị bỏ qua trong những ngày qua. Thay đổi trong rrule là khó khăn hơn như ảnh hưởng đến lần xuất hiện trước đó. Sở thích cá nhân của tôi là thêm một thuộc tính cụ thể cho rrule cũ và mới để chỉ định ngày bắt đầu và ngày kết thúc hợp lệ tương ứng của chúng.
nếu sự kiện có khoảng thời gian giới hạn (cho biết thuộc tính COUNT hoặc UNTIL), bạn nên lưu trữ bắt đầu và kết thúc trong bảng để cho phép truy vấn sự kiện dễ dàng hơn (đặc biệt là khi tìm kiếm lần xuất hiện bên ngoài cửa sổ thời gian được tính toán trước của bạn) bên dưới), nó có thể giúp giảm số lượng sự kiện mà tính toán sẽ được làm lại).
OCCURRENCES WISE: cho lần xuất hiện, bạn nên lưu trữ các trường hợp trong một cửa sổ được xác định trước xung quanh hiện tại (nói +/- 6 tháng hoặc 12 tháng và tính toán thường xuyên) và lưu hồ sơ này để cho phép tính lại nếu người dùng của bạn muốn để xem thêm trong tương lai (đối với các vấn đề về biểu diễn). bạn cũng nên xem xét tính toán chỉ mục (RECURRENCE-ID) để giúp tìm kiếm dễ dàng hơn về sự xuất hiện tiếp theo.
ít hơn trên back-end nhưng nhiều hơn trên front-end bạn cũng nên theo dõi các thay đổi tzid để hỏi người dùng nếu một sự kiện đã được lên lịch trên một tzid nhất định nếu nó có nghĩa là để ở trên múi giờ hiện tại của nó cần phải được cập nhật (nghĩ về một người ở đảo Samoa đã lên lịch họp vào thứ Sáu, ngày 30 tháng 12 năm 2011 trước khi quốc gia quyết định ngày này sẽ không tồn tại), tương tự như bạn có thể hỏi một sự kiện xảy ra trong thời gian tiết kiệm ánh sáng ban ngày có nghĩa là để "không bao giờ xảy ra" hay "xảy ra hai lần" (nhiều hơn về chủ đề này here)
Lưu ý: bạn có thể muốn xem xét hỗ trợ xa hơn những gì được định nghĩa trong rfc5545 về quy tắc recurence và cũng hỗ trợ thêm cho các quy tắc định kỳ tôn giáo (see USNO introduction to calendars hoặc in "Tính toán theo lịch" (Ấn bản thứ ba) từ E. Reingol và N. Dershowitz). Khi bạn hỏi về triển khai hiện tại, bạn có thể kiểm tra dễ dàng lược đồ cơ sở dữ liệu của sunbird (sqlite) hoặc của Apple open source Calendar and Contacts Server, một danh sách đầy đủ hơn về các dự án mã nguồn mở hiện có cho các máy chủ caldav (có thể là tập hợp con của những gì bạn đang sử dụng?). đang tìm kiếm) có sẵn here)
nếu bạn lưu trữ một ngày riêng biệt cho mỗi lần lặp lại của mọi người dùng có sự lặp lại, nó có thể trở thành rất nhiều dữ liệu trong một vội vàng. –
+1 ưu tiên lưu trữ lặp lại. Hãy nghĩ về trường hợp sử dụng khi người dùng di chuyển một trường hợp của sự kiện lặp lại: cô ấy có tùy chọn áp dụng di chuyển cho tất cả sự kiện, tất cả các sự kiện sau đó, chỉ sự kiện này, v.v. – Fuhrmanator