Relational database implementation and the proper use of SQL to access and manipulate such databases form the focus of this comprehensive book. It consists of 12 chapters, two appendices, a glossary, a bibliography, a trademark list, and an index.
Chapter 1, an introduction, brings the reader quickly up to date on the history of relational databases and SQL. It also introduces the running example that is used in the chapters that follow. Chapter 2 is centered around tables and how SQL is used to create and define the structure of tables. Chapter 3 describes in detail how SQL is used to manipulate actual data stored in base tables. All SQL data access and manipulation operations are discussed in detail. This chapter also discusses, in depth, the creation and manipulation of views.
Chapter 4 discusses the management issue of assigning different levels of access privileges to different users of a database, based on their authorization level and need to access particular data. Chapter 5 focuses on physical storage techniques. It presents the usefulness and liabilities of indexing, utilizing B+-tree data structures. It also exemplifies the use of clustering in maintaining the physical proximity of data. Chapter 6 describes the use of the system catalog (data dictionary) in analyzing the status of the database. Chapter 7 gives a thorough coverage of normalization, including BCNF, 4NF, and 5NF.
Chapter 8 covers the extremely important issues of database integrity, concurrent processing, and recovery. Chapter 9 gives complete coverage of embedded SQL and gives a comprehensive example of embedded SQL with the C programming language. It also covers the use of dynamic SQL. Chapter 10 covers some specific SQL-based systems by focusing on the Query Manager of OS/2’s Database Manager and also on Oracle’s SQL*Forms. Chapter 11 covers database architecture by describing how a logical database structure is eventually implemented at the physical storage level. Chapter 12 covers computer configurations by describing single-user, multi-user, and distributed database systems. The appendices describe the data used in the running example, as well as the conventions used in the book.
The basic purpose of this book is to be a textbook with examples and, as such, it does a good job. The examples are clear and have a substantial level of detail to give the reader a deep understanding of the illustrated material. The book’s length is reasonable. The print size, the use of different fonts for the examples and illustrations, and appropriate spacing make it readable. The book’s major strengths are the depth of the explanations of topics and the depth of pertinent examples, as well as the breadth of the material covered. In comparing this book with others that are similar, I find it to be superior in its breadth of coverage. Most other such books concentrate on a comprehensive coverage of the SQL language, whereas this book not only does that, but also covers how SQL is related to and connected to the logical database design and the physical database implementation.
My overall evaluation is that this book can be a significant addition to any information systems or computer science professional’s library and that it can serve its intended audience well. The reader, however, must be familiar with computers and databases, and the author acknowledges this. It can be a useful supplementary textbook in a graduate or undergraduate database course even though the lack of exercises may reduce its attractiveness and effectiveness for such a purpose. On the other hand, the breadth and depth of the coverage and the current and excellent references are definite assets.