My thoughts on booking (from least to most controversial):
1. The user should be able to book an unbooked record. I don't think anyone will disagree with this.
2. The empty
string is a legitimate customer ID. It indicates that a record is unbooked.
3. The user should be able to be able to unbook a record. That is, assign the empty string as the customer ID for a record to indicate that the record is unbooked. Maybe the customer calls up the CSR and says: "My house burned down, guess I won't need that painting contractor after all." I want the user to be able to unbook the record. Deleting the record is not the right thing to do (the contractor still exists it's just that he's not going to be doing a job for this particular customer).
4. The user should be able to change a booking for a record. For instance, the user books a record for Joe Customer thinking his customer id is 10000000. Shortly after the database has been updated, the user realizes that Joe's customer ID isn't 10000000, it's 50000000. I say let the user fix the mistake.
5. Good user books a record for customer 10000000. Bad user comes along later and books the same record for customer 20000000. In other words, bad user could see that the record was already booked by good user, but doesn't care, and changes the customer ID anyway. Bad user probably doesn't use his turn signals when he drives either. but nothing in the instructions compells me to prevent bad user from behaving badly.
I accept all the above operations as legitimate. My reasons for doing so:
It's easy (least amount of work, least complexity),
Satisfies the requirements in my assignment instructions,
Doesn't contradict any specification in my assignment instructions, and
I'm willing to pay the price of 5 in order to allow the user to perform 3 and 4.
-George