Preface to the Fourth Edition |
|
xix | |
Acknowledgments |
|
xxi | |
Part I Introduction |
|
|
Chapter 1 The Database Environment |
|
|
3 | (24) |
|
|
4 | (2) |
|
|
4 | (1) |
|
|
5 | (1) |
|
Systems that Use Databases |
|
|
6 | (1) |
|
|
7 | (2) |
|
Service-Oriented Architecture (SOA) |
|
|
8 | (1) |
|
|
9 | (3) |
|
Database Hardware Architecture |
|
|
12 | (10) |
|
|
12 | (2) |
|
|
14 | (1) |
|
|
15 | (2) |
|
|
17 | (1) |
|
|
18 | (1) |
|
|
19 | (3) |
|
Other Factors in the Database Environment |
|
|
22 | (3) |
|
|
22 | (1) |
|
Government Regulations and Privacy |
|
|
23 | (1) |
|
|
24 | (1) |
|
Open Source Relational DBMSs |
|
|
25 | (1) |
|
|
26 | (1) |
|
Chapter 2 Systems Analysis and Database Requirements |
|
|
27 | (20) |
|
Dealing with Resistance to Change |
|
|
28 | (1) |
|
The Structured Design Life Cycle |
|
|
29 | (2) |
|
Conducting the Needs Assessment |
|
|
31 | (3) |
|
|
34 | (1) |
|
|
35 | (1) |
|
Evaluating and Choosing an Alternative |
|
|
36 | (1) |
|
Creating Design Requirements |
|
|
37 | (1) |
|
Alternative Analysis Methods |
|
|
37 | (6) |
|
|
37 | (2) |
|
|
39 | (2) |
|
|
41 | (2) |
|
|
43 | (4) |
Part II Relational Database Design Theory |
|
|
Chapter 3 Why Good Design Matters |
|
|
47 | (8) |
|
Effects of Poor Database Design |
|
|
47 | (2) |
|
Unnecessary Duplicated Data and Data Consistency |
|
|
49 | (2) |
|
|
51 | (1) |
|
|
52 | (1) |
|
|
53 | (1) |
|
|
53 | (2) |
|
Chapter 4 Entities and Relationships |
|
|
55 | (34) |
|
Entities and Their Attributes |
|
|
55 | (9) |
|
|
56 | (1) |
|
Single-Valued Versus Multivalued Attributes |
|
|
57 | (3) |
|
Avoiding Collections of Entities |
|
|
60 | (1) |
|
Documenting Entities and Their Attributes |
|
|
61 | (2) |
|
Entities and Attributes for Antique Opticals |
|
|
63 | (1) |
|
|
64 | (2) |
|
|
64 | (1) |
|
|
65 | (1) |
|
|
66 | (5) |
|
|
68 | (1) |
|
One-to-Many Relationships |
|
|
69 | (1) |
|
Many-to-Many Relationships |
|
|
69 | (1) |
|
Weak Entities and Mandatory Relationships |
|
|
70 | (1) |
|
Documenting Relationships |
|
|
71 | (5) |
|
|
71 | (2) |
|
|
73 | (1) |
|
|
74 | (1) |
|
Basic Relationships for Antique Opticals |
|
|
75 | (1) |
|
Dealing with Many-to-Many Relationships |
|
|
76 | (6) |
|
|
77 | (1) |
|
Documenting Composite Entities |
|
|
78 | (1) |
|
Resolving Antique Opticals' Many-to-Many Relationships |
|
|
78 | (2) |
|
|
80 | (2) |
|
Relationships and Business Rules |
|
|
82 | (1) |
|
Data Modeling Versus Data Flow |
|
|
82 | (4) |
|
|
86 | (1) |
|
|
87 | (2) |
|
Chapter 5 The Relational Data Model |
|
|
89 | (18) |
|
|
90 | (2) |
|
Columns and Column Characteristics |
|
|
90 | (1) |
|
Rows and Row Characteristics |
|
|
91 | (1) |
|
|
91 | (1) |
|
|
92 | (1) |
|
|
92 | (5) |
|
Primary Keys to Identify People |
|
|
93 | (1) |
|
Avoiding Meaningful Identifiers |
|
|
94 | (2) |
|
Concatenated Primary Keys |
|
|
96 | (1) |
|
|
96 | (1) |
|
Representing Data Relationships |
|
|
97 | (4) |
|
|
99 | (1) |
|
Concatenated Foreign Keys |
|
|
99 | (1) |
|
Foreign Keys That Reference the Primary Key of Their Own Table |
|
|
100 | (1) |
|
|
101 | (1) |
|
|
101 | (1) |
|
|
102 | (1) |
|
|
102 | (2) |
|
Sample Data Dictionary Tables |
|
|
103 | (1) |
|
|
104 | (1) |
|
|
105 | (2) |
|
Chapter 6 Relational Algebra |
|
|
107 | (34) |
|
The Relational Algebra and SQL Example Database: Rare Books |
|
|
108 | (2) |
|
|
110 | (2) |
|
Making Vertical Subsets: Project |
|
|
112 | (4) |
|
Making Horizontal Subsets: Restrict |
|
|
116 | (2) |
|
Choosing Columns and Rows: Restrict and Then Project |
|
|
118 | (1) |
|
|
119 | (17) |
|
|
119 | (2) |
|
|
121 | (1) |
|
|
121 | (2) |
|
What's Really Going On: Product and Restrict |
|
|
123 | (2) |
|
Equi-Joins over Concatenated Keys |
|
|
125 | (4) |
|
|
129 | (1) |
|
|
130 | (3) |
|
Valid Versus Invalid Joins |
|
|
133 | (3) |
|
|
136 | (1) |
|
|
136 | (4) |
|
|
140 | (1) |
|
|
141 | (22) |
|
Translating an ER Diagram into Relations |
|
|
141 | (2) |
|
|
143 | (1) |
|
|
144 | (4) |
|
Understanding Repeating Groups |
|
|
144 | (1) |
|
Handling Repeating Groups |
|
|
145 | (2) |
|
Problems with First Normal Form |
|
|
147 | (1) |
|
|
148 | (3) |
|
Understanding Functional Dependencies |
|
|
149 | (1) |
|
Using Functional Dependencies to Reach 2NF |
|
|
150 | (1) |
|
Problems with 2NF Relations |
|
|
151 | (1) |
|
|
151 | (2) |
|
|
152 | (1) |
|
|
153 | (1) |
|
|
154 | (2) |
|
|
155 | (1) |
|
|
156 | (3) |
|
|
159 | (1) |
|
|
160 | (3) |
|
Chapter 8 Database Design and Performance Tuning |
|
|
163 | (8) |
|
|
164 | (2) |
|
Deciding Which Indexes to Create |
|
|
165 | (1) |
|
|
166 | (1) |
|
|
167 | (2) |
|
|
167 | (1) |
|
|
168 | (1) |
|
|
169 | (2) |
|
Chapter 9 Codd's Rules for Relational DBMSs |
|
|
171 | (12) |
|
Rule 0 The Foundation Rule |
|
|
171 | (1) |
|
Rule 1 The Information Rule |
|
|
172 | (1) |
|
Rule 2 The Guaranteed Access Rule |
|
|
173 | (1) |
|
Rule 3 Systematic Treatment of Null Values |
|
|
174 | (1) |
|
Rule 4 Dynamic Online Catalog Based on the Relational Model |
|
|
175 | (1) |
|
Rule 5 The Comprehensive Data Sublanguage Rule |
|
|
176 | (1) |
|
Rule 6 The View Updating Rule |
|
|
176 | (1) |
|
Rule 7 High-Level Insert, Update, Delete |
|
|
177 | (1) |
|
Rule 8 Physical Data Independence |
|
|
177 | (1) |
|
Rule 9 Logical Data Independence |
|
|
178 | (1) |
|
Rule 10 Integrity Independence |
|
|
178 | (1) |
|
Rule 11 Distribution Independence |
|
|
179 | (1) |
|
Rule 12 Nonsubversion Rule |
|
|
180 | (1) |
|
|
180 | (3) |
Part III Relational Database Design Practice |
|
|
Chapter 10 Introduction to SQL |
|
|
183 | (8) |
|
|
183 | (2) |
|
|
185 | (1) |
|
|
186 | (3) |
|
Interactive SQL Command Processors |
|
|
187 | (1) |
|
|
187 | (2) |
|
|
189 | (1) |
|
Elements of a SQL Statement |
|
|
189 | (1) |
|
|
190 | (1) |
|
Chapter 11 Using SQL to Implement a Relational Design |
|
|
191 | (24) |
|
Database Structure Hierarchy |
|
|
191 | (3) |
|
Naming and Identifying Structural Elements |
|
|
193 | (1) |
|
|
194 | (1) |
|
|
194 | (1) |
|
Identifying the Schema You Want to Use |
|
|
195 | (1) |
|
|
195 | (2) |
|
|
197 | (12) |
|
|
197 | (3) |
|
|
200 | (1) |
|
|
200 | (1) |
|
|
200 | (2) |
|
|
202 | (3) |
|
Additional Column Constraints |
|
|
205 | (4) |
|
Modifying Database Elements |
|
|
209 | (3) |
|
|
209 | (1) |
|
|
209 | (1) |
|
|
210 | (1) |
|
|
211 | (1) |
|
|
212 | (1) |
|
Deleting Database Elements |
|
|
212 | (1) |
|
|
213 | (2) |
|
Chapter 12 Using CASE Tools for Database Design |
|
|
215 | (16) |
|
|
216 | (1) |
|
|
217 | (2) |
|
|
219 | (1) |
|
|
220 | (7) |
|
|
227 | (1) |
|
Sample Input and Output Designs |
|
|
227 | (2) |
|
|
229 | (1) |
|
|
230 | (1) |
|
Chapter 13 Database Design Case Study #1: Mighty-Mite Motors |
|
|
231 | (34) |
|
|
231 | (16) |
|
Product Development Division |
|
|
237 | (1) |
|
|
237 | (1) |
|
Marketing and Sales Division |
|
|
237 | (1) |
|
Current Information Systems |
|
|
238 | (1) |
|
|
239 | (1) |
|
New Information Systems Division |
|
|
239 | (1) |
|
|
240 | (1) |
|
Current Business Processes |
|
|
240 | (7) |
|
|
247 | (18) |
|
|
250 | (2) |
|
|
252 | (6) |
|
|
258 | (1) |
|
|
259 | (6) |
|
Chapter 14 Database Design Case Study #2: East Coast Aquarium |
|
|
265 | (36) |
|
|
265 | (6) |
|
|
266 | (4) |
|
The Volunteer Organization |
|
|
270 | (1) |
|
|
271 | (13) |
|
Creating the Application Prototype |
|
|
271 | (8) |
|
|
279 | (3) |
|
|
282 | (1) |
|
|
282 | (2) |
|
The Animal Tracking Database |
|
|
284 | (17) |
|
Highlights of the Application Prototype |
|
|
285 | (4) |
|
|
289 | (4) |
|
|
293 | (1) |
|
|
294 | (7) |
|
Chapter 15 Database Design Case Study #3: SmartMart |
|
|
301 | (22) |
|
The Merchandising Environment |
|
|
301 | (2) |
|
|
302 | (1) |
|
In-Store Sales Requirements |
|
|
302 | (1) |
|
|
302 | (1) |
|
|
303 | (1) |
|
|
303 | (7) |
|
Stores, Products, and Employees |
|
|
303 | (3) |
|
|
306 | (2) |
|
|
308 | (2) |
|
|
310 | (2) |
|
|
312 | (11) |
Part IV Using Interactive SQL To Manipulate A Relational Database |
|
|
Chapter 16 Simple SQL Retrieval |
|
|
323 | (32) |
|
Revisiting the Sample Data |
|
|
324 | (1) |
|
|
325 | (8) |
|
|
325 | (5) |
|
Retrieving Specific Columns |
|
|
330 | (1) |
|
|
331 | (2) |
|
Ordering the Result Table |
|
|
333 | (3) |
|
|
336 | (14) |
|
|
336 | (9) |
|
Performing Row Selection Queries |
|
|
345 | (5) |
|
Nulls and Retrieval: Three-Valued Logic |
|
|
350 | (5) |
|
Chapter 17 Retrieving Data from More Than One Table |
|
|
355 | (20) |
|
SQL Syntax for Inner Joins |
|
|
355 | (7) |
|
|
355 | (2) |
|
|
357 | (1) |
|
Joining Using Concatenated Keys |
|
|
358 | (2) |
|
Joining More Than Two Tables |
|
|
360 | (2) |
|
Finding Multiple Rows in One Table: Joining a Table to Itself |
|
|
362 | (5) |
|
|
364 | (2) |
|
Performing the Same-Table Join |
|
|
366 | (1) |
|
|
367 | (1) |
|
Table Constructors in Queries |
|
|
368 | (1) |
|
Avoiding Joins with Uncorrelated Subqueries |
|
|
369 | (6) |
|
|
370 | (1) |
|
|
371 | (1) |
|
|
371 | (1) |
|
Replacing a Same-Table Join with Subqueries |
|
|
372 | (3) |
|
Chapter 18 Advanced Retrieval Operations |
|
|
375 | (24) |
|
|
375 | (4) |
|
Performing Union Using the Same Source Tables |
|
|
376 | (1) |
|
Performing Union Using Different Source Tables |
|
|
377 | (1) |
|
Alternative SQL-92 Union Syntax |
|
|
378 | (1) |
|
|
379 | (4) |
|
Traditional SQL Negative Queries |
|
|
379 | (3) |
|
Negative Queries Using the EXCEPT Operator |
|
|
382 | (1) |
|
|
383 | (1) |
|
The EXCEPT and INTERSECT Operators |
|
|
384 | (2) |
|
|
386 | (3) |
|
|
387 | (1) |
|
|
387 | (2) |
|
|
389 | (3) |
|
|
389 | (1) |
|
|
389 | (2) |
|
|
391 | (1) |
|
|
391 | (1) |
|
Date and Time Manipulation |
|
|
392 | (4) |
|
Date and Time System Values |
|
|
392 | (1) |
|
Date and Time Interval Operations |
|
|
393 | (1) |
|
|
394 | (1) |
|
|
395 | (1) |
|
|
396 | (3) |
|
Chapter 19 Working With Groups of Rows |
|
|
399 | (30) |
|
|
399 | (5) |
|
|
399 | (3) |
|
|
402 | (1) |
|
|
403 | (1) |
|
|
403 | (1) |
|
Set Functions in Predicates |
|
|
404 | (1) |
|
Changing Data Types: CAST |
|
|
404 | (2) |
|
|
406 | (7) |
|
|
406 | (6) |
|
|
412 | (1) |
|
Windowing and Window Functions |
|
|
413 | (16) |
|
Ordering the Partitioning |
|
|
416 | (3) |
|
|
419 | (10) |
|
Chapter 20 Data Modification |
|
|
429 | (8) |
|
|
429 | (3) |
|
|
429 | (2) |
|
|
431 | (1) |
|
|
432 | (1) |
|
|
433 | (2) |
|
Deletes and Referential Integrity |
|
|
434 | (1) |
|
Inserting, Updating, or Deleting on a Condition: MERGE |
|
|
435 | (2) |
|
Chapter 21 Creating Additional Structural Elements |
|
|
437 | (12) |
|
|
437 | (2) |
|
Deciding Which Views to Create |
|
|
437 | (1) |
|
|
438 | (1) |
|
|
438 | (1) |
|
|
439 | (3) |
|
Creating Temporary Tables |
|
|
440 | (1) |
|
Loading Temporary Tables with Data |
|
|
441 | (1) |
|
Disposition of Temporary Table Rows |
|
|
441 | (1) |
|
Common Table Expressions (CTEs) |
|
|
442 | (3) |
|
|
445 | (4) |
Part V Database Implementation Issues |
|
|
Chapter 22 Concurrency Control |
|
|
449 | (22) |
|
The Multiuser Environment |
|
|
449 | (5) |
|
|
450 | (1) |
|
The ACID Transaction Goal |
|
|
450 | (1) |
|
|
451 | (2) |
|
|
453 | (1) |
|
Problems with Concurrent Use |
|
|
454 | (7) |
|
|
454 | (1) |
|
|
455 | (2) |
|
|
457 | (1) |
|
|
458 | (1) |
|
|
459 | (1) |
|
|
460 | (1) |
|
Solution #1: Classic Locking |
|
|
461 | (5) |
|
|
461 | (3) |
|
|
464 | (1) |
|
|
465 | (1) |
|
Locks and Transaction Length |
|
|
466 | (1) |
|
Solution #2: Optimistic Concurrency Control (Optimistic Locking) |
|
|
466 | (1) |
|
Solution #3: Multiversion Concurrency Control (Timestamping) |
|
|
467 | (1) |
|
Transaction Isolation Levels |
|
|
467 | (1) |
|
Web Database Concurrency Control Issues |
|
|
468 | (1) |
|
Distributed Database Issues |
|
|
469 | (1) |
|
|
470 | (1) |
|
Chapter 23 Database Security |
|
|
471 | (26) |
|
Sources of External Security Threats |
|
|
472 | (3) |
|
|
472 | (1) |
|
|
472 | (2) |
|
|
474 | (1) |
|
Sources of Internal Threats |
|
|
475 | (1) |
|
|
475 | (1) |
|
|
476 | (8) |
|
Securing the Perimeter: Firewalls |
|
|
476 | (2) |
|
|
478 | (1) |
|
|
479 | (1) |
|
|
479 | (1) |
|
|
480 | (1) |
|
|
481 | (1) |
|
Combating Social Engineering |
|
|
482 | (2) |
|
Handling Other Employee Threats |
|
|
484 | (1) |
|
|
484 | (6) |
|
Internal Database User IDs and Passwords |
|
|
485 | (1) |
|
|
485 | (2) |
|
Granting and Revoking Access Rights |
|
|
487 | (2) |
|
|
489 | (1) |
|
|
490 | (4) |
|
|
490 | (2) |
|
|
492 | (2) |
|
The Bottom Line: How Much Security Do You Need? |
|
|
494 | (1) |
|
|
494 | (3) |
|
Chapter 24 Data Warehousing |
|
|
497 | (12) |
|
Scope and Purpose of a Data Warehouse |
|
|
498 | (2) |
|
Obtaining and Preparing the Data |
|
|
500 | (2) |
|
Data Modeling for the Data Warehouse |
|
|
502 | (3) |
|
Dimensional Modeling Basics |
|
|
502 | (2) |
|
|
504 | (1) |
|
Data Warehouse Appliances |
|
|
505 | (2) |
|
|
507 | (2) |
|
|
509 | (14) |
|
|
509 | (1) |
|
Recognizing and Handling Incomplete Data |
|
|
510 | (2) |
|
|
510 | (1) |
|
|
511 | (1) |
|
|
512 | (1) |
|
Recognizing and Handling Incorrect Data |
|
|
512 | (3) |
|
|
512 | (1) |
|
|
513 | (1) |
|
Wrong Data Entered into the Database |
|
|
514 | (1) |
|
Violation of Business Rules |
|
|
514 | (1) |
|
Recognizing and Handling Incomprehensible Data |
|
|
515 | (1) |
|
Multiple Values in a Column |
|
|
515 | (1) |
|
|
515 | (1) |
|
Recognizing and Handling Inconsistent Data |
|
|
516 | (3) |
|
Inconsistent Names and Addresses |
|
|
516 | (1) |
|
Inconsistent Business Rules |
|
|
516 | (1) |
|
|
517 | (1) |
|
Unenforced Referential Integrity |
|
|
517 | (1) |
|
Inconsistent Data Formatting |
|
|
518 | (1) |
|
Preventing Inconsistent Data on an Organizational Level |
|
|
518 | (1) |
|
|
518 | (1) |
|
Employees and Data Quality |
|
|
519 | (1) |
|
|
520 | (3) |
Part VI Beyond The Relational Data Model |
|
|
|
523 | (20) |
|
|
524 | (6) |
|
|
524 | (2) |
|
|
526 | (2) |
|
|
528 | (2) |
|
|
530 | (10) |
|
|
530 | (10) |
|
|
540 | (1) |
|
|
541 | (1) |
|
|
541 | (2) |
|
Chapter 27 Object-Relational Databases |
|
|
543 | (42) |
|
Getting Started: Object-Orientation without Computing |
|
|
544 | (4) |
|
|
548 | (11) |
|
|
548 | (1) |
|
|
549 | (4) |
|
|
553 | (6) |
|
Benefits of Object-Orientation |
|
|
559 | (5) |
|
Where Objects Work Better Than Relations |
|
|
560 | (4) |
|
Limitations of Pure Object-Oriented DBMSs |
|
|
564 | (1) |
|
The Object-Relational Data Model |
|
|
565 | (5) |
|
ER Diagrams for Object-Relational Designs |
|
|
565 | (5) |
|
Features of the OR Data Model |
|
|
570 | (1) |
|
SQL Support for the OR Data Model |
|
|
570 | (1) |
|
An Additional Sample Database |
|
|
571 | (1) |
|
SQL Data Types for Object-Relational Support |
|
|
572 | (5) |
|
|
572 | (1) |
|
|
573 | (3) |
|
|
576 | (1) |
|
User-Defined Data Types and Typed Tables |
|
|
577 | (5) |
|
|
578 | (1) |
|
|
578 | (1) |
|
Creating Typed Tables Using UDTs |
|
|
579 | (1) |
|
|
580 | (1) |
|
|
580 | (2) |
|
|
582 | (2) |
|
|
583 | (1) |
|
|
583 | (1) |
|
|
584 | (1) |
|
Chapter 28 Relational Databases and "Big Data": The Alternative of a NoSQL Solution |
|
|
585 | (14) |
|
|
586 | (3) |
|
|
586 | (1) |
|
|
587 | (1) |
|
|
587 | (1) |
|
|
588 | (1) |
|
Other Differences Between NoSQL Databases and Relational Databases |
|
|
589 | (6) |
|
Hardware Architecture Differences |
|
|
589 | (3) |
|
Data Access and Manipulation Techniques |
|
|
592 | (2) |
|
Transaction Control: BASE Transactions |
|
|
594 | (1) |
|
Benefits of NoSQL Databases |
|
|
595 | (1) |
|
Problems with NoSQL Databases |
|
|
595 | (1) |
|
Open Source NoSQL Products |
|
|
596 | (1) |
|
|
596 | (3) |
Part VII Appendices |
|
|
Appendix A Historical Antecedents |
|
|
599 | (18) |
|
|
599 | (5) |
|
|
599 | (2) |
|
|
601 | (1) |
|
Limitations of File Processing |
|
|
602 | (1) |
|
File Processing on the Desktop |
|
|
603 | (1) |
|
The Hierarchical Data Model |
|
|
604 | (4) |
|
Characteristics of the Hierarchical Data Model |
|
|
604 | (3) |
|
|
607 | (1) |
|
The Simple Network Data Model |
|
|
608 | (4) |
|
Characteristics of a Simple Network |
|
|
608 | (2) |
|
|
610 | (2) |
|
The Complex Network Data Model |
|
|
612 | (5) |
|
Appendix B SQL Programming |
|
|
617 | (44) |
|
SQL Language Programming Elements |
|
|
617 | (10) |
|
|
619 | (2) |
|
|
621 | (2) |
|
|
623 | (2) |
|
Example #1: Interactive Retrievals |
|
|
625 | (1) |
|
Example #2: Nested Modules |
|
|
625 | (1) |
|
Executing Modules as Triggers |
|
|
626 | (1) |
|
Executing Modules as Stored Procedures |
|
|
627 | (1) |
|
|
627 | (16) |
|
The Embedded SQL Environment |
|
|
627 | (2) |
|
Using Host Language Variables |
|
|
629 | (1) |
|
|
630 | (1) |
|
|
631 | (1) |
|
|
632 | (1) |
|
Retrieving Multiple Rows: Cursors |
|
|
633 | (6) |
|
Embedded SQL Data Modification |
|
|
639 | (4) |
|
|
643 | (10) |
|
|
644 | (1) |
|
Dynamic SQL with Dynamic Parameters |
|
|
645 | (1) |
|
Dynamic Parameters with Cursors |
|
|
646 | (6) |
|
Dynamic Parameters without a Cursor |
|
|
652 | (1) |
|
|
653 | (8) |
|
Appendix C SQL Syntax Summary |
|
|
661 | (8) |
Glossary |
|
669 | (14) |
Subject Index |
|
683 | |