SQL FOREIGN KEY

FOREIGN KEY in SQL

SQL FOREIGN KEY Constraint

The FOREIGN KEY constraint in SQL is essential for maintaining relationships between tables. It ensures that a field (or combination of fields) in one table corresponds to the primary key in another table, preserving data integrity and preventing invalid data entries. The table containing the foreign key is called the child table, and the table with the referenced primary key is the parent table.

Why Use the FOREIGN KEY Constraint?

The FOREIGN KEY constraint is critical in relational databases for:

  1. Enforcing Relationships: Links tables together based on a shared field, maintaining the integrity of your database schema.
  2. Preventing Invalid Data: Ensures that values in the foreign key column match the values in the referenced primary key column.
  3. Cascading Actions: Supports actions like cascading updates or deletions to maintain consistency across related tables.

How to Apply FOREIGN KEY Constraint

The FOREIGN KEY constraint can be defined when creating a new table or added to an existing table using the ALTER TABLE statement.

1. Defining FOREIGN KEY During Table Creation

Single Column Foreign Key

mysql
1
2
3
4
5
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
);
  • Links the CustomerID column in the Orders table to the CustomerID column in the Customers table.
  • Ensures that every CustomerID in the Orders table exists in the Customers table.

Name the FOREIGN KEY

mysql
1
2
3
4
5
CREATE TABLE Payments (
    PaymentID INT PRIMARY KEY,
    OrderID INT,
    CONSTRAINT FK_OrderPayment FOREIGN KEY (OrderID) REFERENCES Orders(OrderID)
);
  • Names the foreign key constraint FK_OrderPayment for better manageability.

2. Add FOREIGN KEY to an Existing Table

If the table is already created, you can add a FOREIGN KEY constraint using the ALTER TABLE statement.

mysql
1
2
ALTER TABLE Orders  
ADD FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID);

Or, with a named constraint:

mysql
1
2
ALTER TABLE Payments  
ADD CONSTRAINT FK_OrderPayment FOREIGN KEY (OrderID) REFERENCES Orders(OrderID);

3. Remove a FOREIGN KEY Constraint

To remove a FOREIGN KEY constraint, use the ALTER TABLE statement with DROP.

MySQL

mysql
1
2
ALTER TABLE Payments  
DROP FOREIGN KEY FK_OrderPayment;

SQL Server / Oracle

mysql
1
2
ALTER TABLE Payments  
DROP CONSTRAINT FK_OrderPayment;

Benefits of FOREIGN KEY Constraint

  • Maintains Data Integrity: Ensures that all foreign key values exist in the parent table.
  • Prevents Orphan Records: Restricts deletions in the parent table if child records reference it.
  • Supports Cascading Operations: Automatically updates or deletes related records with cascading options.
  • Simplifies Data Modeling: Creates clear relationships between tables, improving the readability of your schema.

Cascading Actions with FOREIGN KEY

The FOREIGN KEY constraint supports cascading options for actions like DELETE and UPDATE:

  • ON DELETE CASCADE: Deletes child records when the parent record is deleted.
  • ON UPDATE CASCADE: Updates child records when the parent record is updated.

Example with Cascading Actions

mysql
1
2
3
4
5
CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID) ON DELETE CASCADE ON UPDATE CASCADE
);
  • Ensures related records in the Orders table are updated or deleted when changes occur in the Customers table.

Best Practices for Using FOREIGN KEY

  • Use Descriptive Column Names: Ensure foreign key columns clearly indicate the relationship, such as CustomerID or OrderID.
  • Leverage Cascading Options: Use cascading actions where appropriate to maintain consistency across related tables.
  • Plan Relationships: Design the database schema with relationships in mind to avoid redundant or circular references.
  • Avoid Circular Dependencies: Prevent relationships where two tables reference each other as parents.

Key Points to Remember

  • A foreign key links the child table to the parent table, ensuring that related data is consistent.
  • Use cascading actions like ON DELETE CASCADE to maintain relational integrity automatically.
  • The FOREIGN KEY constraint can be defined at the time of table creation or added later using ALTER TABLE.
  • Proper use of foreign keys simplifies database relationships, enforces rules, and prevents invalid data.