Tables
Relationships
There are three types of relationships between entities:
- One to One
- One to Many
- Many to Many
One to One
A one to one relationship is where one entity is related to another entity.
For example, a user can have one profile and a profile can belong to one user.
One to Many
A one to many relationship is where one entity is related to many entities.
For example, a user can have many posts but a post can only belong to one user.
Many to Many
A many to many relationship is where many entities are related to many entities.
For example, a user can have many roles and a role can belong to many users.
Primary Keys
A primary key is a column that uniquely identifies each row in a table.
For example, if we have a users table, we can use the id column as the primary key.
| id | name | |
|---|---|---|
| 1 | John | |
| 2 | Sarah | |
| 3 | Jane | 
Creating a Primary Key
When creating a table, we can specify a column as a primary key by using the PRIMARY KEY constraint.
CREATE TABLE users (  id SERIAL PRIMARY KEY,  name VARCHAR(255),  email VARCHAR(255));Foreign Keys
When we have a table that references another table, we call the column that references the other table a foreign key.
An example would be the below schema which has a users table and a posts table. The posts table has a user_id column which references the id column in the users table.
| users | posts | 
|---|---|
| id | id | 
| name | title | 
| body | |
| user_id | 
As the posts collumn references the users table, we call it a foreign key.
Creating a Foreign Key
When creating a table, we can specify a column as a foreign key by using the references method.
CREATE TABLE posts (  id SERIAL PRIMARY KEY,  title VARCHAR(255),  body TEXT,  user_id INTEGER  FOREIGN KEY (user_id) REFERENCES users(id));Table Joins
When we have two tables that are related to each other, we can use a JOIN to combine the data from both tables into a single result set.
For example, if we have a users table and a posts table, we can use a JOIN to get all the posts for a given user.
SELECT * FROM postsJOIN users ON users.id = posts.user_idWHERE users.id = 1;The above query will return all the posts for the user with an id of 1.
| id | title | body | user_id | id | name | email ||----|-------|------|---------|----|------|-------|| 1  | ...   | ...  | 1       | 1  | ...  | ...   || 2  | ...   | ...  | 1       | 1  | ...  | ...   || 3  | ...   | ...  | 1       | 1  | ...  | ...   | 
 