Có các giải pháp phức tạp và giải pháp dễ dàng. Hai giải pháp đơn giản nhất là:
Đặt các sự kiện lặp lại cho một số trường hợp không đổi hoặc lên đến một số phạm vi ngày cố định trong tương lai. Lưu trữ một FK recurrence_id với mỗi cá thể trỏ đến mô tả về sự lặp lại và cho phép chỉnh sửa và hủy hàng loạt.
Ưu điểm của phương pháp tiếp cận quạt đã được xử lý trước là nó rất dễ dàng để thực hiện các trường hợp ngoại lệ lặp lại, gần như chắc chắn sẽ là yêu cầu tính năng đầu tiên bạn nhận được.
Tính tại thời gian hiển thị. Máy tính nhanh, tùy thuộc vào các câu hỏi bạn muốn có thể trả lời về dữ liệu của bạn, thường sẽ dễ dàng tính toán tất cả các lần xuất hiện trong một phạm vi ngày. Bạn có thể thông minh và cố gắng nhanh chóng đặt phạm vi ngày của mình trước khi thực hiện phép tính lặp lại hoặc bạn có thể bạo lực từ ngày bắt đầu.
Ngoài ra, bạn chỉ cần một giải pháp để lưu trữ quy tắc lặp lại hoạt động với bất kỳ điều gì bạn đang sử dụng để tính toán lặp lại. (ví dụ: nếu bạn đang sử dụng thư viện cho phép iCalendar, lược đồ của bạn là varchar (255) có giá trị RRULE trong đó)
Nếu bạn đang phải cuộn máy tính lặp lại của riêng mình, và bạn muốn giữ nó đơn giản, hạn chế sự lặp lại của bạn cho hàng ngày, hàng tuần, hàng tháng hoặc hàng năm bao gồm trường hợp sử dụng 80% đầu tiên của bạn và dễ dàng bị calc hóa.
Tại thời điểm đó schema tái phát tiềm năng của bạn trông giống như sau:
id
recurrence_start
recurrence_end
type (daily|weekly|monthly|yearly)
day_of_week (for weekly)
month
day_of_month
Và thẳng thắn những giải pháp phức tạp có lẽ không phải là giá trị nó :)
Xin chào, bạn sẽ triển khai phạm vi sự kiện (ngày bắt đầu và ngày kết thúc) khi sử dụng lược đồ lặp lại bạn đã cung cấp như thế nào? Bất kỳ ý tưởng? Tôi đang gặp rất nhiều rắc rối khi thiết kế một cái gì đó như thế này. Cảm ơn! – Tom