Sharke 0 Newbie Poster

I'm looking to write a moderately featured program to keep track of my employee schedules. I'm a novice and will be using Python.

Employees mostly service clients on an ongoing recurring schedule, e.g. "every weekday at 4pm" and so my first thoughts are to allow the setting up of recurring schedule definitions for each client, similar to the recurring appointment option in Outlook. This way when I want to view schedules for a particular employee for a particular range of dates, I can simply construct them from the recurring definitions for each client - the program can do a search for every recurring appointment that has that employee as an attribute. When a schedule is open ended like this, obviously I'm not going to save every future appointment into the database.

But what would be the best way to cover additions and changes to these schedules, for instance if a client wants to move an appointment on one day to a different time, or I need to change the employee who is going to cover a particular appointment, or cancel an appointment altogether, or add an additional appointment? I just can't seem to envision a good clean structure for this.

Would it be a good idea to have a table (or tables) of schedule changes, in which each item was either a "change", an "addition" or a "cancellation"? Then I could construct a day's schedule first by building it from the recurring schedule definitions, then "edit" them accordingly from the "changes" database? Would this be the way a "real" software designer would attack the problem, or is there a more obvious, cleaner, more efficient and less error prone way? I guess having never written a program of this size before I'm not too confident about choosing a design to start work on.