In this chapter we have introduced databases and data modeling and described some of the key data and object modeling approaches. The intent of this discussion is to provide the background for the next several chapters. The main issues for this chapter are to understand that there are many modeling techniques, and that each makes many assumptions about that which is being modeled. Models generally evolve from general, abstract, and high-level models to more detailed and implementable models.
All of the data models are based on semantic models; however, up to now the semantic model has rarely been documented. Practitioners usually jot down entities and attributes and start normalizing and making performance trade-offs. It is generally left for developers and maintenance programmers to shoehorn in the special cases and special meanings that the users of the system decide they want implemented.
Logical modeling has followed a parallel path. Object-oriented models document classes, which are analogous to entities. Object-oriented design has taken inheritance to a new level, relative to entity modeling. However, in practice it has overshot the mark. Systems with tens of thousands of classes are not uncommon, but they are unwieldy.
In the next chapter we address the following questions: How do you segue between abstraction levels as you are modeling? What does this do for the system you are modeling?