eolas/Databases/SQL/Foreign_keys_in_SQL.md
2022-12-08 20:18:56 +00:00

3.1 KiB

categories tags
Databases
Programming Languages
SQL
relational-database

Creating views with foreign keys

We utilise foreign and primary keys to create relationships between tables in SQL. Foreign keys link data in one table to the data in another table and are how we cross-reference data in SQL.

In essence you use the primary key of one table to access data in another table.

Let's say we have a sales table:

saleId modelId saleDate employeeId price
1 44 2020-07-27 tbishop 399.99
2 22 2021-02-05 tbishop 200.99

In SQL this would be set up as follows:

CREATE TABLE sales (
  saleId integer PRIMARY KEY,
  modelId integer,
  saleDate date,
  employeeId text,
  price float
)

For every model that is sold it is possible for the customer to return it. This data will be kept in another table returns. Every model sold will have an entry in sales but may or may not have an entry in returns (not every customer will return an item).

We want to establish a relationship between the two tables so that if an item is returned we can trace it back to its original sale.

As the saleId is the primary key in sales this means it is a unique identifier for each model sold. We will therefore use this in our returns table to track the sale data.

Here's our returns table:

returnId saleId returnDate reason
7899 1 2020-11-218 New device issued under warranty due to defect
6711 2 2022-09-02 Returned gift

n this table saleId is identical to saleId in sales. It is the primary key in sales but a foreign key in returns. There is a one-to-one correspondance at work here. If a device has been returned it must have an entry in returns and the salesId of the entry in returns must match the salesId in sales.

We already have the sales table. We want to create new table called returns that will sustain a one-to-one relationship with sales. We are going to use the sale_id as our foreign key in returns. This is the primary key in sales.

We establish this with the following SQL:

CREATE TABLE returns (
	returnId integer PRIMARY KEY,
	saleId integer NOT NULL,
	returnDate date,
	reason text,
	FOREIGN KEY (sale_id) REFERENCES sales(sale_id)
	);

https://www.cockroachlabs.com/blog/what-is-a-foreign-key/


Here's an example with more than one foreign key:

CREATE TABLE returns (
    return_id integer PRIMARY KEY,
    sale_id integer NOT NULL,
    employee_id text NOT NULL,
    date_returned text,
    reason text,
    FOREIGN KEY(sale_id) REFERENCES sales(sale_id),
    FOREIGN KEY(employee_id) REFERENCES employee(employee_id)
    );