Errata to
Information Modeling and Relational Databases, Second Edition
Halpin, T. and Morgan T. 2008,
(Morgan Kaufmann)
Last updated: 2010 July 14
If you spot any other errors in this second edition, please e-mail them to Terry Halpin at t.halpin@live.com.
The following corrections should be made to the first printing. To determine the print version of your copy of the book, look at the row of digits below the copyright notice on the verso of the main title page: the final digit denotes the print version (e.g. 1 = first printing, 2 = second printing).
The symbol “⇨” means “is replaced by”.
p. xxiv, Online Resources, para. 1: Replace by: “To reduce the size and cost of the book, supplementary material is available at the Website (http://www.elsevierdirect.com/companion.jsp?ISBN=9780123735683) for downloading. There are five appendices. Appendix A provides an overview of the evolution of computer hardware and software. Appendix B discusses two kinds of subtype matrix to determine subtype graphs from significant populations. Appendix C discusses set-comparison queries in SQL. Appendix D discusses ranking and extrema queries in SQL. Appendix E discusses ways to implement derivation rules in SQL using triggers, generated columns, stored procedures, views, user defined functions, and common table expressions. Other appendices may be added as the need arises.”.
p. 217, para. 2: Replace the third sentence onwards by “By default, ranges are assumed to be closed, so the end values are included. For example, {50..100} includes 50 and 100 as well as the numbers in between. Inserting a left parenthesis “(“ before a start value excludes that value, and appending a right parenthesis “)” after an end value excludes that value. If desired, a square bracket may be used to explicitly indicate inclusion (the default). For example, “(0..100” and “(0..100]” each denote a range of positive (above 0) numbers up to and including 100. One may also combine enumerations and/or ranges into a single constraint, as in Figure 6.6(c).”.
p. 217, final sentence: Append a period.
p. 253, para. 2, replace final sentence by: “Just based on age, we could specify any set of natural numbers within the possible age range that included 13, 17, and 19 but excluded 12 and 20 (e.g., {13, 17, 19, 1}, {13, 17, 19, 5, 63} and so on).”.
p. 380, para. 4: Replace by: “At any rate, some restriction on aggregations is needed to stop cases like that shown in Figure 9.45. If a person is part of a team, and a team is part of a club, it doesn’t make sense to say that a club is part of a person. The example should be remodeled, as shown in Figure 9.44(a).”.
p. 518, Replace 2nd paragraph by: “Recall that a direct supertype of a subtype is connected directly to the subtype (i.e., with no intermediate subtypes on the connecting path). Each subtype has one or more direct supertypes. A connection between a subtype and its direct supertype(s) is shown as a solid arrow if it provides a path to the preferred identifier of the subtype. If a subtyping connection appears as a dashed arrow, the subtype either introduces its own preferred reference scheme (this is called context-dependent reference), or it obtains its identification scheme via a subtyping connection to another supertype.”.
p. 519, para. 4, line 6: “record” ⇨ “records”.
p. 519, Replace last paragraph by: “In this example, we chose employeeNr as the preferred identifier for student employees in the context of roles specific to StudentEmployee. This choice is shown by the solid subtyping arrow from StudentEmployee to Employee (indicating a path to the subtype’s preferred identifier). The subtyping connection from StudentEmployee to Student is dashed, since this does not provide a path to the subtype’s identifier. The subtype connections from Student and Employee are also dashed, because these subtypes introduce new reference schemes in preference to that of their Person supertype.”.
p. 606, para. 3: Replace by “The count function may be used in two ways. Count ( * ) returns the number of rows in the specified table, whereas count ( colname ) returns the number of values in the named column. If distinct is specified with a bag function, any duplicates are excluded. If duplicates are wanted, the keyword all may be used; however, since this is the default, it is often omitted. For obvious reasons, adding distinct to max or min has no effect.”