This book began life as a comparatively short chapter in a book called Database in Depth: Relational Theory for
Practitioners (O’Reilly, 2005). That book was superseded by SQL and Relational Theory: How to Write Accurate
SQL Code (O’Reilly, 2009), where the design material, since it was somewhat tangential to the main theme of the
book, ceased to be a chapter as such and became a (somewhat longer) appendix instead. I subsequently began work
on a second edition of this latter book.1 During the course of that work, I found there was so much that needed to be
said on the subject of design that the appendix threatened to grow out of all proportion to the rest of the book. Since
the topic was, as I’ve indicated, rather out of line with the major emphasis of that book anyway, I decided to cut the
Gordian knot and separate the material out into a book of its own: the one you’re looking at right now.
What makes this book different from others on database design? Many resources on design practice do little to explain the underlying theory, and books on design theory are aimed primarily at theoreticians. In this book, renowned expert Chris Date bridges the gap by introducing design theory in ways practitioners can understand—drawing on lessons learned over four decades of experience to demonstrate why proper database design is so critical in the first place.
Every chapter includes a set of exercises that show how to apply the theoretical ideas in practice, provide additional information, or ask you to prove some simple theoretical result. If you’re a database professional familiar with the relational model, and have more than a passing interest in database design, this book is for you.
Questions this book answers include:
-
Why is Heath’s Theorem so important?
-
What is The Principle of Orthogonal Design?
-
What makes some JDs reducible and others irreducible?
-
Why does dependency preservation matter?
-
Should data redundancy always be avoided? Can it be?
Databases often stay in production for decades, and careful design is critical for avoiding subtle errors and processing problems over time. If they’re badly designed, the negative impacts can be incredibly widespread. This gentle introduction shows you how to use important theoretical results to create good database designs.