Investing in proper database design is a very efficient way to cut maintenance costs. If we expect a system to last, we need to make sure it has a good solid foundation - high quality database design.
Surely we can and sometimes do cut corners and save on database design to get things done faster. Unfortunately, such cutting corners frequently comes back and bites us: we may end up spending a lot of time solving issues caused by poor design.
So, solid understanding of relational database design is absolutely essential for database developers, including Agile folks like myself. Let me put it stronger: we Agile developers especially need solid understanding of relational database design, because we are quite likely to cut corners and spend just enough effort to pass unit tests.
This is why I think the book by "Pro SQL Server 2008 Relational Database Design and Implementation" by Louis Davidson, Kevin Kline, and others is a must read.
The following is a chapter by chapter synopsis
Introduction to Database Concepts
This chapter introduces several crucial theoretical concepts, and each concept is demonstrated with a short crisp example. The chapter must be read before proceeding any further.
The Language of Data Modeling
This chapter describes various aspects of traditional waterfall methodology. As such, it can safely be skipped by Agile developers.
Conceptual Data Modeling
This chapter deals with business rules and requirements, and provides very good practical examples. As the previous chapter, all the examples are described in the context of waterfall methodology. However, this should not turn us off. Agile developers need to identify business rules and requirements, and implement them via database design, as mush as anyone else.
This chapter is a must read for everyone, even if some of us do not use Erwin or Visio.
The Normalization Process
This chapter builds up on the concepts introduced in the previous one. As such, we shall get better results if we read about Conceptual Data Modeling first.
As before, all theoretical concepts are illustrated with succinct practical examples.
In my opinion, this chapter is most important in this book - it gives a great description of a complex technique that is not always described well. If it was the last chapter in this book, the book would still be a highly useful one.
Of course, there are other books describing normalization. This one really stands out because it provides clear in-depth explanations with good concrete practical examples.
The rest of the book
The next chapters of the book are describing various steps needed to implement the complete RDBMS solution, including developing T-SQL, securing access, indexing and so on. All these chapters are useful and practical as well.
Although these chapters are very useful and a pleasure to read, I am not going into more detail here. The reason: many other books describe similar things as well. In my opinion, it is the first chapters that really make this book unique.
We may be using very different methodologies to develop systems build on top of RDBMS. However, eventually professionally developed systems that are meant to last should have proper database design.
The book provides a practical description of what is proper database design. As such, it will be really useful for all developers who want to develop robust systems using RDBMS.