I often ask myself, “Why do I do this? Why am I writing another edition of this book? Is it worth it? Isn’t there
anything else that I could be doing that would be more beneficial to me, my family, or the human race? Well, of
course there is. The fact is, however, I generally love relational databases, I love to write, and I want to help other
people get better at what they do.
When I was first getting started designing databases, I learned from a few great mentors, but as I wanted to
progress, I started looking for material on database design, and there wasn’t much around. The best book I found
was an edition of Chris Date’s An Introduction to Database Systems (Addison Wesley, 2003), and I read as much
as I could comprehend. The problem, however, was that I quickly got lost and started getting frustrated that I
couldn’t readily translate the theory of it all into a design process that really seems quite simple once you get
down to it. I really didn’t get it until I had spent years designing databases, failing over and over until I finally saw
the simplicity of it all. In Chris’s book, as well as other textbooks I had used, it was clear that a lot of theory, and
even more math, went into creating the relational model.
If you want a deep understanding or relational theory, Chris’s book is essential reading, along with lots
of other books (Database Debunkings, www.dbdebunk.com/books.html, is a good place to start looking for
more titles). The problem is that most of these books have far more theory than the average practitioner wants
(or will take the time to read), and they don’t really get into the actual implementation on an actual database
system. My book’s goal is simply to fill that void and bridge the gap between academic textbooks and the purely
implementation-oriented books that are commonly written on SQL Server. My intention is not to knock those
books, not at all—I have numerous versions of those types of books on my shelf. This book is more of a techniqueoriented
book than a how-to book teaching you the features of SQL Server. I will cover many the most typical
features of the relational engine, giving you techniques to work with. I can’t, however, promise that this will be the
only book you need on your shelf.
If you have previous editions of this book, you might question why you need this next edition, and I ask
myself that every time I sit down to work on the next edition. You might guess that the best reason is that I cover
the new SQL Server 2012 features. Clearly that is a part of it, but the base features in the relational engine that
you need to know to design and implement most databases is not changing tremendously over time. Under
the covers, the engine has taken more leaps, and hardware has continued up and up as the years progress. The
biggest changes to SQL Server 2012 for the relational programmer lie in some of the T-SQL language features, like
windowing functions that come heavily into play for the programmer that will interact with your freshly designed
and loaded databases.
No, the best reason to buy the latest version of the book is that I continue to work hard to come up with new
content to make your job easier. I’ve reworked the chapter on normalization to be easier to understand, added
quite a few more patterns of development to Chapter 7, included a walkthrough of the development process
(including testing) in Chapter 6, some discussion about the different add-ins you can use to enhance your
databases, and generally attempted to improve the entire book throughout to be more concise (without losing the
folksy charm, naturally). Finally, I added a chapter about data warehousing, written by a great friend and fellow
MVP Jessica Moss.