| Preface | p. xiii |
| Introduction | p. 1 |
| Who are we? | p. 1 |
| What is a database? | p. 2 |
| Databases vs. Database Management Systems | p. 3 |
| Relational Database Management Systems | p. 3 |
| Why this book? | p. 4 |
| Who should read this book? | p. 5 |
| Organization of the book | p. 6 |
| Some ground rules | p. 7 |
| Downloading files from the website | p. 8 |
| Acknowledgements | p. 8 |
| We don't have problems... | p. 9 |
| Outroduction | p. 9 |
| A simple, single-table database | p. 11 |
| Introduction to Part 1 | p. 13 |
| Tables | p. 13 |
| Queries/Views | p. 14 |
| Forms | p. 14 |
| Reports | p. 15 |
| Tables | p. 17 |
| Rows & columns - records & fields | p. 18 |
| Building a table | p. 22 |
| Types of data | p. 23 |
| Meaningful operations | p. 24 |
| Excluding certain errors | p. 26 |
| Making storage more efficient | p. 26 |
| Making data recall more rapid | p. 28 |
| Field size | p. 28 |
| General notes on table design | p. 29 |
| Queries/Views | p. 36 |
| Queries usually find subsets of the data | p. 36 |
| Queries, answer tables and base tables finally defined properly and closure mentioned briefly | p. 37 |
| Summarizing data | p. 42 |
| Other useful queries | p. 42 |
| Graphical querying tools | p. 43 |
| SQL and Views | p. 44 |
| Forms | p. 45 |
| Multiple forms per table | p. 48 |
| Text boxes can be made read only | p. 49 |
| Text boxes don't have to present data from just one field | p. 49 |
| It isn't necessary for each field in a table to appear on the form | p. 51 |
| Controlling data entry | p. 51 |
| Use of forms can be controlled | p. 51 |
| Forms can be web pages | p. 51 |
| Summary | p. 52 |
| Reports | p. 54 |
| Summary of Part 1 | p. 56 |
| A multi-table database | p. 59 |
| Introduction to Part 2 | p. 61 |
| Serious problems with single tables | p. 62 |
| Redundant data | p. 63 |
| Typographical errors | p. 63 |
| Modifying data | p. 64 |
| Summary | p. 65 |
| Multiple tables cure serious problems | p. 67 |
| Redundant data | p. 69 |
| Typographical errors | p. 72 |
| Modifying data | p. 72 |
| Making multiple tables work together | p. 73 |
| Databases are designed to model the real world | p. 74 |
| Getting the data into the correct tables | p. 75 |
| Not normalization (and not ER modeling either) | p. 77 |
| Object identification | p. 78 |
| Relationships in the real world | p. 81 |
| One-to-many | p. 81 |
| One-to-one | p. 82 |
| Many-to-many | p. 82 |
| None | p. 82 |
| Mapping real world relationships to tables | p. 83 |
| How are relationships modeled? | p. 84 |
| Primary keys | p. 86 |
| Foreign keys | p. 91 |
| Summary so far | p. 92 |
| Joins | p. 93 |
| General lessons about joins | p. 106 |
| Revisiting the big four - the synergy begins | p. 112 |
| Closure | p. 112 |
| Tables | p. 115 |
| Queries (and a bit on forms) | p. 116 |
| Forms | p. 123 |
| Reports | p. 124 |
| Integrity | p. 127 |
| Data integrity - is it worth the effort? | p. 127 |
| Types of data integrity error (and some cures) | p. 128 |
| Declarative and procedural referential integrity | p. 134 |
| Nulls in foreign keys | p. 139 |
| These options in context | p. 142 |
| Other integrity issues | p. 143 |
| Integrity - where should you set it? | p. 143 |
| Summary of Part 2 | p. 146 |
| Database Design & Architecture | p. 147 |
| Database design | p. 149 |
| Designing databases - user, logical and physical models | p. 149 |
| The Logical model - overview | p. 151 |
| More about the logical model | p. 152 |
| CASE tools | p. 154 |
| Summary so far | p. 158 |
| The final big advantage of CASE tools | p. 158 |
| More about the differences between the Logical and Physical models | p. 160 |
| Reality check | p. 162 |
| Normalization can help | p. 162 |
| Reverse engineering | p. 163 |
| Methodologies | p. 164 |
| Summary of design models | p. 164 |
| The seven layers of wisdom | p. 165 |
| The seven layers of wisdom | p. 165 |
| Database architecture | p. 168 |
| Default Architecture in Access | p. 168 |
| Access - PC front end - data on file server | p. 168 |
| Client-server (or two-tier) architecture | p. 171 |
| Three-tier architecture (also known as multi-tier) | p. 173 |
| Web-based applications | p. 174 |
| Choosing a database architecture | p. 176 |
| What comes next | p. 177 |
| Related database topics | p. 179 |
| What exactly is a relational database? | p. 181 |
| Do multiple tables a relational database make? | p. 181 |
| Triggers and stored procedures | p. 183 |
| Triggers | p. 183 |
| Stored procedures | p. 187 |
| Summary - triggers and stored procedures | p. 189 |
| Transactions, logs, backup, locking and concurrency | p. 190 |
| Transactions | p. 190 |
| Logs | p. 191 |
| Locking | p. 197 |
| Concurrency | p. 199 |
| Row locking and page locking | p. 199 |
| Access and the features described in this chapter | p. 200 |
| Answers from earlier | p. 200 |
| Codd's rules | p. 201 |
| Codd's rules | p. 201 |
| Economy vs. readability | p. 201 |
| A little background | p. 202 |
| The rules themselves | p. 202 |
| Summary | p. 213 |
| Normalization | p. 215 |
| A first look at normalization | p. 215 |
| First normal form (first level of normalization): 1NF | p. 216 |
| Second normal form (second level of normalization): 2NF | p. 218 |
| Third normal form (third level of normalization): 3NF | p. 220 |
| Summary so far | p. 221 |
| Adding some definitions | p. 222 |
| Summary (again) | p. 231 |
| More about normalization | p. 233 |
| Higher normal forms | p. 233 |
| Normalization doesn't automatically remove all redundancy | p. 237 |
| Summary | p. 242 |
| The system tables | p. 244 |
| More on queries: data manipulation | p. 246 |
| Relational operators | p. 246 |
| Summary | p. 256 |
| SQL | p. 258 |
| SELECT and FROM | p. 261 |
| DISTINCT | p. 262 |
| WHERE | p. 262 |
| Conditions | p. 263 |
| ORDER BY | p. 267 |
| Wildcards | p. 270 |
| Sub-queries | p. 271 |
| Built-in functions | p. 272 |
| GROUP BY - collecting information | p. 276 |
| GROUP BY...HAVING - collecting specific information | p. 282 |
| Working with multiple tables | p. 285 |
| Inner (Natural) joins | p. 290 |
| Outer joins | p. 291 |
| UNION | p. 293 |
| SELECT summary | p. 296 |
| INSERT | p. 297 |
| UPDATE | p. 300 |
| DELETE | p. 302 |
| A question (and a free SQL diagnostic tool) | p. 303 |
| Summary | p. 306 |
| Domains | p. 307 |
| What does null mean? | p. 309 |
| Primary keys | p. 313 |
| Candidate keys | p. 315 |
| Speeding up your database | p. 317 |
| Hardware considerations | p. 319 |
| CPUs | p. 320 |
| Memory | p. 320 |
| Disks | p. 322 |
| Data volume vs. disk capacity | p. 322 |
| Don't put all your eggs in one basket | p. 323 |
| Indexing | p. 324 |
| Indexing techniques | p. 324 |
| Applying indexes - which fields/columns should be indexed? | p. 333 |
| Intelligent use of indexes | p. 337 |
| More on optimization | p. 338 |
| Query optimization | p. 338 |
| Update statistics | p. 339 |
| Query analysis | p. 340 |
| Writing good SQL code | p. 342 |
| Denormalization | p. 344 |
| Mirroring tables | p. 345 |
| Splitting tables | p. 346 |
| Redundant data | p. 348 |
| Repeating groups (breaking 1NF) | p. 349 |
| Derived columns | p. 351 |
| Summary | p. 352 |
| GUIs, macros and control languages | p. 353 |
| Creating a very simple user interface | p. 353 |
| Other languages - SQL | p. 362 |
| Index | p. 365 |
| Table of Contents provided by Ingram. All Rights Reserved. |