Tôi sẽ chỉ tạo một mục nhập cho mỗi lần lặp lại sự kiện, ngoài một số chân trời. Tuy nhiên, điều đó có nghĩa là bạn sẽ cần một bảng khác mà bạn có thể sử dụng để dự đoán ngày tháng nếu chúng quét qua ngày đường chân trời của bạn. Tức là, bạn sẽ cần một bảng sự kiện có chứa một bản ghi cho mỗi lần xảy ra sự kiện lặp lại (ngày 1 tháng 1, ngày 8 tháng 1, ngày 15 tháng 1, ... đến tháng 12) và một bảng có sẵn mỗi bản ghi để bắt đầu các năm trong tương lai (bắt đầu ngày:1 tháng 1; lặp lại:7; đến:2011) để vào đầu năm 2012 (hoặc ngay khi người dùng yêu cầu chế độ xem của tháng 2012 trở lên), bạn có thể tạo các sự kiện trong tương lai.
Điều này có hai nhược điểm lớn:
- Cơ sở dữ liệu của bạn có dữ liệu cho cả năm. Tuy nhiên, nếu việc thêm toàn bộ dữ liệu của cả năm làm hỏng hiệu suất của bạn, hệ thống của bạn có thể không đủ sức mạnh. (Có vẻ như một yêu cầu rằng một ứng dụng lịch có thể xử lý các ngày có giá trị trong nhiều năm)
- Ở cuối chân trời sự kiện, bạn cần tạo các ngày trong tương lai cho các sự kiện lặp lại.
Ưu điểm (IMO) vượt trội hơn nhược điểm:
- Tính toán dễ dàng hơn khi hiển thị lịch. Sử dụng phương pháp của Tim ở trên, nếu người dùng tải ngày 18 tháng 12 năm 2011, bạn sẽ tính toán sự kiện lặp lại nào nên được đặt vào ngày đó? Bạn sẽ bị buộc phải lặp lại MỌI sự kiện lặp lại mỗi khi bạn hiển thị một ngày. Đánh đổi là bất lợi số 1, mà tôi nghĩ giải pháp tốt hơn là phải thực hiện lại những tính toán này.
- Bạn có thể chỉnh sửa các trường hợp cụ thể của một sự kiện. Sử dụng phương pháp của Tim, nếu một cuộc họp diễn ra vào một ngày lễ và người dùng đã thay đổi nó thành ngày hôm trước, bạn sẽ làm như thế nào? Bằng cách sử dụng phương pháp một mục nhập cho mỗi sự kiện được mô tả ở đây, bạn có thể chỉ cần sửa đổi bản ghi đó cho sự kiện, dễ dàng di chuyển các lần xuất hiện đơn lẻ xung quanh lịch.