SQL Composite Key

A composite key is a unique identifier for each row in a table and is formed by combining two or more columns in a table.

Example

CREATE TABLE CustomerOrderShippings (
    customer_id INT,
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (customer_id, order_id, shipping_id)
);

Here, customer_id, order_id, and shipping_idtogether form a composite primary key of the CustomerOrderShippings table.


Using Composite Keys in Relationships

Composite keys are often used to create relationships between tables in a database. For example,

CREATE TABLE OrderShippings (
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (order_id, shipping_id)
);

In this example, the composite key consists of the order_id and shipping_id columns, uniquely identifying each relationship between an order and its shipping details.

Note: Composite keys are particularly useful when a single column does not contain enough unique data to serve as a primary key.


Composite Key With Foreign Keys

Composite keys can also be used in conjunction with foreign keys to enforce referential integrity in a database.

Let's take a look at an example.

CREATE TABLE OrderDetails (
    customer_id INT,
    order_id INT,
    item_name VARCHAR(100),
    PRIMARY KEY (customer_id, order_id),
    FOREIGN KEY (customer_id) REFERENCES Customers(customer_id),
    FOREIGN KEY (order_id) REFERENCES Orders(order_id)
);

Here, in the OrderDetails table, the combination of customer_id and order_id serves two roles:

  • Composite Primary Key: Together, they uniquely identify each record in the OrderDetails table, ensuring no two records are the same.
  • Composite Foreign Key: customer_id links to the Customers table and order_id links to the Orders table.

This setup links order details to both specific customers and specific orders.


Inserting Records With Composite Keys

Inserting records into a table (see SQL INSERT INTO) with a composite key is similar to inserting into any other table. For example,

-- create table with composite keys
CREATE TABLE CustomerOrderShippings (
    customer_id INT,
    order_id INT,
    shipping_id INT,
    PRIMARY KEY (customer_id, order_id, shipping_id)
);

-- insert into the table
INSERT INTO CustomerOrderShippings (customer_id, order_id, shipping_id) VALUES
(1, 4, 5),
(4, 2, 2);

Here, the SQL command inserts two records into the CustomerOrderShippings table. Each record is a combination of customer_id, order_id, and shipping_id:

  • (1, 4, 5) - represents a record where customer_id is 1, order_id is 4, and shipping_id is 5.
  • (4, 2, 2) - represents another record where customer_id is 4, order_id is 2, and shipping_id is 2.

These combinations form composite keys that uniquely identify each row in the table.

Did you find this article helpful?

Your builder path starts here. Builders don't just know how to code, they create solutions that matter.

Escape tutorial hell and ship real projects.

Try Programiz PRO
  • Real-World Projects
  • On-Demand Learning
  • AI Mentor
  • Builder Community