
Database
Principles, Programming, and Performance, Second Edition
By:Â Patrick O'Neil, Elizabeth O'Neil
Hardcover | 12 May 2000 | Edition Number 2
Sorry, we are not able to source the book you are looking for right now.
We did a search for other books with a similar title, however there were no matches. You can try selecting from a similar category, click on the author's name, or use the search box above to find your book.
* Focuses extensively on the object-relational model that is rapidly gaining acceptance and revolutionizing the database industry. Collection types and UDF's are thoroughly covered.
* Introduces new relational features of SQL taken from the latest versions of today's most popular database products, Oracle, DB2, and Informix.
* Offers thorough coverage of the SQL-99 standard, including additions designed to help you take full advantage of the object-relational model.
* Provides expanded programming examples intended to improve your understanding of transaction processing and error handling.
* Explains clearly the principles of logical database design, including those relating to the E-R model and normalization, with a number of new illustrations and examples.
* Presents the latest indexing and query processing techniques, such as bitmap indexing, and shows how to use them to achieve significant performance improvements.
Industry Reviews
| Foreword | p. v |
| Preface | p. xvii |
| Introduction | p. 1 |
| Fundamental Database Concepts | p. 1 |
| History of Database Systems | p. 2 |
| The Relational and Object-Relational Models | p. 2 |
| The Database Systems Covered | p. 3 |
| A Relational Database Example | p. 3 |
| An Object-Relational Database Example | p. 5 |
| Database Users | p. 6 |
| Overview of Relational and Object-Relational DBMS | p. 8 |
| The Relational Model | p. 8 |
| Basic SQL Query Language | p. 9 |
| The Object-Relational Model | p. 11 |
| Programs to Access a Database | p. 12 |
| Database Design | p. 14 |
| Integrity, Views, Security, and Catalogs | p. 16 |
| Indexing | p. 19 |
| Query Processing | p. 20 |
| Update Transactions | p. 21 |
| Parallel and Distributed Databases | p. 22 |
| Putting It All Together | p. 23 |
| The Relational Model | p. 25 |
| The CAP Database | p. 26 |
| Naming the Parts of a Database | p. 29 |
| Domains and Datatypes | p. 30 |
| Tables and Relations | p. 30 |
| Relational Rules | p. 32 |
| Keys, Superkeys, and Null Values | p. 36 |
| Null Values | p. 40 |
| Relational Algebra | p. 41 |
| Fundamental Operations of Relational Algebra | p. 41 |
| Set-Theoretic Operations | p. 42 |
| The Union, Intersection, and Difference Operations | p. 42 |
| Assignment and Alias | p. 44 |
| The Product Operation | p. 46 |
| Native Relational Operations | p. 47 |
| The Projection Operation | p. 48 |
| The Selection Operation | p. 49 |
| Precedence of Relational Operations | p. 52 |
| The Join Operation | p. 53 |
| The Division Operation | p. 57 |
| The Interdependence of Operations | p. 61 |
| Illustrative Examples | p. 63 |
| Other Relational Operations | p. 67 |
| Outer Join | p. 68 |
| Theta Join | p. 71 |
| Basic SQL Query Language | p. 79 |
| Introduction | p. 79 |
| SQL Capabilities | p. 80 |
| SQL History--Standards and Dialects | p. 81 |
| Setting Up the Database | p. 84 |
| Standard Typographical Conventions | p. 85 |
| A Practical Exercise | p. 86 |
| Simple Select Statements | p. 87 |
| Subqueries | p. 96 |
| The IN Predicate | p. 96 |
| The Quantified Comparison Predicate | p. 101 |
| The EXISTS Predicate | p. 102 |
| A Weakness of SQL: Too Many Equivalent Forms | p. 106 |
| UNION Operators and FOR ALL Conditions | p. 107 |
| The UNION Operator | p. 107 |
| Division: SQL "FOR ALL ..." Conditions | p. 108 |
| Some Advanced SQL Syntax | p. 114 |
| The INTERSECT and EXCEPT Operators in Advanced SQL | p. 114 |
| Join Forms in Advanced SQL | p. 117 |
| OUTER JOIN | p. 120 |
| Join Forms Implemented in Database Systems | p. 122 |
| Set Functions in SQL | p. 123 |
| Handling Null Values | p. 127 |
| Groups of Rows in SQL | p. 129 |
| A Complete Description of SQL Select | p. 134 |
| Identifiers | p. 136 |
| Expressions, Predicates, and the search_condition | p. 137 |
| Scalar Subqueries as Expressions: Advanced SQL | p. 141 |
| Basic SQL versus Advanced SQL: Summary | p. 142 |
| A Discussion of the Predicates | p. 142 |
| Insert, Update, and Delete Statements | p. 148 |
| The Insert Statement | p. 148 |
| The Update Statement | p. 149 |
| The Delete Statement | p. 150 |
| The Power of the Select Statement | p. 151 |
| The Non-Procedural Select Statement | p. 152 |
| Turing Power | p. 154 |
| Limited Power of the Basic SQL Select Statement | p. 155 |
| Object-Relational SQL | p. 173 |
| Introduction | p. 173 |
| ORSQL Capabilities | p. 174 |
| Form of Presentation for This Chapter | p. 175 |
| Object-Relational History | p. 176 |
| Objects and Tables | p. 177 |
| Object Types in ORACLE | p. 177 |
| Definition of the REF Object Reference | p. 185 |
| INFORMIX Row Types for Objects | p. 191 |
| Absence of REFs in INFORMIX | p. 196 |
| Type Inheritance in INFORMIX | p. 196 |
| Objects and Tables: Summary | p. 197 |
| Object Orientation | p. 198 |
| Collection Types | p. 199 |
| Collection Types in ORACLE | p. 200 |
| Table Types and Nested Tables | p. 200 |
| Two Techniques for Retrieving from a Table of Tables | p. 205 |
| Unnesting via Table Products | p. 206 |
| Nested Cursors | p. 206 |
| Array Types for VARRAYs | p. 210 |
| SQL Syntax for Collections in ORACLE | p. 212 |
| Inserts and Updates in ORACLE | p. 213 |
| Collection Types in INFORMIX | p. 215 |
| Sets in INFORMIX | p. 215 |
| Lists in INFORMIX | p. 218 |
| SQL Syntax for Collections in INFORMIX | p. 220 |
| Inserts and Updates in INFORMIX | p. 221 |
| Collection Types: Summary | p. 222 |
| Procedural SQL, User-Defined Functions (UDFs), and Methods | p. 223 |
| ORACLE PL/SQL Procedures, UDFs, and Methods | p. 224 |
| PL/SQL: ORACLE's Procedural SQL Language | p. 224 |
| Using PL/SQL to Implement Methods in ORACLE | p. 229 |
| Update Methods | p. 237 |
| INFORMIX User-Defined Functions | p. 239 |
| SPL: INFORMIX's Procedural SQL Language | p. 239 |
| Using SPL to Implement UDFs in INFORMIX | p. 244 |
| Update Functions | p. 247 |
| User-Defined Functions: Summary | p. 248 |
| External Functions and Packaged User-Defined Types (UDTs) | p. 249 |
| Binary Data and BLOBs | p. 250 |
| External Functions | p. 251 |
| Encapsulation | p. 251 |
| Distinct Types | p. 251 |
| BLOB Objects | p. 251 |
| Packaged UDTs and Other Encapsulated UDTs | p. 252 |
| Summary | p. 253 |
| Programs to Access a Database | p. 259 |
| Introduction to Embedded SQL in C | p. 262 |
| A Simple Program Using Embedded SQL | p. 262 |
| Selecting Multiple Rows with a Cursor | p. 270 |
| Condition Handling | p. 272 |
| Whenever Statement: Scope and Flow of Control | p. 274 |
| Explicit Error Checking | p. 276 |
| Handling Errors: Getting Error Messages from the Database | p. 277 |
| Indicator Variables | p. 278 |
| Some Common Embedded SQL Statements | p. 281 |
| The Select Statement | p. 281 |
| The Declare Cursor Statement | p. 282 |
| The Delete Statement | p. 283 |
| The Update Statement | p. 285 |
| The Insert Statement | p. 286 |
| Cursor Open, Fetch, and Close | p. 286 |
| Other Embedded SQL Operations | p. 287 |
| Programming for Transactions | p. 287 |
| The Concept of a Transaction | p. 288 |
| How Transactions Are Specified in Programs | p. 290 |
| A Transaction Example | p. 292 |
| The Transaction Isolation Guarantee and Locking | p. 294 |
| Special Considerations in Transactions | p. 296 |
| The Power of Procedural SQL Programs | p. 303 |
| Customized Set Functions | p. 303 |
| Dynamic SQL | p. 305 |
| Execute Immediate | p. 305 |
| Prepare, Execute, and Using | p. 309 |
| Dynamic Select: The Describe Statement and the SQLDA | p. 310 |
| Some Advanced Programming Concepts | p. 317 |
| Scrollable Cursors | p. 317 |
| Cursor Sensitivity | p. 319 |
| Other Development Environments for Database Programming | p. 320 |
| Database Design | p. 329 |
| Introduction to E-R Concepts | p. 331 |
| Entities, Attributes, and Simple E-R Diagrams | p. 331 |
| Transforming Entities and Attributes to Relations | p. 334 |
| Relationships among Entities | p. 335 |
| Further Details of E-R Modeling | p. 339 |
| Cardinality of Entity Participation in a Relationship | p. 339 |
| One-to-One, Many-to-Many, and Many-to-One Relationships | p. 342 |
| Transforming Binary Relationships to Relations | p. 343 |
| Additional E-R Concepts | p. 346 |
| Cardinality of Attributes | p. 346 |
| Weak Entities | p. 347 |
| Generalization Hierarchies | p. 348 |
| Case Study | p. 349 |
| Normalization: Preliminaries | p. 353 |
| A Running Example: Employee Information | p. 354 |
| Anomalies of a Bad Database Design | p. 356 |
| Functional Dependencies | p. 358 |
| Logical Implications among Functional Dependencies | p. 361 |
| Armstrong's Axioms | p. 362 |
| Closure, Cover, and Minimal Cover | p. 366 |
| Lossless Decompositions | p. 374 |
| Normal Forms | p. 380 |
| A Succession of Decompositions to Eliminate Anomalies | p. 381 |
| Normal Forms: BCNF, 3NF, and 2NF | p. 387 |
| An Algorithm to Achieve Well-Behaved 3NF Decomposition | p. 393 |
| A Review of Normalization | p. 394 |
| Additional Design Considerations | p. 396 |
| Database Design Tools | p. 397 |
| Integrity, Views, Security, and Catalogs | p. 409 |
| Integrity Constraints | p. 410 |
| Integrity Constraints in the Create Table Statement | p. 411 |
| Primary Keys, Foreign Keys, and Referential Integrity | p. 417 |
| Foreign Key Constraints: Product Variations | p. 421 |
| The Alter Table Statement | p. 422 |
| Non-Procedural and Procedural Integrity Constraints: Triggers | p. 424 |
| Creating Views | p. 433 |
| Updatable and Read-Only Views | p. 438 |
| The Value of Views | p. 440 |
| Security: The Grant Statement in SQL | p. 442 |
| Variations in Database Products | p. 445 |
| System Catalogs and Schemas | p. 445 |
| Schemas | p. 447 |
| Catalog Variations in Database Products | p. 447 |
| The INFORMIX System Catalog | p. 451 |
| Catalog Tables for Object-Relational Constructs: ORACLE and INFORMIX | p. 452 |
| Indexing | p. 465 |
| The Concept of Indexing | p. 465 |
| Disk Storage | p. 470 |
| Disk Access Is Excruciatingly Slow | p. 470 |
| The DBA and Disk Resource Allocation in ORACLE | p. 474 |
| Data Storage Pages and Row Pointers: ORACLE and DB2 UDB | p. 479 |
| The B-Tree Index | p. 484 |
| Dynamic Changes in the B-Tree | p. 490 |
| Properties of the B-Tree | p. 493 |
| Index Node Layout and Free Space | p. 494 |
| The Create Index Statement in ORACLE and DB2 UDB | p. 496 |
| Duplicate Key Values in an Index | p. 497 |
| The ORACLE Bitmap Index | p. 500 |
| Clustered and Non-Clustered Indexes | p. 502 |
| Clustering Indexes in DB2 UDB | p. 506 |
| ORACLE Special Indexing Features | p. 507 |
| A Hash Primary Index | p. 511 |
| Tuning HASHKEYS and SIZE in a Hash Cluster | p. 514 |
| No Incremental Changes in the Number of Slots Used | p. 517 |
| Advantages and Disadvantages of a Hash Primary Index | p. 518 |
| Throwing Darts at Random Slots | p. 520 |
| Unlimited Slot Occupancy: How Many Slots Are Occupied? | p. 520 |
| Slot Occupancy of One: Number of Retries (Rehash Chain) | p. 522 |
| When Do Hash Pages Fill Up | p. 525 |
| Query Processing | p. 533 |
| Introductory Concepts | p. 535 |
| Query Resource Utilization | p. 535 |
| Gathering Statistics | p. 537 |
| Retrieving the Query Plan | p. 538 |
| Tablespace Scans and I/O | p. 540 |
| Assumptions about I/O | p. 541 |
| Simple Indexed Access in DB2 | p. 546 |
| Equal Unique Match Index Access | p. 549 |
| Index-Only Retrieval | p. 554 |
| Filter Factors and Statistics | p. 556 |
| DB2 Statistics | p. 557 |
| Filter Factors in DB2 | p. 559 |
| Matching Index Scans, Composite Indexes | p. 560 |
| Definition of a Matching Index Scan | p. 563 |
| Predicate Screening and Screening Predicates | p. 564 |
| Indexable Predicates and Performance | p. 568 |
| Multiple Index Access | p. 570 |
| List Prefetch and the RID Pool | p. 574 |
| Point of Diminishing Returns in Multiple Index Access | p. 578 |
| Methods for Joining Tables | p. 579 |
| Nested-Loop Join | p. 580 |
| Merge Join | p. 583 |
| Hybrid Join | p. 587 |
| Multiple Table Joins | p. 588 |
| Transforming Nested Queries to Joins | p. 589 |
| Disk Sorts | p. 591 |
| The N-Way Merge Disk Sort Algorithm | p. 592 |
| Query Performance Benchmarks: A Case Study | p. 597 |
| The BENCH Table | p. 599 |
| Load Measurements | p. 601 |
| Query Performance Measurements | p. 602 |
| Query Q1 | p. 603 |
| Query Q2A | p. 604 |
| Query Q2B | p. 607 |
| Query Q3A | p. 608 |
| Query Q3B | p. 609 |
| Queries Q4A and Q4B | p. 610 |
| Query Q5 | p. 613 |
| Query Q6A | p. 615 |
| Query Q6B | p. 616 |
| Cost-Performance Assessment | p. 617 |
| Elapsed Time versus CPU Time Rating | p. 618 |
| Customizing the Rating | p. 619 |
| Variations in Indexing Use between DB2 and ORACLE | p. 620 |
| Update Transactions | p. 633 |
| Transactional Histories | p. 638 |
| Fundamental Atomic Read and Write Actions in the Database | p. 638 |
| Predicate Read Actions | p. 639 |
| Transactional Histories with Reads and Writes | p. 639 |
| Interleaved Read-Write Operations | p. 643 |
| Serializability and the Precedence Graph | p. 648 |
| The Precedence Graph | p. 653 |
| Locking to Ensure Serializability | p. 655 |
| The Waits-For Graph | p. 658 |
| Levels of Isolation | p. 660 |
| The Read Uncommitted Isolation Level | p. 662 |
| The Read Committed Isolation Level and Cursor Stability | p. 663 |
| Repeatable Read Isolation Level | p. 666 |
| Serializability and Phantom Updates | p. 666 |
| Transactional Recovery | p. 669 |
| Recovery in Detail: Log Formats | p. 671 |
| Guarantees That Needed Log Entries Are on Disk | p. 675 |
| Checkpoints | p. 677 |
| The Commit-Consistent Checkpoint | p. 678 |
| Motivation for Other Kinds of Checkpoints | p. 679 |
| The Cache-Consistent Checkpoint | p. 680 |
| The Fuzzy Checkpoint | p. 682 |
| Media Recovery | p. 683 |
| Stable Storage | p. 684 |
| Performance: The TPC-A Benchmark | p. 684 |
| The TPC-A Benchmark Specification | p. 685 |
| Lessons from the TPC-A Benchmark | p. 689 |
| Parallel and Distributed Databases | p. 699 |
| Some Multi-CPU Architectures | p. 700 |
| Client-Server Architectures | p. 703 |
| The Curve of CPU Cost versus Power | p. 704 |
| Shared-Nothing Database Architecture | p. 706 |
| Two-Phase Commit | p. 707 |
| Further Problems with Shared-Nothing Architecture | p. 713 |
| Query Parallelism | p. 715 |
| Intra-Query Parallelism | p. 715 |
| Introductory Tutorial | p. 721 |
| Setting Up the CAP Database in ORACLE | p. 721 |
| Creating the CAP Database | p. 721 |
| Using the SQL*Loader | p. 722 |
| Using SQL*Plus | p. 725 |
| Setting Up the CAP Database in INFORMIX | p. 728 |
| Creating the CAP Database (in UNIX) | p. 728 |
| Using DB-Access (UNIX Systems) | p. 732 |
| Datatypes | p. 733 |
| Programming Details | p. 735 |
| The prompt() Function | p. 735 |
| Use of Numeric Constants in Code Examples | p. 736 |
| The print_dberror() Function | p. 737 |
| Building Embedded C Programs | p. 737 |
| Precompilation and Compilation Procedure Using ORACLE/UNIX | p. 737 |
| Precompilation and Compilation Procedure Using DB2 UDB/UNIX | p. 740 |
| SQL Statement Syntax | p. 743 |
| Alter Table Statement | p. 745 |
| Close Cursor Statement | p. 746 |
| Commit Work Statement | p. 746 |
| Connect Statement | p. 747 |
| Create Function Statement (UDF) | p. 748 |
| Create Index Statement | p. 749 |
| Create Row Type Statement (O-R) | p. 751 |
| Create Schema Statement | p. 751 |
| Create Table Statement | p. 752 |
| Create Tablespace Statement in ORACLE and DB2 UDB | p. 755 |
| Create Trigger Statement | p. 756 |
| Create Type Statement (O-R) | p. 757 |
| Create View Statement | p. 758 |
| Declare Cursor Statement | p. 759 |
| Delete Statement | p. 760 |
| Describe Statement | p. 761 |
| Disconnect Statement | p. 761 |
| Drop Function Statement | p. 762 |
| Drop Index Statement | p. 762 |
| Drop Trigger Statement | p. 763 |
| Drop (Row) Type Statement (O-R) | p. 763 |
| Drop {Schema Table View} Statement | p. 764 |
| Execute Statement | p. 764 |
| Execute Immediate Statement | p. 765 |
| Fetch Statement | p. 765 |
| Grant Statement | p. 766 |
| Insert Statement | p. 767 |
| Open Cursor Statement | p. 768 |
| Prepare Statement | p. 768 |
| Revoke Statement | p. 768 |
| Rollback Statement | p. 769 |
| Select Statement | p. 769 |
| Update Statement | p. 773 |
| Set Query Counts | p. 775 |
| Solutions to Selected Exercises | p. 779 |
| Index | p. 823 |
| Table of Contents provided by Syndetics. All Rights Reserved. |
ISBN: 9781558604384
ISBN-10: 1558604383
Series: The Morgan Kaufmann Series in Data Management Systems
Published: 12th May 2000
Format: Hardcover
Language: English
Number of Pages: 870
Audience: Professional and Scholarly
Publisher: Elsevier Science & Technology
Country of Publication: US
Edition Number: 2
Edition Type: Revised
Dimensions (cm): 23.5 x 18.7 x 5.08
Weight (kg): 1.7
Shipping
| Standard Shipping | Express Shipping | |
|---|---|---|
| Metro postcodes: | $9.99 | $14.95 |
| Regional postcodes: | $9.99 | $14.95 |
| Rural postcodes: | $9.99 | $14.95 |
Orders over $89.00 qualify for free shipping.
How to return your order
At Booktopia, we offer hassle-free returns in accordance with our returns policy. If you wish to return an item, please get in touch with Booktopia Customer Care.
Additional postage charges may be applicable.
Defective items
If there is a problem with any of the items received for your order then the Booktopia Customer Care team is ready to assist you.
For more info please visit our Help Centre.
You Can Find This Book In

Access Database Design & Programming
Creating Programmable Database Applications with Access 97, 2000, 2002 & 2003
Paperback
RRP $76.00
$60.80
OFF
This product is categorised by
- Non-FictionComputing & I.T.Databases
- Non-FictionComputing & I.T.DatabasesDatabase Software
- Non-FictionComputing & I.T.Computer Programming & Software DevelopmentDatabase Programming
- Non-FictionComputing & I.T.DatabasesData Capture & Analysis
- Non-FictionComputing & I.T.Computer HardwareMaintenance & Repairs























