You are previewing Beginning Database Design Solutions.
O'Reilly logo
Beginning Database Design Solutions

Book Description

This book is intended for IT professionals and students who want to learn how to design, analyze, and understand databases. The material will benefit those who want a better high-level understanding of databases such as proposal managers, architects, project managers, and even customers. The material will also benefit those who will actually design, build, and work with databases such as database designers, database administrators, and programmers. In many projects, these roles overlap so the same person may be responsible for working on the proposal, managing part of the project, and designing and creating the database.

This book is aimed at IT professionals and students of all experience levels. It does not assume that you have any previous experience with databases or programs that use them. It doesn't even assume that you have experience with computers. All you really need is a willingness and desire to learn.

This book explains database design. It tells how to plan a database's structure so the database will be robust, resistant to errors, and flexible enough to accommodate a reasonable amount of future change. It explains how to discover database requirements, build data models to study data needs, and refine those models to improve the database's effectiveness.

The book solidifies these concepts by working through a detailed example that designs a realistic database. Later chapters explain how to actually build databases using two common database products: Access 2007 and MySQL.

The book finishes by describing some of the topics you need to understand to keep a database running effectively such as database maintenance and security.

This book explains database design. It tells how to determine what should go in a database and how the database should be structured to give the best results.

This book does not focus on actually creating the database. The details of database construction are different for different database tools so, to remain as generally as useful as possible, this book doesn't concentrate on any particular database system. You can apply the techniques described here equally to whatever database tool you use whether it's Access, SQL Server, Oracle, MySQL, or some other database product.

Most database products include free editions that you can use for smaller projects. For example, SQL Server Express Edition, Oracle Express Edition, and MySQL Community Server are all free.

To remain database neutral, the book does not assume you are using a particular database so you don't need any particular software or hardware. To work through the Exercises, all you really need is a pencil and some paper. You are welcome to type solutions into your computer if you like but you may actually find working with pencil and paper easier than using a graphical design tool to draw pictures, at least until you are comfortable with database design and are ready to pick a computerized design tool.

  • "Goals of Effective Database Design," explains the reasons why people and organizations use databases. It explains a database's purpose and conditions that it must satisfy to be useful. This also describes the basic ACID (Atomicity, Consistency, Isolation, Durability) and CRUD (Create, Read, Update, Delete) features that any good database should have. It explains in high-level general terms what makes a good database and what makes a bad database.

  • "Database Types," explains some of the different types of databases that you might decide to use. These include flat files, spreadsheets, hierarchical databases (XML), object databases, and relational databases. The relational database is one of the most powerful and most commonly used forms of database so it is the focus of this book, but it is important to realize that there are alternatives that may be more appropriate under certain circumstances. This gives some tips on deciding which kind of database might be best for a particular project.

  • "Relational Database Fundamentals," explains basic relational database concepts such as tables, rows, and columns. It explains the common usage of relational database terms in addition to the more technical terms that are sometimes used by database theorists. It describes different kinds of constraints that databases use to guarantee that the data is stored safely and consistently.

  • "Understanding User Needs," explains how to learn about the users' needs and gather user requirements. It tells how to study the users' current operations, existing databases (if any), and desired improvements. It describes common questions that you can ask to learn about users' operations, desires, and needs, and how to build the results into requirements documents and specifications. This explains what use cases are and tells how to use them and the requirements to guide database design and to measure success.

  • "Translating User Needs into Data Models," introduces data modeling. It explains how to translate the user's conceptual model and the requirements into other more precise models that define the database design rigorously. This describes several database modeling techniques including user-interface models, semantic object models, entity-relationship diagrams, and relational models.

  • "Extracting Business Rules," explains how a database can handle business rules. It explains what business rules are, how they differ from database structure requirements, and how you can identify business rules. This explains the benefits of separating business rules from the database structure and tells how achieve that separation.

  • "Normalizing Data," explains one of the biggest tools in database design: normalization. Normalization techniques allow you to restructure a database to increase its flexibility and make it more robust. This explains the various forms of normalization, emphasizing the stages that are most common and important: first, second, and third normal forms (1NF, 2NF, and 3NF). It explains how each of these kinds of normalization helps prevent errors and tells why it is sometimes better to leave a database slightly less normalized to improve performance.

  • "Designing Databases to Support Software Applications," explains how databases fit into the larger context of application design and lifecycle. This explains how later development depends on the underlying database design. It discusses multi-tier architectures that can help decouple the application and database design so there can be at least some changes to either without requiring changes to the other.

  • "Common Design Patterns," explains some common patterns that are useful in many applications. Some of these techniques include implementing various kinds of relationships among objects, storing hierarchical and network data, recording temporal data, and logging and locking.

  • "Common Design Pitfalls," explains some common design mistakes that occur in database development. It describes problems that can arise from insufficient planning, incorrect normalization, and obsession with ID fields and performance.

  • "User Needs and Requirements," walks through the steps required to analyze the users' problem, define requirements, and create use cases. It describes interviews with fictitious customers that are used to identify the application's needs and translate them into database requirements.

  • "Building a Data Model," translates the requirements gathered in the previous into a series of data models that precisely define the database's structure. This builds user-interface models, entity-relationship diagrams, semantic object models, and relational models to refine the database's initial design. The final relational models match the structure of a relational database fairly closely so they are easy to implement.

  • "Extracting Business Rules," identifies the business rules embedded in the relational model. It shows how to extract those rules in order to separate them logically from the database's structure. This makes the database more robust in the face of future changes to the business rules.

  • "Normalization and Refinement," refines the relational model by normalizing it. It walks through several versions of the database that are in different normal forms. It then selects the degree of normalization that provides a reasonable tradeoff between robust design and acceptable performance.

  • "Microsoft Access," explains how to build a database with Microsoft Access 2007. This explains enough to get started and to use Access to build non-trivial databases. You can use other versions of Access to work through this, although the locations of menus, buttons, and other Access features are different in different versions.

  • "MySQL," explains how to build a database with MySQL. This tells where to download a free version of MySQL. It explains how to use the MySQL Command Line Client as well as some useful graphical tools including MySQL Query Browser and MySQL Workbench.

  • "Introduction to SQL," provides an introduction to SQL (Structured Query Language). It explains how to use SQL commands to add, insert, update, and delete data. By using SQL, you can help insulate a program from the idiosyncrasies of the particular database product that it uses to store data.

  • "Building Databases with SQL Scripts," explains how to use SQL scripts to build a database. It explains the advantages of this technique, such as the ability to create scripts to initialize a database before performing tests. It also explains some of the restrictions on this method, such as the fact that the user must create and delete tables in specific orders to satisfy table relationships.

  • "Database Maintenance," describes some of the database maintenance issues that are part of any database application. Though performing and restoring backups, compressing tables, rebuilding indexes, and populating data warehouses are strictly not database design tasks, they are essential to any working application.

  • "Database Security," explains database security issues. It explains the kinds of security that some database products provide. It also explains some additional techniques that can enhance database security such as using database views to appropriately restrict the users' access to data.

Table of Contents

  1. Copyright
  2. About the Author
  3. Credits
  4. Acknowledgments
  5. Introduction
    1. 0.1. Who This Book Is For
    2. 0.2. What This Book Covers
    3. 0.3. What You Need to Use This Book
    4. 0.4. How This Book Is Structured
      1. 0.4.1. Part I: Introduction to Databases and Database Design
      2. 0.4.2. Part II: Database Design Process and Techniques
      3. 0.4.3. Part III: A Detailed Case Study
      4. 0.4.4. Part IV: Implementing Databases (with examples in Access and MySQL)
      5. 0.4.5. Part V: Advanced Topics
      6. 0.4.6. Appendixes
    5. 0.5. How to Use This Book
    6. 0.6. Note to Instructors
    7. 0.7. Note to Students
    8. 0.8. Conventions
    9. 0.9. Source Code
    10. 0.10. The Book's Web Site
    11. 0.11. Errata
    12. 0.12. p2p.wrox.com
    13. 0.13. Contacting the Author
    14. 0.14. Disclaimer
  6. I. Introduction to Databases and Database Design
    1. 1. Goals of Effective Database Design
      1. 1.1. Understanding the Importance of Design
      2. 1.2. Information Containers
      3. 1.3. Strengths and Weaknesses of Information Containers
      4. 1.4. Desirable Database Features
        1. 1.4.1. CRUD
        2. 1.4.2. Retrieval
        3. 1.4.3. Consistency
        4. 1.4.4. Validity
        5. 1.4.5. Easy Error Correction
        6. 1.4.6. Speed
        7. 1.4.7. Atomic Transactions
        8. 1.4.8. ACID
        9. 1.4.9. Persistence and Backups
        10. 1.4.10. Low Cost and Extensibility
        11. 1.4.11. Ease of Use
        12. 1.4.12. Portability
        13. 1.4.13. Security
        14. 1.4.14. Sharing
        15. 1.4.15. Ability to Perform Complex Calculations
        16. 1.4.16. Consequences of Good and Bad Design
      5. 1.5. Summary
      6. 1.6. Exercises
    2. 2. Database Types
      1. 2.1. Why Bother?
      2. 2.2. Flat Files
        1. 2.2.1. INI Files
        2. 2.2.2. Windows System Registry
      3. 2.3. Relational Databases
      4. 2.4. Spreadsheets
      5. 2.5. Hierarchical Databases
      6. 2.6. XML
        1. 2.6.1. XML Basics
        2. 2.6.2. XML Structures
        3. 2.6.3. XML Summary
      7. 2.7. Network
      8. 2.8. Object
      9. 2.9. Object-Relational
      10. 2.10. Exotic
        1. 2.10.1. Document-Oriented
        2. 2.10.2. Deductive
        3. 2.10.3. Dimensional
        4. 2.10.4. Temporal
      11. 2.11. Summary
      12. 2.12. Exercises
    3. 3. Relational Database Fundamentals
      1. 3.1. Relational Points of View
      2. 3.2. Table, Rows, and Columns
      3. 3.3. Relations, Attributes, and Tuples
      4. 3.4. Keys
      5. 3.5. Indexes
      6. 3.6. Constraints
        1. 3.6.1. Basic Constraints
        2. 3.6.2. Check Constraints
        3. 3.6.3. Primary Key Constraints
        4. 3.6.4. Unique Constraints
        5. 3.6.5. Foreign Key Constraints
      7. 3.7. Database Operations
      8. 3.8. Summary
      9. 3.9. Exercises
  7. II. Database Design Process and Techniques
    1. 4. Understanding User Needs
      1. 4.1. Make a Plan
      2. 4.2. Bring a List of Questions
        1. 4.2.1. Functionality
        2. 4.2.2. Data Needs
        3. 4.2.3. Data Integrity
        4. 4.2.4. Security
        5. 4.2.5. Environment
      3. 4.3. Meet the Customers
      4. 4.4. Learn Who's Who
      5. 4.5. Pick the Customers' Brains
      6. 4.6. Walk a Mile in the User's Shoes
      7. 4.7. Study Current Operations
      8. 4.8. Brainstorm
      9. 4.9. Look to the Future
      10. 4.10. Understand the Customers' Reasoning
      11. 4.11. Learn What the Customers Really Need
      12. 4.12. Prioritize
      13. 4.13. Verify Your Understanding
      14. 4.14. Write the Requirements Document
      15. 4.15. Make Use Cases
      16. 4.16. Decide Feasibility
      17. 4.17. Summary
      18. 4.18. Exercises
    2. 5. Translating User Needs into Data Models
      1. 5.1. What Are Data Models?
      2. 5.2. User Interface Models
      3. 5.3. Semantic Object Models
        1. 5.3.1. Classes and Objects
        2. 5.3.2. Cardinality
        3. 5.3.3. Identifiers
        4. 5.3.4. Putting It Together
        5. 5.3.5. Semantic Views
        6. 5.3.6. Class Types
          1. 5.3.6.1. Simple Objects
          2. 5.3.6.2. Composite Objects
          3. 5.3.6.3. Compound Objects
          4. 5.3.6.4. Hybrid Objects
          5. 5.3.6.5. Association Objects
          6. 5.3.6.6. Inherited Objects
        7. 5.3.7. Comments and Notes
      4. 5.4. Entity-Relationship Models
        1. 5.4.1. Entities, Attributes, and Identifiers
        2. 5.4.2. Relationships
        3. 5.4.3. Cardinality
        4. 5.4.4. Inheritance
        5. 5.4.5. Additional Conventions
        6. 5.4.6. Comments and Notes
      5. 5.5. Relational Models
        1. 5.5.1. Converting Semantic Object Models
        2. 5.5.2. Converting ER Diagrams
      6. 5.6. Summary
      7. 5.7. Exercises
    3. 6. Extracting Business Rules
      1. 6.1. What Are Business Rules?
      2. 6.2. Identifying Key Business Rules
      3. 6.3. Extracting Key Business Rules
      4. 6.4. Multi-Tier Applications
      5. 6.5. Summary
      6. 6.6. Exercises
    4. 7. Normalizing Data
      1. 7.1. What Is Normalization?
      2. 7.2. First Normal Form (1NF)
      3. 7.3. Second Normal Form (2NF)
      4. 7.4. Third Normal Form (3NF)
      5. 7.5. Stopping at Third Normal Form
      6. 7.6. Boyce-Codd Normal Form (BCNF)
      7. 7.7. Fourth Normal Form (4NF)
      8. 7.8. Fifth Normal Form (5NF)
      9. 7.9. Domain/Key Normal Form (DKNF)
      10. 7.10. Essential Redundancy
      11. 7.11. The Best Level of Normalization
      12. 7.12. Summary
      13. 7.13. Exercises
    5. 8. Designing Databases to Support Software Applications
      1. 8.1. Plan Ahead
      2. 8.2. Document Everything
      3. 8.3. Consider Multi-Tier Architecture
      4. 8.4. Convert Domains into Tables
      5. 8.5. Keep Tables Focused
      6. 8.6. Use Three Kinds of Tables
      7. 8.7. Use Naming Conventions
      8. 8.8. Allow Some Redundant Data
      9. 8.9. Don't Squeeze in Everything
      10. 8.10. Summary
      11. 8.11. Exercises
    6. 9. Common Design Patterns
      1. 9.1. Associations
        1. 9.1.1. Many-to-Many Associations
        2. 9.1.2. Multiple Many-to-Many Associations
        3. 9.1.3. Multiple-Object Associations
        4. 9.1.4. Repeated Attribute Associations
        5. 9.1.5. Reflexive Associations
          1. 9.1.5.1. One-to-One Reflexive Associations
          2. 9.1.5.2. One-to-Many Reflexive Associations
          3. 9.1.5.3. Hierarchical Data
          4. 9.1.5.4. Network Data
      2. 9.2. Temporal Data
        1. 9.2.1. Effective Dates
        2. 9.2.2. Deleted Objects
        3. 9.2.3. Deciding What to Temporalize
      3. 9.3. Logging and Locking
        1. 9.3.1. Audit Trails
        2. 9.3.2. Turnkey Records
      4. 9.4. Summary
      5. 9.5. Exercises
    7. 10. Common Design Pitfalls
      1. 10.1. Lack of Preparation
      2. 10.2. Poor Documentation
      3. 10.3. Poor Naming Standards
      4. 10.4. Thinking Too Small
      5. 10.5. Not Planning for Change
      6. 10.6. Too Much Normalization
      7. 10.7. Insufficient Normalization
      8. 10.8. Insufficient Testing
      9. 10.9. Performance Anxiety
      10. 10.10. Mishmash Tables
      11. 10.11. Not Enforcing Constraints
      12. 10.12. Obsession with IDs
      13. 10.13. Not Defining Natural Keys
      14. 10.14. Summary
      15. 10.15. Exercises
  8. III. A Detailed Case Study
    1. 11. User Needs and Requirements
      1. 11.1. Meet the Customers
      2. 11.2. Pick the Customers' Brains
        1. 11.2.1. Determining What the System Should Do
        2. 11.2.2. Determining How the Project Should Look
        3. 11.2.3. Determining What Data Is Needed for the User Interface
        4. 11.2.4. Determining Where the Data Should Come From
        5. 11.2.5. Determining How the Pieces of Data Are Related
        6. 11.2.6. Determining Performance Needs
        7. 11.2.7. Determining Security Needs
        8. 11.2.8. Determining Data Integrity Needs
      3. 11.3. Write Use Cases
      4. 11.4. Write the Requirements Document
      5. 11.5. Demand Feedback
      6. 11.6. Summary
      7. 11.7. Exercises
    2. 12. Building a Data Model
      1. 12.1. Semantic Object Modeling
        1. 12.1.1. Building an Initial Semantic Object Model
        2. 12.1.2. Improving the Semantic Object Model
      2. 12.2. Entity-Relationship Modeling
        1. 12.2.1. Building an ER Diagram
        2. 12.2.2. Building a Combined ER Diagram
        3. 12.2.3. Improving the Entity-Relationship Diagram
      3. 12.3. Relational Modeling
      4. 12.4. Putting It All Together
      5. 12.5. Summary
      6. 12.6. Exercises
    3. 13. Extracting Business Rules
      1. 13.1. Identifying Business Rules
        1. 13.1.1. Courses
        2. 13.1.2. CustomerCourses
        3. 13.1.3. Customers
        4. 13.1.4. Pets
        5. 13.1.5. Employees
        6. 13.1.6. Orders
        7. 13.1.7. OrderItems
        8. 13.1.8. InventoryItems
        9. 13.1.9. TimeEntries
        10. 13.1.10. Shifts
        11. 13.1.11. Persons
        12. 13.1.12. Phones
        13. 13.1.13. Vendors
      2. 13.2. Drawing a New Relational Model
      3. 13.3. Summary
      4. 13.4. Exercises
    4. 14. Normalization and Refinement
      1. 14.1. Improving Flexibility
      2. 14.2. Verifying First Normal Form
      3. 14.3. Verifying Second Normal Form
        1. 14.3.1. Pets
        2. 14.3.2. TimeEntries
      4. 14.4. Verifying Third Normal Form
      5. 14.5. Summary
      6. 14.6. Exercises
  9. IV. Implementing Databases (with Examples in Access and MySQL)
    1. 15. Microsoft Access
      1. 15.1. Understanding Access
      2. 15.2. Getting Started
      3. 15.3. Defining Relationships
      4. 15.4. Creating Field Constraints
      5. 15.5. Creating Table Constraints
      6. 15.6. Creating Queries
        1. 15.6.1. Query Design View
        2. 15.6.2. SQL View
      7. 15.7. Summary
      8. 15.8. Exercises
    2. 16. MySQL
      1. 16.1. Installing MySQL
      2. 16.2. Using MySQL Command Line Client
      3. 16.3. Executing SQL Scripts
      4. 16.4. Using MySQL Query Browser
        1. 16.4.1. Executing Queries
        2. 16.4.2. Editing Data
        3. 16.4.3. Creating and Modifying Databases
        4. 16.4.4. Using Scripts
        5. 16.4.5. Getting Syntax Help
      5. 16.5. Using MySQL Workbench
        1. 16.5.1. Loading Scripts
        2. 16.5.2. Creating EER Diagrams
        3. 16.5.3. Editing Databases
        4. 16.5.4. Defining Triggers
        5. 16.5.5. Exporting Scripts
      6. 16.6. Summary
      7. 16.7. Exercises
  10. V. Advanced Topics
    1. 17. Introduction to SQL
      1. 17.1. Background
      2. 17.2. Finding More Information
      3. 17.3. Standards
      4. 17.4. Basic Syntax
      5. 17.5. Command Overview
      6. 17.6. CREATE TABLE
      7. 17.7. CREATE INDEX
      8. 17.8. DROP
      9. 17.9. INSERT
      10. 17.10. SELECT
        1. 17.10.1. SELECT Clause
        2. 17.10.2. FROM Clause
        3. 17.10.3. WHERE Clause
        4. 17.10.4. GROUP BY Clause
        5. 17.10.5. ORDER BY Clause
      11. 17.11. UPDATE
      12. 17.12. DELETE
      13. 17.13. Summary
      14. 17.14. Exercises
    2. 18. Building Databases with SQL Scripts
      1. 18.1. Why Bother with Scripts?
      2. 18.2. Script Categories
        1. 18.2.1. Database Creation Scripts
        2. 18.2.2. Basic Initialization Scripts
        3. 18.2.3. Data Initialization Scripts
        4. 18.2.4. Cleanup Scripts
        5. 18.2.5. Saving Scripts
      3. 18.3. Ordering SQL Commands
      4. 18.4. Summary
      5. 18.5. Exercises
    3. 19. Database Maintenance
      1. 19.1. Backups
      2. 19.2. Data Warehousing
      3. 19.3. Repairing the Database
      4. 19.4. Compacting the Database
      5. 19.5. Performance Tuning
      6. 19.6. Summary
      7. 19.7. Exercises
    4. 20. Database Security
      1. 20.1. The Right Level of Security
      2. 20.2. Passwords
        1. 20.2.1. Single-Password Databases
        2. 20.2.2. Individual Passwords
        3. 20.2.3. Operating System Passwords
        4. 20.2.4. Good Passwords
      3. 20.3. Privileges
      4. 20.4. Initial Configuration and Privileges
      5. 20.5. Too Much Security
      6. 20.6. Physical Security
      7. 20.7. Summary
      8. 20.8. Exercises
    5. A. Exercise Solutions
      1. A.1. Chapter 1
        1. A.1.1. Exercise 1 Solution
        2. A.1.2. Exercise 2 Solution
        3. A.1.3. Exercise 3 Solution
        4. A.1.4. Exercise 4 Solution
        5. A.1.5. Exercise 5 Solution
        6. A.1.6. Exercise 6 Solution
        7. A.1.7. Exercise 7 Solution
        8. A.1.8. Exercise 8 Solution
      2. A.2. Chapter 2
        1. A.2.1. Exercise 1 Solution
        2. A.2.2. Exercise 2 Solution
        3. A.2.3. Exercise 3 Solution
        4. A.2.4. Exercise 4 Solution
        5. A.2.5. Exercise 5 Solution
        6. A.2.6. Exercise 6 Solution
        7. A.2.7. Exercise 7 Solution
        8. A.2.8. Exercise 8 Solution
        9. A.2.9. Exercise 9 Solution
        10. A.2.10. Exercise 10 Solution
        11. A.2.11. Exercise 11 Solution
        12. A.2.12. Exercise 12 Solution
        13. A.2.13. Exercise 13 Solution
        14. A.2.14. Exercise 14 Solution
        15. A.2.15. Exercise 15 Solution
      3. A.3. Chapter 3
        1. A.3.1. Exercise 1 Solution
        2. A.3.2. Exercise 2 Solution
        3. A.3.3. Exercise 3 Solution
        4. A.3.4. Exercise 4 Solution
        5. A.3.5. Exercise 5 Solution
        6. A.3.6. Exercise 6 Solution
        7. A.3.7. Exercise 7 Solution
        8. A.3.8. Exercise 8 Solution
        9. A.3.9. Exercise 9 Solution
        10. A.3.10. Exercise 10 Solution
      4. A.4. Chapter 4
        1. A.4.1. Exercise 1 Solution
        2. A.4.2. Exercise 2 Solution
        3. A.4.3. Exercise 3 Solution
        4. A.4.4. Exercise 4 Solution
        5. A.4.5. Exercise 5 Solution
        6. A.4.6. Exercise 6 Solution
        7. A.4.7. Exercise 7 Solution
        8. A.4.8. Exercise 8 Solution
        9. A.4.9. Exercise 9 Solution
        10. A.4.10. Exercise 10 Solution
      5. A.5. Chapter 5
        1. A.5.1. Exercise 1 Solution
        2. A.5.2. Exercise 2 Solution
        3. A.5.3. Exercise 3 Solution
        4. A.5.4. Exercise 4 Solution
        5. A.5.5. Exercise 5 Solution
        6. A.5.6. Exercise 6 Solution
        7. A.5.7. Exercise 7 Solution
        8. A.5.8. Exercise 8 Solution
      6. A.6. Chapter 6
        1. A.6.1. Exercise 1 Solution
        2. A.6.2. Exercise 2 Solution
        3. A.6.3. Exercise 3 Solution
        4. A.6.4. Exercise 4 Solution
      7. A.7. Chapter 7
        1. A.7.1. Exercise 1 Solution
        2. A.7.2. Exercise 2 Solution
        3. A.7.3. Exercise 3 Solution
        4. A.7.4. Exercise 4 Solution
        5. A.7.5. Exercise 5 Solution
        6. A.7.6. Exercise 6 Solution
      8. A.8. Chapter 8
        1. A.8.1. Exercise 1 Solution
        2. A.8.2. Exercise 2 Solution
        3. A.8.3. Exercise 3 Solution
        4. A.8.4. Exercise 4 Solution
      9. A.9. Chapter 9
        1. A.9.1. Exercise 1 Solution
        2. A.9.2. Exercise 2 Solution
        3. A.9.3. Exercise 3 Solution
        4. A.9.4. Exercise 4 Solution
        5. A.9.5. Exercise 5 Solution
        6. A.9.6. Exercise 6 Solution
        7. A.9.7. Exercise 7 Solution
        8. A.9.8. Exercise 8 Solution
      10. A.10. Chapter 10
        1. A.10.1. Exercise 1 Solution
        2. A.10.2. Exercise 2 Solution
        3. A.10.3. Exercise 3 Solution
        4. A.10.4. Exercise 4 Solution
      11. A.11. Chapter 11
        1. A.11.1. Exercise 1 Solution
        2. A.11.2. Exercise 2 Solution
        3. A.11.3. Exercise 3 Solution
        4. A.11.4. Exercise 4 Solution
        5. A.11.5. Exercise 5 Solution
        6. A.11.6. Exercise 6 Solution
      12. A.12. Chapter 12
        1. A.12.1. Exercise 1 Solution
        2. A.12.2. Exercise 2 Solution
        3. A.12.3. Exercise 3 Solution
        4. A.12.4. Exercise 4 Solution
        5. A.12.5. Exercise 5 Solution
        6. A.12.6. Exercise 6 Solution
        7. A.12.7. Exercise 7 Solution
        8. A.12.8. Exercise 8 Solution
        9. A.12.9. Exercise 9 Solution
        10. A.12.10. Exercise 10 Solution
        11. A.12.11. Exercise 11 Solution
        12. A.12.12. Exercise 12 Solution
      13. A.13. Chapter 13
        1. A.13.1. Exercise 1 Solution
        2. A.13.2. Exercise 2 Solution
        3. A.13.3. Exercise 3 Solution
        4. A.13.4. Exercise 4 Solution
        5. A.13.5. Exercise 5 Solution
      14. A.14. Chapter 14
        1. A.14.1. Exercise 1 Solution
        2. A.14.2. Exercise 2 Solution
        3. A.14.3. Exercise 3 Solution
        4. A.14.4. Exercise 4 Solution
      15. A.15. Chapter 15
      16. A.16. Chapter 16
      17. A.17. Chapter 17
        1. A.17.1. Exercise 1 Solution
        2. A.17.2. Exercise 2 Solution
        3. A.17.3. Exercise 3 Solution
        4. A.17.4. Exercise 4 Solution
        5. A.17.5. Exercise 5 Solution
      18. A.18. Chapter 18
        1. A.18.1. Exercise 1 Solution
        2. A.18.2. Exercise 2 Solution
      19. A.19. Chapter 19
        1. A.19.1. Exercise 1 Solution
        2. A.19.2. Exercise 2 Solution
      20. A.20. Chapter 20
        1. A.20.1. Exercise 1 Solution
        2. A.20.2. Exercise 2 Solution
        3. A.20.3. Exercise 3 Solution
    6. B. Sample Database Designs
      1. B.1. Books
      2. B.2. DVD and Movies
      3. B.3. Music and CDs
      4. B.4. Documents
      5. B.5. Customer Orders
      6. B.6. Employee Shifts and Timesheets
      7. B.7. Employees, Projects, and Departments
      8. B.8. Employee Skills and Qualifications
      9. B.9. Identical Object Rental
      10. B.10. Distinct Object Rental
      11. B.11. Students, Courses, and Grades
      12. B.12. Teams
      13. B.13. Individual Sports
      14. B.14. Vehicle Fleets
      15. B.15. Contacts
      16. B.16. Passengers
      17. B.17. Recipes
    7. Glossary