Students and information management professionals who want “to learn about the relational approach to data management at the pragmatic level” are this book’s intended audience. The vehicle is SQL (Structured Query Language), the de facto standard query language for relational database systems.
Chapter 1 introduces the idea of relational databases. It covers the embedding of SQL in C programs and discusses the differences between dynamic SQL and static SQL. Chapter 2 demonstrates normalization: how to reduce a given data scheme to the successive normal forms 1NF, 2NF, 3NF, BCNF, and 4NF. Chapter 3 introduces the basics of data definition. Chapters 4 and 5 cover the query features of SQL, including join and subquery. Chapter 6 describes insertions, deletions, and updates. Chapter 7 discusses performance issues, primarily indexing. Chapter 8 explains how to use views in SQL. Chapter 9 studies the problems of protecting data from corruption and unauthorized access.
All the examples in the first part of the book refer to a single application, a database management system for a tool rental company. This is an effective pedagogical technique. As more complex issues are illustrated, the reader can concentrate on them without having to study new examples. The explanation of normal forms in chapter 2 is unusually clear.
The book includes many well-designed exercises. They all refer to a single application, a DBMS for college student records. Answers to all the exercises are given in an appendix.
The last part of the book presents several case studies. Chapter 10 discusses classical data processing, with an emphasis on simple transactions and batch processing. Chapter 11 shows how to use complex queries to manage resource allocation. Chapter 12 examines the management of unformatted information such as text and image files. Chapter 13 studies the management of object-oriented data. Chapter 14 discusses some algorithms for the analysis of trees, graphs, and networks. It shows how nonrecursive SQL can be used to handle traversals that are naturally recursive. Chapter 15 describes how to design a user interface.
The strengths of the book are its direct style, its effective use of examples, its exercise sets, and its treatment of embedded SQL. Its typography is good, and its index is adequate. The diagrams are clear and easy to follow.
The only major drawback is the lack of a bibliography. References for further study would be particularly useful in chapters 14 and 15. Despite its lack of references, the book is a good introduction to SQL. It would serve as a nice supplementary textbook for a course in database management systems.