Table of Contents
The Worlds of Database Systems
1.1 The Evolution of Database Systems
1.1.1 Early Database Management Systems
1.1.2 Relational Database Systems
1.1.3 Smaller and Smaller Systems
1.1.4 Bigger and Bigger Systems
1.2 The Architecture of a DBMS
1.2.1 Overview of DBMS Components
1.2.2 The Storage Manager
1.2.3 The Query Manager
1.2.4 The Transaction Manager
1.2.5 Client-Server Architecture
1.3 The Future of Database Systems
1.3.1 Types, Classes, and Objects
1.3.2 Constraints and Triggers
1.3.3 Multimedia Data
1.3.4 Data Integration
1.4 Outline of the Book
1.4.1 Design
1.4.2 Programming
1.5 Summary of Chapter 1
1.6 References for Chapter 1
Database Modeling
2.1 Introduction to ODL
2.1.1 Object-Oriented Design
2.1.2 Interface Declarations
2.1.3 Attributes in ODL
2.1.4 Relationships in ODL
2.1.5 Inverse Relationships
2.1.6 Multiplicity of Relationships
2.1.7 Types in ODL
2.1.8 Exercises for Section 2.1
2.2 Entity-Relationship Diagrams
2.2.1 Multiplicity of E/R Relationships
2.2.2 Multiway Relationships
2.2.3 Roles in Relationships
2.2.4 Attributes on Relationships
2.2.5 Converting Multiway Relationships to Binary
2.2.6 Exercises for Section 2.2
2.3 Design Principles
2.3.1 Faithfulness
2.3.2 Avoiding Redundancy
2.3.3 Simplicity Counts
2.3.4 Picking the Right Kind of Element
2.3.5 Exercises for Section 2.3
2.4 Subclasses
2.4.1 Subclasses in ODL
2.4.2 Multiple Inheritance in ODL
2.4.3 Subclasses in Entity-Relationship Diagrams
2.4.4 Inheritance in the E/R Model
2.4.5 Exercises for Section 2.4
2.5 The Modeling of Constraints
2.5.1 Keys
2.5.2 Declaring Keys in ODL
2.5.3 Representing Keys in the E/R Model
2.5.4 Single-Value Constraints
2.5.5 Referential Integrity
2.5.6 Referential Integrity in E/R Diagrams
2.5.7 Other Kinds of Constraints
2.5.8 Exercises for Section 2.5
2.6 Weak Entity Sets
2.6.1 Causes of Weak Entity Sets
2.6.2 Requirements for Weak Entity Sets
2.6.3 Weak Entity Set Notation
2.6.4 Exercises for Section 2.6
2.7 Models of Historical Interest -
2.7.1 The Network Model
2.7.2 Representing Network Schemas
2.7.3 The Hierarchical Model
2.7.4 Exercises for Section 2.7
2.8 Summary of Chapter 2
2.9 References for Chapter 2
3 The Relational Data Model
3.1 Basics of the Relational Model
3.1.1 Attributes
3.1.2 Schemas
3.1.3 Tuples
3.1.4 Domains
3.1.5 Equivalent Representations of a Relation
3.1.6 Relation Instances
3.1.7 Exercises for Section 3.1
3.2 From ODL Designs to Relational Designs
3.2.1 From ODL Attributes to Relational Attributes
3.2.2 Nonatomic Attributes in Classes
3.2.3 Representing Other Type Constructors
3.2.4 Representing Single-Valued Relationships
3.2.5 Representing Multivalued Relationships
3.2.6 What If There Is No Key?
3.2.7 Representing a Relationship and Its Inverse
3.2.8 Exercises for Section 3.2
3.3 From E/R Diagrams to Relational Designs
3.3.1 Prom Entity Sets to Relations
3.3.2 From E/R Relationships to Relations
3.3.3 Handling Weak Entity Sets
3.3.4 Exercises for Section 3.3
3.4 Converting Subclass Structures to Relations
3.4.1 Relational Representation of ODL Subclasses
3.4.2 Representing Isa in the Relational Model
3.4.3 Comparison of Approaches
3.4.4 Using Null Values to Combine Relations
3.4.5 Exercises for Section 3.4
3.5 Functional Dependencies
3.5.1 Definition of Functional Dependency
3.5.2 Keys of Relations
3.5.3 Superkeys
3.5.4 Discovering Keys for Relations
3.5.5 Keys for Relations Derived from ODL
3.5.6 Exercises for Section 3.5
3.6 Rules About Functional Dependencies
3.6.1 The Splitting/Combining Rule
3.6.2 Trivial Dependencies
3.6.3 Computing the Closure of Attributes
3.6.4 The Transitive Rule
3.6.5 Closing Sets of Functional Dependencies
3.6.6 Exercises for Section 3.6
3.7 Design of Relational Database Schemas
3.7.1 Anomalies
3.7.2 Decomposing Relations
3.7.3 Boyce-Codd Normal Form
3.7.4 Decomposition into BCNF
3.7.5 Projecting Functional Dependencies
3.7.6 Recovering Information from a Decomposition
3.7.7 Third Normal Form
3.7.8 Exercises for Section 3.7
3.8 Multivalued Dependencies
3.8.1 Attribute Independence and Its Consequent Redundancy
3.8.2 Definition of Multivalued Dependencies
3.8.3 Reasoning About Multivalued Dependencies
3.8.4 Fourth Normal Form
3.8.5 Decomposition into Fourth Normal Form
3.8.6 Relationships Among Normal Forms
3.8.7 Exercises for Section 3.8
3.9 An Example Database Schema
3.10 Summary of Chapter 3
3.11 References for Chapter 3
4 Operations in the Relational Model
4.1 An Algebra of Relational Operations
4.1.1 Set Operations on Relations
4.1.2 Projection
4.1.3 Selection
4.1.4 Cartesian Product
4.1.5 Natural Joins
4.1.6 Theta-Joins
4.1.7 Combining Operations to Form Queries
4.1.8 Renaming
4.1.9 Dependent and Independent Operations
4.1.10 Exercises for Section 4.1
4.2 A Logic for Relations
4.2.1 Predicates and Atoms
4.2.2 Arithmetic Atoms
4.2.3 Datalog Rules and Queries
4.2.4 Meaning of Datalog Rules
4.2.5 Extensional and Intensional Predicates
4.2.6 Exercises for Section 4.2
4.3 From Relational Algebra to Datalog
4.3.1 Intersection
4.3.2 Union
4.3.3 Difference
4.3.4 Projection
4.3.5 Selection
4.3.6 Product
4.3.7 Joins
4.3.8 Sinaulating Multiple Operations with Datalog
4.3.9 Exercises for Section 4.3
4.4 Recursive Programming in Datalog
4.4.1 The Fixedpoint Operator
4.4.2 Computing the Least Fixedpoint
4.4.3 Fixedpoint Equations in Datalog
4.4.4 Negation in Recursive Rules
4.4.5 Exercises for Section 4.4
4.5 Constraints on Relations
4.5.1 Relational AIgebra as a Constraint Language
4.5.2 Referential Integrity Constraints
4.5.3 Additional Constraint Examples
4.5.4 Exercises for Section 4.5
4.6 Relational Operations on Bags
4.6.1 Why Bags?
4.6.2 Union, Intersection, and Difference of Bags
4.6.3 Projection of Bags
4.6.4 Selection on Bags
4.6.5 Product of Bags
4.6.6 Joins of Bags
4.6.7 Datalog Rules Applied to Bags
4.6.8 Exercises for Section 4.6
4.7 Other Extensions to the Relational Model
4.7.1 Modifications
4.7.2 Aggregations
4.7.3 Views
4.7.4 Null Values
4.8 Summary of Chapter 4
4.9 References for Chapter 4
5 The Database Language SQL
5.1 Simple Queries in SQL
5.1.1 Projection in SQL
5.1.2 Selection in SQL
5.1.3 Comparison of Strings
5.1.4 Comparing Dates and Times
5.1.5 Ordering the Output
5.1.6 Exercises for Section 5.1
5.2 Queries Involving More than One Relation
5.2.1 Products and Joins in SQL
5.2.2 Disambiguating Attributes
5.2.3 Tuple Variables
5.2.4 Interpreting Multirelation Queries
5.2.5 Union, Intersection, and Difference of Queries
5.2.6 Exercises for Section 5.2
5.3 Subqueries
5.3.1 Subqueries that Produce Scatar Values
5.3.2 Conditions Involving Relations
5.3.3 Conditions Involving Tuples
5.3.4 Correlated Subqueries
5.3.5 Exercises for Section 5.3
5.4 Duplicates
5.4.1 Eliminating Duplicates
5.4.2 Duplicates in Unions, Intersections, and Differences
5.4.3 Exercises for Section 5.4
5.5 Aggregation
5.5.1 Aggregation Operators
5.5.2 Grouping
5.5.3 HAVING Clauses
5.5.4 Exercises for Section 5.5
5.6 Database Modifications
5.6.1 Insertion
5.6.2 Deletion
5.6.3 Updates
5.6.4 Exercises for Section 5.6
5.7 Defining a Relation Schema in SQL
5.7.1 Data Types
5.7.2 Simple Table Declarations
5.7.3 Deleting Tables
5.7.4 Modifying Relation Schemas
5.7.5 Default Values
5.7.6 Domains
5.7.7 Indexes
5.7.8 Exercises for Section 5.7
5.8 View Definitions
5.8.1 Declaring Views
5.8.2 Querying Views
5.8.3 Renaming Attributes
5.8.4 Modifying Views
5.8.5 Interpreting Queries Involving Views
5.8.6 Exercises for Section 5.8
5.9 Null Values and Outerjoins
5.9.1 Operations on Nulls
5.9.2 The Truth-Value UNKNOWN
5.9.3 SQL2 Join Expressions
5.9.4 Natural Joins
5.9.5 Outerjoins
5.9.6 Exercises for Section 5.9
5.10 Recursion in SQL3
5.10.1 Defining IDB Relations in SQL3
5.10.2 Linear Recursion
5.10.3 Use of Views in With-Statements
5.10.4 Stratified Negation
5.10.5 Problematic Expressions in Recursive SQL3
5.10.6 Exercises for Section 5.10
5.11 Summary of Chapter 5
5.12 References for Chapter 5
6 Constraints and Triggers in SQL
6.1 Keys in SQL
6.1.1 Declaring Keys
6.1.2 Enforcing Key Constraints
6.1.3 Exercises for Section 6.1
6.2 Referential Integrity and Foreign Keys
6.2.1 Declaring Foreign-Key Constraints
6.2.2 Maintaining Referential Integrity
6.2.3 Exercises for Section 6.2
6.3 Constraints on the Values of Attributes
6.3.1 Not-Null Constraints
6.3.2 Attribute-Based CHECK Constraints
6.3.3 Domain Constraints
6.3.4 Exercises for Section 6.3
6.4 Global Constraints
6.4.1 Tuple-Based CHECK Constraints
6.4.2 Assertions
6.4.3 Exercises for Section 6.4
6.5 Modification of Constraints
6.5.1 Giving Names to Constraints
6.5.2 Altering Constraints on Tables
6.5.3 Altering Domain Constraints
6.5.4 Altering Assertions
6.5.5 Exercises for Section 6.5
6.6 Triggers in SQL3
6.6.1 Triggers and Constraints
6.6.2 SQL3 Triggers
6.6.3 Assertions in SQL3
6.6.4 Exercises for Section 6.6
6.7 Summary of Chapter 6
6.8 References for Chapter 6
7 System Aspects of SQL
7.1 SQL in a Programming Environment
7.1.1 The Impedance Mismatch Problem
7.1.2 The SQL/Host Language Interface
7.1.3 The DECLARE Section
7.1.4 Using Shared Variables
7.1.5 Single-Row Select Statements
7.1.6 Cursors
7.1.7 Modifications by Cursor
7.1.8 Cursor Options
7.1.9 Ordering Tuples for Fetching
7.1.10 Protecting Against Concurrent Updates
7.1.11 Scrolling Cursors
7.1.12 Dynamic SQL
7.1.13 Exercises for Section 7.1
7.2 Transactions in SQL
7.2.1 Serializability
7.2.2 Atomicity
7.2.3 Transactions
7.2.4 Read-Only Transactions
7.2.5 Dirty Reads
7.2.6 Other Isolation Levels
7.2.7 Exercises for Section 7.2
7.3 The SQL Environment
7.3.1 Environments
7.3.2 Schemas
7.3.3 Catalogs
7.3.4 Clients and Servers in the SQL Environment
7.3.5 Connections
7.3.6 Sessions
7.3.7 Modules
7.4 Security and User Authorization in SQL2
7.4.1 Privileges
7.4.2 Creating Privileges
7.4.3 The Privilege-Checking Process
7.4.4 Granting Privileges
7.4.5 Grant Diagrams
7.4.6 Revoking Privileges
7.4.7 Exercises for Section 7.4
7.5 Summary of Chapter 7
7.6 References for Chapter 7
8 Object-Oriented Query Languages
8.1 Query-Related Features bf ODL
8.1.1 Operations on ODL Objects
8.1.2 Declaring Method Signatures in ODL
8.1.3 The Extent of a Class
8.1.4 Exercises for Section 8.1
8.2 Introduction to OQL
8.2.1 An Object-Oriented Movie Example
8.2.2 The OQL Type System
8.2.3 Path Expressions
8.2.4 Select-From-Where Expressions in OQL
8.2.5 Eliminating Duplicates
8.2.6 Complex Output Types
8.2.7 Subqueries
8.2.8 Ordering the Result
8.2.9 Exercises for Section 8.2
8.3 Additional Forms of OQL Expressions
8.3.1 Quantifier Expressions
8.3.2 Aggregation Expressions
8.3.3 Group-By Expressions
8.3.4 HAVING Clauses
8.3.5 Set Operators
8.3.6 Exercises for Section 8.3
8.4 Object Assignment and Creation in OQL
8.4.1 Assigning Values to Host-Language Variables
8.4.2 Extracting Elements of Collections
8.4.3 Obtaining Each Member of a Collection
8.4.4 Creating New Objects
8.4.5 Exercises for Section 8.4
8.5 Tuple Objects in SQL3
8.5.1 Row Types
8.5.2 Declaring Relations with a Row Type
8.5.3 Accessing Components of a Row Type
8.5.4 References
8.5.5 Following Reterences
8.5.6 Scopes of References
8.5.7 Object Identifiers as Values
8.5.8 Exercises for Section 8.5
8.6 Abstract Data Types in SQL3
8.6.1 Defining ADT's
8.6.2 Defining Methods for ADT's
8.6.3 External Functions
8.6.4 Exercises for Section 8.6
8.7 A Comparison of the ODL/OQL and SQL3 Approaches
8.8 Summary of Chapter 8
8.9 References for Chapter 8