Chapter 14. Normalization and Refinement
Chapters 11 through 13 walked through the steps of designing a preliminary database for The Pampered Pet. They showed how to gather requirements, build semantic object and entity-relationship models, and convert those into a relational model. Chapter 13 showed how to identify rules that should be built into the database and more complex or changeable rules that should be isolated as business rules.
Even after all of this work, the database isn't perfect. This chapter puts the finishing touches on the database by normalizing it appropriately.
In this chapter you see examples of:
Improving the design to make the database more flexible.
Identifying tables that are insufficiently normalized.
Normalizing tables to prevent data anomalies.
Not normalizing where normalization would be more trouble than it's worth.
This design is fairly reasonable, and I've seen worse designs in working databases, but it can use a couple of improvements. Later sections in this chapter discuss normalization, but first there's a big flaw to fix.
If you think about the design long enough and you walk through the use cases, you'll notice that there's a problem with the course data. Currently the design allows many customers to take a course and it allows a course to hold many customers. However, the design allows only one instance of any given course. If you run a Puppy Socialization course in April, ...