A foreign key is a field (or
fields) that points to the primary
key of another table. The purpose
of the foreign key is to ensure
referential integrity of the data.
In other words, only values that
are supposed to appear in the
database are permitted.
For example, say we have two
tables, a CUSTOMER table that
includes all customer data, and an
ORDERS table that includes all
customer orders. The constraint
here is that all orders must be
associated with a customer that is
already in the CUSTOMER table. In
this case, we will place a foreign
key on the ORDERS table and have
it relate to the primary key of
the CUSTOMER table. This way, we
can ensure that all orders in the
ORDERS table are related to a
customer in the CUSTOMER table. In
other words, the ORDERS table
cannot contain information on a
customer that is not in the
CUSTOMER table.
The structure of these two
tables will be as follows:
Table CUSTOMER
| column
name |
characteristic |
| SID |
Primary Key |
| Last_Name |
|
| First_Name |
|
Table ORDERS
| column
name |
characteristic |
| Order_ID |
Primary Key |
| Order_Date |
|
| Customer_SID |
Foreign Key |
| Amount |
|
In the above example, the
Customer_SID column in the ORDERS
table is a foreign key pointing to
the SID column in the CUSTOMER
table.
Below we show examples of how
to specify the foreign key when
creating the ORDERS table:
MySQL:
CREATE
TABLE ORDERS
(Order_ID integer,
Order_Date date,
Customer_SID integer,
Amount double,
Primary Key (Order_ID),
Foreign Key (Customer_SID) references
CUSTOMER(SID));
Oracle:
CREATE
TABLE ORDERS
(Order_ID integer primary key,
Order_Date date,
Customer_SID integer references
CUSTOMER(SID),
Amount double);
SQL Server:
CREATE
TABLE ORDERS
(Order_ID integer primary key,
Order_Date datetime,
Customer_SID integer references
CUSTOMER(SID),
Amount double);
Below are examples for
specifying a foreign key by
altering a table. This assumes
that the ORDERS table has been
created, and the foreign key has
not yet been put in:
MySQL:
ALTER
TABLE ORDERS
ADD FOREIGN KEY (customer_sid)
REFERENCES CUSTOMER(SID);
Oracle:
ALTER
TABLE ORDERS
ADD (CONSTRAINT fk_orders1)
FOREIGN KEY (customer_sid) REFERENCES
CUSTOMER(SID);
SQL Server:
ALTER
TABLE ORDERS
ADD FOREIGN KEY (customer_sid)
REFERENCES CUSTOMER(SID);