I'm a novice and I plan to write a scheduling program for my business in Python which should hopefully teach me a lot about program design. I'm fine with syntax and the like, I've written programs before but not like this one.

Basically I run a dog walking company in which clients usually set up an ongoing weekly schedule (e.g. every weekday at 1:30). So I figure, there's no point saving each and every appointment as an object if it's just an ongoing schedule - just set up and save the schedule definition itself and then whatever dates the user wishes to view, I can just populate it using these schedule definitions.

The problem arises if I want to either add to or take away from the regular appointments, say if I want to schedule extra appointments or move a regularly scheduled appointment to another time on a particular day, or cancel one of these regular appointments.

The way I'm thinking is, save any changes - either additions or deletions - as objects, then when it comes time to display a certain range of dates I can populate those dates with the regular ongoing appointments, then look to see if there are any objects which apply to those dates, then forcibly apply the changes. So I guess in this respect appointment objects would be either "positive" (add to the schedule) or "negative" (delete from the schedule).

Am I headed down the right path here, or would you guys see the solution WAY differently? Any advice would be a GODSEND!

By the way, I'm thinking of using SQLite and the object mapper in SQLAlchemy.