Establishing Table Relationships
Now that you know the theory behind the relational model, you can turn your attention to creating and working with related tables in queries. The first step, however, is to establish the relationship between the two tables, which is what this section is all about.
To get started, choose Tools, Relationships (or click the Relationships button on the Database toolbar). You'll see the Relationships window, shown in Figure 3.1. (Note that you'll see this view of the window only if you're working with the Northwind sample database.)
Figure 3.1 You use the Relationships window to establish relations between tables.
Understanding Join Lines
Because the Northwind sample database is well-designed, all the tables are related to each other in one way or another. You can tell this by observing the lines that connect each table in the Relationships window. These lines are called join lines. As you can see in Figure 3.1, the join line connects the two fields that contain the related information. For example, the Suppliers and Products tables are joined on the common SupplierID field. In this case, SupplierID is the primary key field for the Suppliers table, and it appears as a foreign key in the Products table. This lets you relate any product to its corresponding supplier data.
The symbols attached to the join lines tell you the type of relation. In the join between the Suppliers and Products tables, for example, the Suppliers side of the join line has a 1, and the Products side of the line has an infinity symbol (8). This stands for "many," so you interpret this join as a one-to-many relation.
Types of Joins
Access lets you set up four kinds of joins:
Inner joinAn inner join includes only those records in which the related fields in the two tables match each other exactly (which is why this type of join is often called an equijoin). This is the most common type of join.
Outer joinAn outer join includes every record from one of the tables and only those records from the other table in which the related fields match each other exactly. In your sales leads example, it's possible that there might be companies for which no contacts have yet been established. Creating an inner join between the Company and Contacts table shows you only those firms that have existing contacts. However, setting up an outer join shows all the records in the Companies table, including those in which there is no corresponding record in the Contacts table.
An outer join is also called a left-outer join. To see why, consider a one-to-many relation. Here, the "left" side is the "one," table and the "right" side is the "many" table. So this type of join includes every record from the "one" (left) side and only those matching records from the "many" (right) side.
You use the term left-outer join when you need to differentiate it from a right-outer join. In a one-to-many relation, this type of join includes every record from the "many" (right) side and only those matching records from the "one" (left) side.
Self-joinA self-join is a join on a second copy of the same table. Self-joins are handy for tables that include different fields with the same type of information. For example, the Northwind Employees table has an EmployeeID field that lists the identification number of each employee. The same table also includes a ReportsTo field that lists the identification number of the employee's manager. To display the name of each employee's manager, you use a second copy of the Employees table and join the EmployeeID and ReportsTo fields.
Theta joinA theta join is created when the data in two fields from two tables is related via some comparison operator other than equals (=). For example, a not-equal join relates data using the not equal operator (<>). For example, suppose you want to compare the unit price data in Northwind's Order Details table with the unit price data in the Products table. Specifically, you want to see those orders where the unit price of the order differs from the unit price of the product. In this case, you look for records where the [Order Details].UnitPrice field is not equal to the [Products].UnitPrice field.
Adding Tables to the Relationships Window
If you need to establish a new relationship between two tables, your first order of business is to add the tables to the Relationships window. Here are the steps to follow:
Choose Relationships, Show Table (or click the Show Table button on the toolbar). Access displays the Show Table dialog box, shown in Figure 3.2.
Click the table you want to add.
Click Add. Access adds the table to the Relationships window.
Repeat steps 2 and 3 to add more tables.
Click Close to return to the Relationships window.
Figure 3.2 Use this dialog box to add tables to the Relationships window.
To create a join between two tables (or a self-join between two copies of the same table), use the mouse to click and drag one of the related fields and drop it on the other. Here are the specific steps:
Add the tables you want to join.
Arrange the table boxes so that in each box you can see the fields you want to use for the join.
Click and drag the related field from one table and drop it on the related field in the other table. Access displays the Edit Relationships dialog box, shown in Figure 3.3.
The grid should show the names of the fields in each table that you want to relate. If not, use the drop-down list in one or both cells to click the correct field or fields.
If you want Access to enforce referential integrity rules on this relation, click the Enforce Referential Integrity check box. If you do this, two other check boxes become active:
To set the type of join, choose Join Type to display the Join Properties dialog box, shown in Figure 3.4. Here, option 1 corresponds to an inner join, option 2 corresponds to a left-outer join, and option 3 corresponds to a right-outer join. When you've clicked the option you want, click OK to return to the Relationships dialog box.
Figure 3.4 Use the Join Properties dialog box to establish the type of join.
Click Create. Access establishes the relationship and displays a join line between the two fields.
Figure 3.3 Access displays the Edit Relationships dialog box when you click and drag a related field from one table and drop it on another.
Cascade Update Related FieldsIf you click this check box and then make changes to a primary key value in the parent table, Access updates the new key value for all related records in all child tables. For example, if you change a CompanyID value in the Companies table, all related records in the Contacts table have their CompanyID fields updated automatically.
Cascade Delete Related FieldsIf you activate this check box and then delete a record from the parent table, all related records in all child tables are also deleted. For example, if you delete a record from the Companies table, all records in the Contacts table that have the same CompanyID as the deleted record are also deleted.
Editing a Relationship
If you need to make changes to a relationship, Access lets you edit the relation parameters from within the Relationships window. For the relation you want to adjust, click the join line for the two fields and then choose Relationships, Edit Relationship (you can also right-click the join line and choose Edit Relationship from the shortcut menu). Access displays the Edit Relationships dialog box so that you can make your changes.
Removing a Join
If you no longer need a join, you can remove it by clicking the join line and choosing Edit, Delete (or by pressing Delete). When Access asks you to confirm the deletion, choose Yes.