May 10, 2009
Posted by on
Referential integrity is a database management safeguard that ensures every foreign key matches a primary key.
For example, customer numbers in a customer file are the primary keys, and customer numbers in the order file are the foreign keys. If a customer record is deleted, the order records must also be deleted; otherwise they are left without a primary reference. If the DBMS does not test for this, it must be programmed into the applications.
Referential integrity in a relational database is consistency between coupled tables. Referential integrity is usually enforced by the combination of a primary key or candidate key (alternate key) and a foreign key. For referential integrity to hold, any field in a table that is declared a foreign key can contain only values from a parent table’s primary key or a candidate key. For instance, deleting a record that contains a value referred to by a foreign key in another table would break referential integrity. A relational database management system (RDBMS) enforces referential integrity, normally either by deleting the foreign key rows as well to maintain integrity, or by returning an error and not performing the delete. Which method is used would be determined by the referential integrity constraint, as defined in the data dictionary.
An example of a database that has not enforced referential integrity. In this example, there is a foreign key (artist_id) value in the album table that references a non-existent artist — in other words there is a foreign key value with no corresponding primary key value in the referenced table.
This anomaly came about when the record for an artist called “Aerosmith”, with an artist_id of “4”, was deleted from the artist table, even though the album “Eat the rich” referred to this artist. If referential integrity had been enforced, the deletion of the main record would have been possible, but its associated record would have been deleted as well. Alternatively, the existence of an associated record would not allow the delete operation of the referenced record, and instead return an error code.