PART Ⅰ PRELIMINARIES 1
Chapter 1 Background and Overview 3
The Third Manifesto 4
Back to the relational future 8
Some guiding principles 10
Some crucial logical differences 11
Concluding remarks 13
Exercises 14
Chapter 2 A Survey of the Relational Model 17
The running example 17
Tuples 19
Relations 21
Relation variables 24
Relvars, relations, and predicates 28
Integrity constraints 32
Relational operators 34
Virtual relvars 46
The relational model 47
Exercises 48
Chapter 3 Toward a Theory of Types 55
Values are typed 57
Types vs. representations 60
Scalar vs. nonscalar types 60
Possible representations 61
Selectors and THE_ operators 62
System-defined types 68
Operators 69
Type generators 73
Concluding remarks 75
Exercises 75
PART Ⅱ FORMAL SPECIFICATIONS 79
Chapter 4 The Third Manifesto 81
RM Prescriptions 81
RM Proscriptions 88
OO Prescriptions 88
OO Proscriptions 89
RM Very Strong Suggestions 89
OO Very Strong Suggestions 90
Recent Manifesto changes 90
Chapter 5 Tutorial D 93
Common constructs 96
Scalar definitions 98
Tuple definitions 100
Relational definitions 101
Scalar operations 102
Tuple operations 105
Relational operations 110
Relations and arrays 117
Statements 118
Recent language changes 120
A remark on syntax 122
Exercises 123
PART Ⅲ INFORMAL DISCUSSIONS AND EXPLANATIONS 127
Chapter 6 RM Prescriptions 129
RM Prescription1: Scalar types 129
RM Prescription 2: Scalar values are typed 132
RM Prescription 3: Read-only vs. update operators 133
RM Prescription 4: Physical vs. possible representations 139
RM Prescription 5: Expose possible representations 144
RM Prescription 6: Type generator TUPLE 147
RM Prescription 7: Type generator RELATION 152
RM Prescription 8: Equality 155
RM Prescription 9: Tuples 157
RM Prescription 10: Relations 158
RM Prescription 11: Scalar variables 159
RM Prescription 12: Tuple variables 160
RM Prescription 13: Relation variables (relvars) 161
RM Prescription 14: Kinds of relvars 162
RM Prescription 15: Candidate keys 165
RM Prescription 16: Databases 166
RM Prescription 17: Transactions 167
RM Prescription 18: Relational algebra 167
RM Prescription 19: Relvar names, relation selectors, and recursion 172
RM Prescription 20: User-defined tuple and relational operators 176
RM Prescription 21: Assignments 177
RM Prescription 22: Comparisons 180
RM Prescription 23: Integrity constraints 181
RM Prescription 24: Total database constraints 186
RM Prescription 25: Catalog 187
RM Prescription 26: Language design 187
Exercises 188
Chapter 7 RM Proscriptions 191
RM Proscription 1: No attribute ordering 191
RM Proscription 2: No tuple ordering 193
RM Proscription 3: No duplicate tuples 193
RM Proscription 4: No nulls 193
RM Proscription 5: No nullological mistakes 194
RM Proscription 6: No internal-level constructs 194
RM Proscription 7: No tuple-level operations 195
RM Proscription 8: No composite attributes 196
RM Proscription 9: No domain check override 196
RM Proscription 10: Not SQL 196
Exercises 197
Chapter 8 OO Prescriptions 199
OO Prescription 1: Compile-time type checking 199
OO Prescription 2: Type inheritance (conditional) 199
OO Prescription 3: Computational completeness 200
OO Prescription 4: Explicit transaction boundaries 201
OO Prescription 5: Nested transactions 202
OO Prescription 6: Aggregate operators and empty sets 203
Exercises 204
Chapter 9 OO Proscriptions 205
OO Proscription1: Relvars are not domains 205
OO Proscription 2: No object IDs 209
Exercises 212
Chapter 10 RM Very Strong Suggestions 215
RM Very Strong Suggestion 1: System keys 215
RM Very Strong Suggestion 2: Foreign keys 218
RM Very Strong Suggestion 3: Candidate key inference 219
RM Very Strong Suggestion 4: Transition constraints 220
RM Very Strong Suggestion 5: Quota queries 221
RM Very Strong Suggestion 6: Generalized transitive closure 223
RM Very Strong Suggestion 7: User-defined generic operators 226
RM Very Strong Suggestion 8: SQL migration 227
Exercises 238
Chapter 11 OO Very Strong Suggestions 241
OO Very Strong Suggestion 1: Type inheritance 241
OO Very Strong Suggestion 2: Types and operators unbundled 241
OO Very Strong Suggestion 3: Single-level store 242
Exercises 243
PART Ⅳ SUBTYPEING AND INHERITANCE 245
Chapter 12 Preliminaries 247
Toward a type inheritance model 248
Single vs. multiple inheritance 249
Scalars, tuples, and relations 249
The running example 250
Concluding remarks 258
Exercises 259
Chapter 13 The Inheritance Model 261
IM Prescriptions 261
Recent inheritance model changes 267
Chapter 14 Single Inheritance with Scalar Types 269
IM Prescription 1: Types are sets 269
IM Prescription 2: Subtypes are subsets 269
IM Prescription 3: "Subtype of" is reflexive 271
IM Prescription 4: Proper subtypes 272
IM Prescription 5: "Subtype of" is transitive 272
IM Prescription 6: Immediate subtypes 272
IM Prescription 7: Root types disjoint 273
IM Prescription 8: Scalar values with inheritance 273
IM Prescription 9: Scalar variables with inheritance 274
IM Prescription 10: Specialization by constraint 279
IM Prescription 11: Assignment with inheritance 282
IM Prescription 12: Equality etc. with inheritance 285
IM Prescription 13: Join etc. with inheritance 286
IM Prescription 14: TREAT 288
IM Prescription 15: Type testing 292
IM Prescription 16: Read-only operator inheritance and value substitutability 295
IM Prescription 17: Operator signatures 298
IM Prescription 18: Read-only parameters to update operators 305
IM Prescription 19: Update operator inheritance and variable substitutability 305
IM Prescription 20: Union, dummy, and maximal and minimal types 309
Exercises 315
Chapter 15 Multiple Inheritance with Scalar Types 317
An introductory example 317
Type graphs 323
Least specific types unique 325
Most specific types unique 326
Remarks on operator inheritance 333
Exercises 334
Chapter 16 Inheritance with Tuple and Relation Types 337
IM Prescription 21: Tuple/relation subtypes and supertypes 337
IM Prescription 22: Tuple/relation values with inheritance 341
IM Prescription 23: Maximal and minimal tuple/relation types 343
IM Prescription 24: Tuple/relation most specific types 346
IM Prescription 25: Tuple/relation variables with inheritance 351
Some implications of IM Prescriptions 21-25 353
Exercises 357
APPENDIXES 359
Appendix A A New Relational Algebra 361
Motivation and justification 361
REMOVE, RENAME, and COMPOSE 364
Treating operators as relations 366
Formal definitions 369
How Tutorial D builds on A 371
Appendix B A Design Dilemma? 377
Encapsulation 377
Discussion 378
Further considerations 379
Appendix C Types and Units 381
Type definition 381
Selectors 382
THE operators 383
Computational operators 384
Display operators 385
Type constraints 386
A more complex example 386
Appendix D What Is a Database? 389
Updating the database 389
Databases vs. tuples 390
Appendix E View Updating 393
Date's appoach 393
Assumptions and notation 394
A closer look at relational assignment 395
A model of updating 398
A closer look at constraints 399
Updating restrictions 403
Updating intersections 405
Updating unions 408
Updating differences 410
Nested updates 412
Updating extensions 417
Updating joins 418
Updating projections 424
Some remarks on orthogonality 428
A remark on multiple assignment 430
Summary 431
Darwen's approach 432
Appendix F A Closer Look at Specialization by Constraint 443
The 3 out of 4 "rule" 443
What does inheritance really mean? 448
Benefits of S by C 449
What about objects? 452
Implementation considerations 455
Appendix G A Closer Look at Structural Inheritance 461
An introductory example 461
Tuple types, values, and variables 463
Subtables and supertables 467
Scalar types revisited 471
Structural inheritance with fewer tears 472
Appendix H A Comparison with SQL 479
RM Prescriptions 480
RM Proscriptions 490
OO Prescriptions 491
OO Proscriptions 492
RM Very Strong Suggestions 493
OO Very Strong Suggestions 493
IM Prescriptions 494
Appendix I A Grammar for Tutorial D 499
Appendix J References and Bibliography 513
Index 545