Database Management Systems

by Raghu Ramakrishnan and Johannes Gehrke

[Database Management Systems (3rd Edition)] [WWW Resources] [Material for the Third Edition] [Material for the First Edition] [Material for the Second Edition]

Errata and Clarifications for ``Database Management Systems, Second Edition, First and Second Printing''

The second edition was available from 1999-2002. Here is the material for the third edition.

Last update: August 27, 2000

Chapter 1 (Introduction to Database Systems)

  • Page 10, first paragraph, last line: "actally" should be "actually"
  • Page 21, last "Points to Review", line 3: replace "concurently" with "concurrently"

Chapter 3 (The Relational Model)

  • The comma (,) at the end of the line of FOREIGN KEY in SQL on page 64, 72, 74, page 77 (two occurrences), and page 78 should be dropped. The comma (,) at the end of the line of ON DELETE in the SQL construct on page 64 should be dropped.
  • Page 78, the definition of the view: "CREATE VIEW ... login ..." should be "CREATE VIEW ... sid ...". The second sentence in the first paragraph of 3.6 should be changed to: "Suppose that we are often interested in finding the names and student identifiers of students who got a grade of B in some course, together with the cid for the course."
  • Page 83, third line from the bottom: "are computed" should be "is computed"

Chapter 4 (Relational Algebra and Calculus)

  • Page 103, third paragraph below Q3: Replace ".. a green boat and a red boat" with "On instances B1, R2, and S3, the query will return the colors green and red.". (Lubber has actually reserved two red boats.)
  • Page 111, Q9: The tuple relational calculus expression for Q9 is unsafe if "Boats" is empty. A corrected version of the query is the following expression: { P | there exists S in Sailors (P.sname = S.sname and for all R in Reserves (S.sid = R.sid and = }
  • Page 117, Exercise 4.5: You need the additional information that an employee can pilot a flight if she is certified on some aircraft with a cruisingrange larger than the distance of the flight. (One possible variation is: An employee can pilot a flight if she is certified on all aircrafts with a cruisingrange larger than the distance of the flight.)

Chapter 5 (SQL: Queries, Programming, Triggers)

  • Page 122: In Figure 5.1, showing Instance S3, the age for sailor "Horatio" with sid=74 should be 35.0 instead of 40.0. The same holds for Instance S3 of Sailors shown in Figure 5.10 on page 142.
  • Page 143: In Figures 5.11 and 5.12, the age for the record with rating=9 should be 35.0.
  • Page 144, Figure 5.14: The correct avgage for rating 3 is "44.5".
  • Page 145, (Q36): The predicate in the nested query should read "... AND S2.age >= 18). This should also be corrected in the second line from the bottom (replace "age >18" with "age >= 18")
  • Page 168, 5.13.3, second paragraph: Delete first "and".
  • Page 171, Exercise 5.3: You need the same additional information as in Exercise 4.5, page 117.

Chapter 7 (Storing Data: Disks and Files)

  • Page 199, inside box, line 4: ".. from one tack to the next" should be ".. from one track to the next"
  • Page 201, first paragraph (below box), last sentence: " .. is written onto disk i mod k" should be ".. is written onto disk i mod D"
  • Page 209, page requesting algorithm: The pin_count needs also to be incremented if the page is already in the buffer pool.

Chapter 12 (Evaluation of Relational Operators)

  • Page 324, paragraph 2, line 4: "B+ index" should be "B+ tree index"
  • Page 337, paragraph 3, line 2: "blocked nested loops" should be "block nested loops"
  • Page 346, last paragraph: The sizes of R and S are exchanged; R should have 1000 pages, and S should have 500 pages.

Chapter 14 (A Typical Relational Query Optimizer)

  • Page 376, Figure 14.1 and 14.2: In the HAVING clauses "COUNT(*) > 2" should be "COUNT(*) > 1"
  • Page 382, Figure 14.4: In the equiwidth histogram, the count of the first bucket should be 8 instead of 10. In the equidepth histogram, the values of the first bucket should be 2.25 instead of 2.22.
  • Page 404, first bullet of the summary: Replace "Current query optimizers do handle nested subqueries well." by "Current query optimizers do not handle nested subqueries well."

Chapter 19 (Concurrency Control)

  • Page 553, second paragraph, line 6: ".. and the insertion of 45*" should be ".. and the insertion of 25*"

Chapter 20 (Crash Recovery)

  • Page 581, second paragraph : Should read: LSN of the "second" update log record shown in Figure 20.3
  • Page 588, third paragraph, line 6: "Rndo" should be "Undo"

Chapter 22 (Internet Databases)

  • Page 653, paragraph on "entity references". The mutant semicolon among the reserved characters should be a ".
  • Page 654, Figure 22.6, second line: Replace "emp.dtd" with "books.dtd"
  • Page 659, code fragment after the second line: "..x2 - 4x ... " should be " ... x^2 - 4x ... "

Chapter 23 (Decision Support)

  • Page 692, third paragraph, line 5: delete "langle"
  • Page 700: Line 4: Missing word after "and it IS desirable"

Chapter 24 (Data Mining)

  • Page 708, third paragraph: Replace ".. can roughly be separated into five steps" by ".. can roughly be separated into four steps."
  • Page 709, third record in Figure 22.4: The date should be 5/1/99
  • Page 709, the sentence starting in line 6: The sentence should be changed as follows: "It can be decomposed by storing transid-custid-date triples separately and dropping custid; this may be how the data is actually stored."
  • Page 712, first line: ``...purchased the item at least twice.'' should be: ``...purchased the item more than five times.'' to make this sentence consistent with the SQL query.
  • Page 714, paragraph "Confidence": The expression sup(LHS)/sup(LHS Union RHS) is incorrect. This should be inverted so it should read sup(LHS U RHS)/sup(LHS).
  • Page 714, paragraph "Confidence", line 7: "if" should be "of"
  • Page 716, line 4/5: The rule should be "{pen} => {milk}".
  • Page 716, Figures 24.4 and 24.5: The dates are incorrect. The correct dates are given in Figure 24.1
  • Page 717, line 4: Replace rule "{pen} => {ink}" with "{pen} => {milk}"
  • Page 725, last SQL query for AVC-set (extends onto page 726): Change the query to:
    SELECT R.cartype, R.highrisk, COUNT(*)
    FROM InsuranceInfo R
    WHERE R.age <= 25
    GROUP BY R.cartype, R.highrisk
  • Page 727, formulas for C and R: The formula for C is missing a division by "n", and in the formula for R, "M" needs to be replaced by "C".

Reported errors in the exercises are corrected directly in the solutions manual, which is distributed via ftp.



Thanks to the following bug-spotters:

Georgios Evangelidis at the University of Macedonia, Thessaloniki, Greece (
Dimitris A. Dervos at the Technological Educational Institution of Thessaloniki (
Stefan Saroiu at the University of Washington-Seattle (
Paula Hawthorn while teaching at UC Berkeley (
Raoul Bhoedjang at Cornell University (
Alvin Tanhehco at Cornell University (
Eric Milkie at Cornell University (
Scott Vandenberg at Siena College (
Vincent Oria at New Jersey Institute of Technology (
Masatoshi Yoshikawa at the Nara Institute of Science and Technology (
Jignesh Patel at the University of Michigan (
Alexander Thomasian at the University of Connecticut (
Frederick N. Springsteel at the University of Missouri - Columbia (
Ji Zhou at the University of Memphis (
James J. Gallagher at the University of Connecticut (
Panagiotis Ipeirotis at Columbia University (
Adnan Mian (
Philip E. Varner at the University of Virginia (
Ka Wong Chong at the University of Hong Kong ( 
Abdullah Uz Tansel at the City University of New York (
Howard Hua Yang at Oregon Graduate Institute (


Raghu Ramakrishnan ( and Johannes Gehrke (