Throughout this book, I'll use a simple example database to help explain some of the more complex concepts. The sample database represents some of the data storage and retrieval requirements that you might encounter when running a video rental store. I won't pretend that the sample database is useful for any real-world scenarios; instead, this database will help us explore how PostgreSQL works and should illustrate many PostgreSQL features.
To begin with, the sample database (which is called movies) contains three kinds of records: customers, tapes, and rentals.
Whenever a customer walks into our imaginary video store, you will consult your database to determine whether you already know this customer. If not, you'll add a new record. What items of information should you store for each customer? At the very least, you will want to record the customer's name. You will want to ensure that each customer has a unique identifier?you might have two customers named "Danny Johnson," and you'll want to keep them straight. A name is a poor choice for a unique identifier?names might not be unique, and they can often be spelled in different ways. ("Was that Danny, Dan, or Daniel?") You'll assign each customer a unique customer ID. You might also want to store the customer's birth date so that you know whether he should be allowed to rent certain movies. If you find that a customer has an overdue tape rental, you'll probably want to phone him, so you better store the customer's phone number. In a real-world business, you would probably want to know much more information about each customer (such as his home address), but for these purposes, you'll keep your storage requirements to a minimum.
Next, you will need to keep track of the videos that you stock. Each video has a title and a distributor?you'll store those. You might own several copies of the same movie and you will certainly have many movies from the same distributor, so you can't use either one for a unique identifier. Instead, you'll assign a unique ID to each video.
Finally, you will need to track rentals. When a customer rents a tape, you will store the customer ID, tape ID, and rental date.
Notice that you won't store the customer name with each rental. As long as you store the customer ID, you can always retrieve the customer name. You won't store the movie title with each rental, either?you can find the movie title by its unique identifier.
At a few points in this book, we might make changes to the layout of the sample database, but the basic shape will remain the same.