1: Disappointing
The title seduced this reader with its promise of insight into object-oriented features introduced with Oracle8. Numerous examples show their coding syntax, but not one justifies their use. The authors deserve some credit for explaining their shortcomings and drawbacks, but more blame for selling a book offering no reason to be read. One uses features for a reason. Let it be said from the start that Oracle8 introduced many valuable new features for performance and scalability. Some of these are briefly catalogued in Chapter 1. The bulk of the book, however, is a review of recurrent data structures, comparing (1) their ERD models against their UML models and (2) their relational implementations against their object-oriented implementations in Oracle8. The main subject is external design of application databases. Appealing subject from this reader's perspective, but the devil is in the details. Chapter 1 ends with a section entitled "Advantages of an Object-Oriented Approach," wherein the authors are able to do no more than to cite examples of their own successes using design abstractions. They seem to believe that every employment of an abstract design deserves to be called "object-oriented." This fallacy recurs from cover to cover, short-selling object-orientation and shortchanging the reader. Chapter 3 attempts and fails to demonstrate the superiority of UML over ERD for database design. Aiming for a balanced consideration of these alternative techniques, it includes a section "Disadvantages of UML Diagramming" that omits mentioning the absence of a notational convention for representing identity--UML's most serious disadvantage in this reader's opinion. The side-by-side UML versus ERD data model comparisons presented throughout the rest of the book show how little real difference there is between the two conventions. These comparisons were nevertheless valuable when the book first appeared and UML was new stuff. Since then UML has so far extended its mind share that today's reader may focus on UML alone--not because it is superior, but just because it is a standard. Many of the code examples could also be eliminated. They often do no more than illustrate a simple idea or variation more economically explained in text. It is not hard to find long samples of code differing from their predecessors by only a single line (see pp. 148-150, 152-155). Another problem with the code examples is that they are generally separated from the data models whose implementations they illustrate. While reading an example, one must travel several pages back to view the diagram of the subject data structure. Nevertheless, as catalogs of data structures and introductions to Oracle8's object syntax, chapters 4-18 merit lunchtime browsing in one's favorite bookstore. Favorite chapters: 10, 11, 12, 15, 16, 18. Error and ignorance are more commonly encountered than they ought to be in a volume so priced. The authors misconstrue the object-oriented term "overloading" (p. 326). They do not know that Oracle supports table-level check constraints: ". . . check constraints are not allowed to reference other columns (p.314)." They propose (p. 137) a range constraint between 000 and 999 as a method to exclude alphas from a character field. They relate that they used an index to improve the read performance of a table with only 96 short rows. To this same table they also added a redundant Y/N-valued column so that rows could be retrieved ". . . without an inefficient search for a null end date (p. 425)"! Oracle's "mutating table problem" recurs in several examples, and the only solution offered is a "mirror table." Better to consult Appendix B of the excellent book "Oracle Design" by Dave Ensor and Ian Stevenson (O'Reilly, 1997). They offer a much more elegant solution requiring only a few lines of trigger code. In one code sample the mutating table problem occurs only because of the awkward implementation chosen by the authors--even though a simple alternative is available (pp. 443-444). This slip is all the more lamentable for having nothing to do with "Redundant Total Fields," the title of the section in which it occurs. In fact, there are many passages (even some good ones) that digress. There are introductory paragraphs delving into details (pp. 429-430) as well as summary paragraphs in detailed sections (pp. 393, 422). One of the four major parts, "Time-Related Modeling: Tracking History," dedicates only one of its five chapters to its named subject. Careless organization makes reference difficult. The authors are obviously seasoned application developers with significant expertise. Their wisdom comes through in many of their general comments on the art of database design. Clearly, they could have written a better book.
|