
bluebay2014 - Fotolia
DBMS keys: Primary, super, foreign and candidate keys with examples
Here's a guide to primary, super, foreign and candidate keys, what they're used for in relational database management systems and the differences among them.
Database keys are essential components of a relational database management system. DBMS keys are used to specify...
Continue Reading This Article
Enjoy this article as well as all of our content, including E-Guides, news, tips and more.
identifying attributes in the rows of database tables so the data can be sorted and organized for use in applications. They also create links between different tables to reduce data duplication, while making it look like all the data in a table is a single entity.
Types of keys in a DBMS
There are various types of database keys that serve different purposes in a DBMS, including primary, super, foreign and candidate keys. Let's look at each of these keys and the relationships and differences among them.
The main types of keys in a DBMS are the following:
- primary key
- candidate key
- super key
- foreign key
- alternate key
- surrogate key
- composite key
- compound key
Below is a description of each of these DBMS keys.
Primary key
A primary key is a column -- or a group of columns -- in a table that uniquely identifies the rows in that table. For example, in the table below, CustomerNo, which displays the ID number assigned to different customers, is the primary key.
CUSTOMERS | ||
---|---|---|
CustomerNo |
FirstName |
LastName |
1 |
Sally |
Thompson |
2 |
Sally |
Henderson |
3 |
Harry |
Henderson |
4 |
Sandra |
Wellington |
The data values placed in the primary key column must be unique to each row; no duplicates can be used. In addition, nulls are not allowed in primary key columns.
It is possible to use one or more columns as the primary key; however, how do you decide which columns -- and how many -- to choose?
Well, there are times when it is advisable or essential to use multiple columns. However, if you cannot see an immediate reason to use multiple columns, then use one. This isn't an absolute rule; it is simply advice.

However, primary keys made up of single columns are generally easier to maintain and faster in operation. This means that, if you query the database, you will usually get the answer back faster if the tables have single-column primary keys.
The next question you should ask is which column you should pick. The easiest way to choose a column to be a primary key -- and a method that is commonly employed -- is to get the database to automatically allocate a unique number to each row.
Candidate key
Often, there is only one choice for the primary key, as in the case above. However, if there are multiple DBMS keys, these can be called candidate keys -- the name reflects that they are candidates for the responsible job of the primary key.
A candidate key is a column that meets all of the requirements of a primary key. In other words, it has the potential to be a primary key, like the CustomerNo column. On the other hand, in a table of customers or employees, clearly, a column like FirstName is a poor candidate to be a primary key because you cannot control people's first names.
Super key
Now, given the definition above that a primary key can be made up of more than one column and must uniquely identify the rows, we could choose, for example, CustomerNo and a column containing customer phone numbers as the primary key. That fulfills the requirement, but it is clearly foolish because we are adding complexity for no reason.
It is also a great example of a super key with multiple unique identifiers. However, super, in this case, is not a synonym for great, but a contraction of supernumerary. My advice is to avoid super keys in DBMSes.
Foreign key
Foreign keys are columns that point to primary key columns in other database tables. So, for example, OrderNo is the primary key of the ORDERS table below, and CustomerNo is a foreign key that points to the primary key in the CUSTOMERS table.
ORDERS | |||||
---|---|---|---|---|---|
OrderNo |
EmployeeNo |
CustomerNo |
Supplier |
Price |
Item |
1 |
1 |
42 |
Harrison |
$235 |
Desk |
2 |
4 |
1 |
Ford |
$234 |
Chair |
3 |
1 |
68 |
Harrison |
$415 |
Table |
4 |
2 |
112 |
Ford |
$350 |
Lamp |
5 |
3 |
42 |
Ford |
$234 |
Chair |
6 |
2 |
112 |
Ford |
$350 |
Lamp |
7 |
2 |
42 |
Harrison |
$235 |
Desk |
If we want to be extremely pedantic, foreign keys don't have to point to a primary key. The only true requirement of the column to which a foreign key points is that it must contain unique values. Imagine, for example, that our employee table looked like this:
EMPLOYEES | |||||
---|---|---|---|---|---|
SSecurityNo |
EmployeeNo |
FirstName |
LastName |
DateOfBirth |
DateEmployed |
AF-23432334 |
1 |
Manny |
Tomanny |
12 Apr 1966 |
01 May 1999 |
DQ-65444444 |
2 |
Rosanne |
Kolumns |
21 Mar 1977 |
01 Jan 2000 |
GF-54354543 |
3 |
Cas |
Kade |
01 May 1977 |
01 Apr 2002 |
JK-34333432 |
4 |
Norma |
Lyzation |
03 Apr 1966 |
01 Apr 2002 |
VB-48565444 |
5 |
Juan |
Tomani |
12 Apr 1966 |
01 Apr 2002 |
FG-23566553 |
6 |
Del |
Eats |
01 May 1967 |
01 May 2004 |
The Social Security number is actually the primary key of the table, but we also issue each person an employee number that is unique. Under these circumstances, ORDERS.EmployeeNo can be a foreign key pointing to EMPLOYEES.EmployeeNo, even though the latter column is not a primary key. So, the actual rule is slightly more subtle: A foreign key must point to a candidate key.
Having told you this, I can also tell you that I cannot remember the last time I saw this done in a live production database. In practice, foreign keys almost always point to primary keys in a DBMS.
Alternate key
An alternate key is essentially all the keys in a data table that are not the primary key. Remember that only one key can be set as the primary key. Once the primary key is established, all others are now considered alternate keys.
Surrogate key
A surrogate key is an artificial key that is created strictly for the purposes of data analysis. It's sometimes also called a synthetic key or a pseudokey because it isn't derived from any application data. Instead, it is used to identify objects in the database.
Composite key
A composite key is a key that has more than one attribute. Any super key, primary key or candidate key can be a composite key as long as it meets the requirement of having more than one attribute. By combining two or more columns in a table into a key, it guarantees that the key refers to a specific row. This is the primary use of composite keys.
Compound key
A compound key is a particular type of composite key in which each attribute is a foreign key.
Most of this information is from Inside Relational Databases, a book Mark Whitehorn co-authored with Bill Marklyn, published by Springer.