Errata to

ﳰan>Information Modeling and Relational Databases, Second Edition

Halpin, T. and Morgan T. 2008

(Morgan Kaufmann)


Last updated: 2016 October 19




If you spot any other errors in this second edition, please e-mail them to Terry Halpin at


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 ﳰan>�ns 㠲eplaced by쯳pan>


p. xxiv, Online Resources, para. 1: Replace by: ﳰan>To reduce the size and cost of the book, supplementary material is available at the Website ( 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.쯳pan>

p. 35, para. 3, line 5: ﵮties쯳pan> ﵮtries쯳pan>

p. 36, para. 3, lines 4 and 5: 鴹쯳pan> ﵮtry쯳pan>

p. 41, Ex. 2.2, Q. 3(a): Delete ?level is concerned with providing쯳pan>

p. 42, Ex. 2.2, Q. 4 (c) and (e): insert ⾡dd: ⥦ore the fact statements.

p. 54, Table 2.3: 蹳ic-Persistent쯳pan> 蹳ical-Persistent쯳pan>

p. 57, para. 4, sentence 2: 襠Zachman Institute ?쯳pan> Zachman International promotes the use of the Zachman framework in industry (see

p. 57, para. 4, last 2 sentences: 䠴he 粩ting.쯳pan> 䠴he DAMA International Symposium in March, 2008, John Zachman announced a new version of his framework, called Zachman Framework2 (see diagram at

p. 65, para. 2, line 2: plays쯳pan> lays쯳pan>

p. 69, para. 4, line 2: ?and Jim쯳pan> 岲y and Tony༯span>

ࠠࠠࠠࠠࠠࠠ꓅ve and Mary쯳pan> ﲭa and Gwen쯳pan>

p. 70, Table 3.3: 鷱쯳pan> 鷰쯳pan>

p. 70, Facts (25) and (27): 鷱쯳pan> 鷰쯳pan>

p. 70, para. 5, 3rd sentence: rder to split (25) into (26) and (27) we probably relied on our쯳pan> ೵fficient reason for splitting (25) into (26) and (27) would be an쯳pan>

p. 70, para. 6, first sentence: append ?, Wirth did most of Pascalथsign in 1968-69, but did not successfully implement it or finalize its definition till 1970)쯳pan>

p. 70, para. 6, last sentence: delete 峴쯳pan>

p. 70, last sentence: 쳥where쯳pan> arious ways쯳pan>

p. 71, Fact (27a): 鷱쯳pan> 鷰쯳pan>

p. 71, Fact (27a) with reference scheme omitted: 鷱쯳pan> 鷰쯳pan>

p. 71, last para., line 1: delete ﲠus쯳pan>

p. 76: ﮥs쯳pan> 쯧gs??/span> ?2 occurrences).

pp. 76-77, Figures 3.5 and 3.6: surname and initials data should not be in italics.

p. 79, Fig. 3.7: Delete the arrow connection from Seattle to Chicago, and the bottom-most arrow connection from Los Angeles to Chicago.

p. 85: ? ?(2 occurrences).

p. 92, Ex. 3.4, Q. 2: ?.쯳pan> ?; (i) Q. 11.쯳pan>

p. 103, Ex. 3.5, Q. 2: Change the Manager column data to: Smith J, Jones E, Brown C, Smith J, Collins A. Change the salary and birth year data for Project P4 to: 50000, 1946.

p. 103, Ex. 3.5, Q. 5: Replace the three male staff entries by the following two entries: (John Jones, Sales); (Bob Smith, Admin).

p. 139, Figs 4.45 and 4.46: 㱟km)쯳pan> 㱟km:)쯳pan>

p. 145, para. 4, line 3: 쯳pan>쯳pan> 쯳pan>쯳pan>

p. 168, para. 4: Move the text 䨩s default can be over-ridden by declaring the object type independent奠next chapter)䯠the end of the paragraph.

p. 141, para. 4, line 5: change font for ᢬e 4.9䯠match the paragraph font.

p. 188, para. 1: Reword as follows: 襠external uniqueness constraint over three roles indicates that each (genus, species, infraspecies) tuple refers to at most one plant kind. The other external uniqueness constraint declares that the (rank, infraname) pair identifies infraspecies. In the reference scheme for Plantkind, only the genus is mandatory. Moreover, outer join semantics applies in this case (see Section 10.1), so for each genus there is at most one plant kind with only a genus name, and for each genus-species combination there is at most one plant kind with no infraspecies. In a relational database, each plant kind maps to a sequence of four values, three of which may be null, and each quadruple is unique (treating null just like any other value).ﳰan>

p. 196, Table 5.13, last line: Widen final column to fit ?50ﮠone line.

p. 199, para. 1, last line: ?쯳pan> ᮫쯳pan>

ࠠFigure: Icon for Swimming should be the icon shown for Main Beach.

p. 206, Ex. 5.5, Q. 1, first table: �Joan Coffee)쯳pan> 㠨Joan Coffee)쯳pan>

p. 217, Fig. 6.6: Remove square brackets from most examples, and change caption to ᬵe constraints list the possible values of a value type or referencing role.쯳pan>

p. 217, para. 2, replace the third sentence onwards by: 頤efault, 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 㠢efore a start value excludes that value, and appending a right parenthesis 䠡fter an end value excludes that value. If desired, a square bracket may be used to explicitly indicate inclusion (the default). For example, ?00? ?00]塣h 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 Fig. 6.6(c).쯳pan>

p. 217, final sentence: Append a period.

p. 218, before final paragraph, insert new paragraph: ?fine point, a value constraint displayed next to an entity type with a reference mode is actually a role value constraint on the referential role played by the value type. In the NORMA tool, you can display it this way by toggling ExpandRefMode to True.쯳pan>

p. 219, combine paragraph starting with 촨ough choosing穴h previous paragraph.

p. 219, 2nd last para., replace by: ࣬eaner approach is to list all existing countries in a reference table for Country. A country may appear in this table without playing any elementary fact roles in the schema. Such a country is said to be independent, since it exists in our model independently of doing anything. An independent entity type is a primitive entity type whose elementary fact roles (if any) are collectively optional. An independent value type may contain some values that play in no facts (elementary or existential). The term pendent鳠not used for subtypes. If an independent object type plays some fact roles, the disjunction of these roles is not mandatory (implicitly or explicitly).༯span>

p. 225, Fig. 6.13: e)쯳pan> me)쯳pan>

p. 235, Ex. 6.4, Q. 2 Figure: Role connectors from the exclusion constraint should be dashed lines.

p. 238, Ex. 6.4, Q. 6(a): ⡮saction (code)쯳pan> ⡮saction(.code)쯳pan>

p. 241, final para., line 3: 龳ubtype of B and C쯳pan> 龳ubtype of C and D쯳pan>

p. 243, Fig. 6.35 and para. 1, line 3: 孡le쯳pan> 孡lePerson쯳pan>

p. 252, Fig. 6.48: 岳onKind(code)쯳pan> 岳onKind(.code)쯳pan>

p. 253, para. 2, replace final sentence by: ?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).쯳pan>

p. 256, Fig. 6.53: 岩od > 0쯳pan> 岩odRate > 0? occurrences).

p. 260, Ex. 6.5, Q. 6, Planets table, NrMoons of Saturn: Ԡ ?/span>

p. 271, Sec 7.1 Title: ?6쯳pan> ?7쯳pan>

p. 294, Ex. 7.4, Q. 8: 女tion 4쯳pan> 女tion 5쯳pan>

p. 299, Ex. 7.5, Q. 3: Add the predicate reading "쯣ated in ﲤered 裂span>

p. 341, Table, Loan date column: ? ?賠occurrences).

p. 341, Ex. 8.5, Q.2 Figure: 塣her and an Academic쯳pan> 塣her and a Professor쯳pan>

p. 347, Table 9.1: Remove shading from right bottom cell (Sequence etc.).

p. 366, para. 3: Replace all but the first and last sentences by: his case, the cycle arose because of the pair-subset constraint combined with the mandatory role constraint on is-chaired-by. Given the pair-subset constraint, the cycle would also apply if Chair is independent or plays some other mandatory, functional role.༯span>

p. 366, final paragraph: Replace first two sentences by: ? introduced a subsets property modifier to indicate that for each instance that is the context for a property (i.e. an attribute or association role) the population (extension) of that property for that instance must be a subset of the population of another compatible property for that same instance. For example, adorning the citizen role in Figure 9.26(a) with {subsets resident} means that each citizen of a country is a resident of the same country.쯳pan>

p. 367, Fig. 9.26: Move the subset constraint in (b) to connect the mid-points of the two predicates, and reword the Figure caption to read: డir-subset constraint in (a) UML and (b) ORM.쯳pan>

p. 367, para. 2, line 5: 峴쯳pan> 峴Nr쯳pan>

p. 367, Fig. 9.27(a): 峴쯳pan> 峴Nr쯳pan>

p. 367, Fig. 9.27(b): Replace the entity type Test(.nr) by the value type TestNr.

p. 368, Figs. 9.28 and 9.29: Add directional arrow tip after 妩ne쯳pan>

p. 371, Fig. 9.33: Add spanning uniqueness constraints to all the ORM predicates.

p. 373, Fig. 9.35(a): Replace lower left constraint by 㯭plete, overlapping}쯳pan>

p. 374, para. 2, last line: Ჴy쯳pan> ⧡nization쯳pan>

p. 379, para. 3, line 2: ?values꼯span> 嬬s쯳pan>

p. 380, Fig. 9.44(a), derived association: 孢er쯳pan> �ber쯳pan>

p. 380, para. 3: Replace by Წy versions of the UML specification declared that ? kinds of aggregation define a transitive, antisymmetric relationship (i.e., the instances form a directed, noncyclic graph)µt antisymmetry does not imply irreflexivity, much less acyclicity. Moreover, transitive closure is normally best achieved by derivation rather than assertion. Such property declarations for aggregation appear to be absent in UML 2.2.쯳pan>

p. 380, para. 4: Replace by: 䠡ny 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ୡke sense to say that a club is part of a person. The example should be remodeled, as shown in Figure 9.44(a).쯳pan>

p. 380, Fig. 9.45 caption: Replace by: 쬥gal UML model. Aggregation association chains should not form a cycle.쯳pan>

p. 381, final para: format should be fully justified.

p. 387, para. 3, line 3: ?that specializes a role played by쯳pan> ?specializes an association involving쯳pan>

p. 387, Fig. 9.52: change multiplicity on assignedCar to ಥmove Rank fact type; 㥳쯳pan> 㠡ssignedࣨange UC on company car fact type to span just the lefthand role; add the asserted subtype 襣utive୯dify the textual constraint to read ⾅ach Employee who is an Executive is assigned some CompanyCar.쯳pan>

p. 388, last line: 鮡ries쯳pan> ies쯳pan>

p. 389, Table 9.3, Step 4: ?n and n-ary쯳pan> 孡ining쯳pan>

ࠠࠠࠠࠠ?Step 7: ?derived쯳pan> 孩derived쯳pan>

p. 390, Fig. 9.56: ᭩lyName쯳pan> 鲴hdate쯳pan>

p. 390, Fig. 9.57: 鴬e쯳pan> 岳onTitle? occurrences).

p. 390, Fig, 9.58: ﯥlan쯳pan> ﯬean쯳pan>

p. 392, Table 9.4, last row: ⪥ct cardinality쯳pan> ᬵe-comparisonӃlass multiplicity쯳pan> 帴ual constraint쯳pan>

p. 393: ?derived쯳pan> 孩derived쯳pan>

p. 397, last line: 龷ww.puml.org꼯span> 龷쯳pan>

p. 402, Role relation, column roleId: ?/span> ?/span>

p. 426, Fig. 10.30: Add intransitive constraint to ring fact type.

p. 436, Fig. 10.39: ᬵes㨯uld be in bold type.

p. 436, Fig. 10.40: ᬵes㨯uld be in bold type (2 occurrences).

p. 436, Fig. 10.40(b): ෡s written by 鮠༯span> ੮cludes 鮠ࠠࠠࠠࠠࠠࠠ?

p. 438, Ex. 10.4, Q. 1: 㥱uence of railway cars)쯳pan> ﲤered set of railway cars)쯳pan>

p. 450, Ex. 10.5, Q. 1 (a), (b): Reduce indentation to match that of (c).

p. 454, Figures 10.59 and 10.60: Move the multiplicities to after the attribute type declaration, e.g. code:string [1] {P}.

p. 454, Fig. 10.60(c): Change the line style for the unaries to a dashed line.

p. 465, line 4: 撠for쯳pan> ?for쯳pan>

p. 476, para. 6, sentences 2 and 3: Replace by: ೵perkey of a table is a set of one or more columns whose entries must be unique, thus providing a way to identify rows in the table. A candidate key is a minimal superkey.쯳pan>

p. 482, Fig. 11.6: Add uniqueness constraint to left role of derived fact type.

p. 483, Ex. 11.2, Q. 1: ?value쯳pan> 嬬쯳pan>

p. 496, Fig. 11.24: ᳴art८d༯span> ᳴artѥnd?span>

p. 504, Fig. 11.32: The foreign key relationship arrow between Survey.channelNr and Channel.channleNr should point downwards, not upwards.

p. 505, Ex. 11.3, Q. 1: 﩮ts쯳pan> ௩nts쯳pan>

p. 505, Ex. 11.3, Q. 2: Add spanning uniqueness constraint to Supply association.

p. 508, Ex. 11.3, Q. 18: ?was directed by쯳pan> 鲥cted / was directed by쯳pan>

p. 518, Replace 2nd paragraph by: 壡ll 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.쯳pan>

p. 519, para. 4, line 6: 壯rd쯳pan> 壯rds쯳pan>

p. 519, Replace last paragraph by: his 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లeferred identifier). The subtyping connection from StudentEmployee to Student is dashed, since this does not provide a path to the subtype੤entifier. 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.쯳pan>

p. 519, Fig. 11.44: Subtype connection lines to Person should be dashed.

p. 521, Fig. 11.47: Replace second instance of 婧ht⹠餴h負cases).

p. 529, Fig. 12.1: 橲stname)쯳pan> rstname)Өname)쯳pan> me)쯳pan>

p. 533, Fig. 12.9: In the selection result, remove the female gender rows, and add a height column, leaving just these two tuples: (David, M, 172); (Terry, M, 178).

p. 543, Fig. 12.22: ?)쯳pan> ?)쯳pan>

p. 545, para. 1: Remove indent in first line below subsection header.

p. 545, para. 2, first sentence: Replace the text after 峵lt to ?诳e X entries in A whose associated Y entries in A include all the row entries of B.쯳pan>

p. 546, para. 1: Remove indent in first line below subsection header.

p. 553, Ex. 12.1, Q. 5(a): ﮥyAmt(usd:)쯳pan> ﮥyAmount(USD:)쯳pan>

p. 561, para. 2, line 4: ? ?/span>

p. 566, Fig. 12.36: 襲eӯr튓and쯳pan>: ⾷here?b>orӼb>and쯳pan>

p. 567, Fig. 12.37: 襲e쯳pan>: ⾷here? occurrences).

p. 569, Fig. 12.40, last line of query: 䡲tsign쯳pan> 䡲sign쯳pan>

p. 569, para. 2, line 5: ﵮger쯳pan> 줥r쯳pan>

p. 569, SQL syntax: 嬥ct * | [all | distinct] ༯span> 嬥ct [all | distinct] * | span>

p. 580, SQL syntax: 좾outer] {left | right | full}쯳pan> 좾left | right | full} [outer]쯳pan>

p. 606, Table 12.13: 鳴inct쯳pan> 䩳tinct]賩x occurrences).

p. 606, para. 3: Replace by 襠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.ﳰan>

p. 607, end of third set of code examples: 尩ଔ 尩l쯳pan>

p. 609, Ex. 12.9: 襠Log table ༯span> The Log table span>

p. 610, Ex. 12.9 Q. 2(a): 崡il price " cost price쯳pan> 崡il price - cost price쯳pan>

p. 611, final para.: Indent first line.

p. 617, SQL syntax: 嬥ct * | [all | distinct] ༯span> 嬥ct [all | distinct] * | span>

p. 617, SQL syntax: 좾outer] {left | right | full}쯳pan> 좾left | right | full} [outer]쯳pan>

p. 634, SQL syntax: 嬥ct * | [all | distinct] ༯span> 嬥ct [all | distinct] * | span>

p. 634, SQL syntax: 좾outer] {left | right | full}쯳pan> 좾left | right | full} [outer]쯳pan>

p. 644, Schema diagram: 龃ar ( empNr, carRegNr )쯳pan> 龄rives (empNr, carRegNr )쯳pan>

p. 648, Fig. 13.2; Add arrows from Ann to David and from Bill to Chris.

p. 646, Sec. 13.3, para. 2, line 6: �emetation쯳pan> �ementation쯳pan>

p. 698, Fig. 14.6: ?S1 corresponds to 쩾B = b1꼯span> ?Si corresponds to 쩾B = bi쯳pan>

p. 698, Fig. 14.16, Corollary 4: Change to: ﳰan>An equality constraint over Cಯles in the RHS implies a frequency constraint of ﳰan>n on C튲ole in the LHS. If the equality constraint applies and each of C튲oles in the RHS has a UC then this is equivalent to a frequency constraint of n on Cಯle in the LHS combined with an external UC over the roles of B and C in the LHS (thus extending Corollary 2).쯳pan>

p. 728, Fig. 14.49: 龏ld.feeyear꼯span> 龏ld.feeYear쯳pan>

p. 731, Fig. 14.52: Add a mandatory role constraint to Judgeಯle.

p. 731, para. 2: Insert before second last sentence: ﳰan>The inclusive-or component of the exclusive-or constraints on the Player and Judge roles is implied in the global schema, so is ignored in the relational mapping쯳pan>

p. 732, Fig. 14.54: Strengthen the exclusion constraints on the Judge and Player roles to exclusive-or constraints.

p. 742, para. 1: Replace by: Codd튯riginal work on 2NF and 3NF classified attributes as ⩭eﲠﮭprimeꤥpending on whether or not they belong to some candidate key. We now use the terms 幠attribute?ﮫey attribute?these concepts. So a key attribute belongs to some key (primary or alternate), and a nonkey attribute belongs to no key.

p. 745, para. 1: Replace the text by the following, and move this new version to become the first paragraph on p. 742: The principle underlying the refinement to second and third normal forms has been nicely summarized by Bill Kent (1983) as follows: யnkey field must provide a fact about the key, the whole key, and nothing but the keyԨis should be refined by replacing the final occurrence of 襠key⹠૥y쯳pan>

p. 790, Fig. 15.19: e)쯳pan> (.name)Өid)쯳pan> ?쯳pan>

p. 791, Fig. 15.20: e)쯳pan> (.name)Өid)쯳pan> ?쯳pan>

p. 792, Fig. 15.21: e)쯳pan> (.name)Өid)쯳pan> ?ﳰan>

p. 793, Fig. 15.22: reverse the direction of the subset constraint; e)쯳pan> (.name)Өid)쯳pan> ?Өcode)쯳pan> de)쯳pan>

p. 794, Fig. 15.23: e)쯳pan> (.name)Өid)쯳pan> ?쯳pan>

p. 795, Fig. 15.24: e)쯳pan> (.name)Өid)쯳pan> ?Өcode)쯳pan> de)쯳pan>

p. 820, line 4: ͌쯳pan> ͎쯳pan>

p. 829, Ex. 15.7, Q. 2 Figure: ᭥쯳pan> 䥭NameӨcode)쯳pan> de)Өnr)쯳pan> ?Ӓeport쯳pan> 尯rt(.nr)ಥmove ReferenceNumber fact type.

p. 840, para. 3, line 1: 䡲쯳pan> 䯲e쯳pan>

p. 864, Sec. 16.6, line 4: 衮ge쯳pan> 衮ge?쯳pan>

p. 865, para. 1, line 8: 䥮tifers쯳pan> 䥮tifiers쯳pan>

p. 866, Fig. 16.20: 岲y Halpin쯳pan>"Terry Halpin".

p. 868, final para., line 1: 壡rations쯳pan> 壬arations쯳pan>

p. 868, final line: 촻owl:Restriction>쯳pan> ?owl:Restriction>쯳pan>

p. 887, Ex. 16.8, Q. 4 figure: 鲴hplace of쯳pan> 襠birthplace ofࡤd to Country, Buss Pass and Parking Bay ࠪ㯵ntry codeӣꠠpass nrӣꠢay nr쯳pan>

p. 900, Subtyping, first para.: ?i>A쯳pan> ?i>B쯳pan>

p. 911, first entry: 緮쯳pan> 緮쯳pan>

p. 911, Fact-Oriented Modeling Tools, NORMA entry: delete final ?span>

p. 911, 3rd last line: 馡쯳pan> ᣨmanInternational쯳pan>

p. 914, Carver and Halpin reference: 㥭antic NormalizationΥumont University Technical Report.쯳pan> ᴯmicity and Normalization?Proc. EMMSAD2008, eds, T. Halpin, J. Krogstie, and H. Proper, CEUR, Montpellier, June 2008.ﳰan>

pp. 914-924: Page headers should read 颬iography쯳pan>

p. 918: ᬰin, T.2000c쯳pan> ᬰin, T. 2000c쯳pan>

p. 936, ﰵlar reference mode, 84. 105쯳pan> ﰵlar reference mode, 84, 105쯳pan>