This book aims to take you "from Novice to Professional". Does it deliver?

In the intro of this book, Clare Churcher makes the point that if you get a database wrong and it doesn’t fulfill expectations, it becomes a costly exercise in more ways than one. This holds true whether the database is the type designed for a government department, or put together for the local sports club. Get it wrong and you waste the time and effort of setting it up; the money spent developing it; and the lost opportunity of being able to make use of the data.

The audience for this book is someone who needs to set up a small, single-user database, but the material is well written and the concepts are explained clearly so it would be equally relevant for developers working on larger projects.

The book starts with a few examples of the sorts of things that tend to go wrong when someone designs a database. This may seem an odd place to start, but in fact makes a lot of sense. Most database developers have seen at least one project where the design goes wrong because humans think about data differently to the way you need to store it in a database.

Churcher uses the example of a plant database where three fields are used to store possible uses of the plant, making it difficult to search for plants suitable for hedging. Other common problems such as having multiple terms used for the same item, repeated information, and tables designed for one specific report that then needs changing.

Having alerted the reader to the potential pitfalls, Churcher then moves on to the steps of the development process, starting with an initial statement of the problem being solved, and in subsequent chapters taking the reader through the initial requirements and the use cases; learning from the data model; developing a data model; and generalization and specialization.

There’s a good chapter on moving from the data model to relational database design, and the next chapter on normalization is also clear and coherent, describing why normalization is necessary in terms of insertion, deletion and update problems. Keys and constraints get a chapter looking at the practicalities of choosing a primary key. There’s a chapter on query basics that uses generic SQL for the query language, and another chapter on forms and reports that discusses the general concepts and uses some examples created using Microsoft Access and Crystal Reports.

The book closes with a chapter on ‘other implementations’ that looks at object oriented databases, spreadsheets and XML for representing data models.

Overall, I liked this book. The last three chapters are less useful than the earlier material because of the need to stay away from specific products. The big advantage of the author is her use of specific real-world examples to illustrate topics; this is very much a ‘this is how it works’ book with the theory explained in those terms rather than an academic description of database design theory.

I don’t know if you can teach novice database designers how to avoid the pitfalls of getting designs wrong, but this is a good attempt at doing so. Developers should find it an easy read, and while you’d still need to read a book specific to your particular database software, this book would be worth reading first.