Relationships

Draft

Relationships are how table design expresses real structure: ownership, membership, references, and many-to-many connections.

One-to-many

One team can own many projects through projects.team_id.

SELECT teams.name AS team, projects.name AS project
FROM teams
JOIN projects ON projects.team_id = teams.id
ORDER BY team, project;
Loading plan...

Many-to-many

A join table connects projects and users when both sides can have many matches.

SELECT projects.name AS project, users.name AS member
FROM project_members
JOIN projects ON projects.id = project_members.project_id
JOIN users ON users.id = project_members.user_id
ORDER BY project, member;
Loading plan...

Indexes on relationships

Foreign-key columns are often indexed because joins and lookups use them.

SELECT indexname, tablename
FROM pg_indexes
WHERE schemaname = 'public'
ORDER BY indexname;
Loading plan...

Try Yourself

Loaded Database:relationships.database-init

The database for this lesson is already loaded. Write any query you want and run it directly in your browser.

Exercises

0 OF 2 DONE
1.Select all members of the Warehouse project.
2.Count members for each project.

What We Learned

  • Foreign keyrequires a value to reference an existing row.
  • One-to-manystores the parent id on the many side.
  • Many-to-manyuses a join table between both sides.
  • Relationship indexeshelp joins and foreign-key lookups stay fast.