Guided Course · Phases 07–10

PostgreSQL + Supabase — Data Engineering

Learn SQL and relational behavior directly before asking Prisma to abstract it.

Track project: Design the TaskFlow PostgreSQL Schema. Finish the lessons, then close the transcript and build the project using evidence instead of copy-paste. Open project →
01

Tables and Data Types

Here’s the simple reason this matters: This lesson is about Tables and Data Types. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the table uses types that match the domain: UUID identity, text, boolean state, and timezone-aware timestamps. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 2011 words
02

Primary Keys

Here’s the simple reason this matters: This lesson is about Primary Keys. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that every row has one stable unique primary identifier that foreign keys can reference. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1897 words
03

Foreign Keys

Here’s the simple reason this matters: This lesson is about Foreign Keys. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the database prevents a task from referencing a workspace row that does not exist. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1915 words
04

NOT NULL, UNIQUE, and CHECK

Here’s the simple reason this matters: This lesson is about NOT NULL, UNIQUE, and CHECK. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the database enforces required values, uniqueness, and a simple invariant even if application validation is bypassed. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 2044 words
05

INSERT

Here’s the simple reason this matters: This lesson is about INSERT. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that one row is inserted and the database returns the authoritative generated/defaulted values. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1858 words
06

SELECT and WHERE

Here’s the simple reason this matters: This lesson is about SELECT and WHERE. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that only open tasks in the requested workspace are returned. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1904 words
07

UPDATE and DELETE

Here’s the simple reason this matters: This lesson is about UPDATE and DELETE. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that each write is scoped to the workspace and the RETURNING clause reveals whether a row was actually changed. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1978 words
08

ORDER BY and LIMIT

Here’s the simple reason this matters: This lesson is about ORDER BY and LIMIT. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the list has deterministic ordering with an explicit tie-breaker and a bounded page size. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1983 words
09

JOINs

Here’s the simple reason this matters: This lesson is about JOINs. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that task rows are combined with optional assignee rows through the declared relationship. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1860 words
10

GROUP BY and Aggregates

Here’s the simple reason this matters: This lesson is about GROUP BY and Aggregates. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that postgreSQL groups tasks by completion state and returns a count for each group. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1975 words
11

Transactions

Here’s the simple reason this matters: A database transaction groups operations so they commit together or roll back together, protecting invariants when one business action touches multiple rows. In this course, we connect it directly to the PostgreSQL data model that stores TaskFlow reliably, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1777 words
12

Isolation and Concurrency

Here’s the simple reason this matters: Isolation controls how concurrent transactions can observe one another. It is the database tool for reasoning about races between simultaneous requests. In this course, we connect it directly to the PostgreSQL data model that stores TaskFlow reliably, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1843 words
13

Indexes

Here’s the simple reason this matters: An index is an additional data structure PostgreSQL maintains to make selected lookup and ordering patterns faster, at the cost of storage and write work. In this course, we connect it directly to the PostgreSQL data model that stores TaskFlow reliably, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1787 words
14

EXPLAIN ANALYZE

Here’s the simple reason this matters: `EXPLAIN ANALYZE` runs a query and reports the actual execution plan and timings. Use it to replace performance guesses with evidence. In this course, we connect it directly to the PostgreSQL data model that stores TaskFlow reliably, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1824 words
15

Normalization

Here’s the simple reason this matters: Normalization separates facts so each business fact has a clear owner and unnecessary duplication is reduced. It improves integrity but should still serve actual query and domain needs. In this course, we connect it directly to the PostgreSQL data model that stores TaskFlow reliably, so you can see where the idea lives in a real project instead of memorizing a definition.

≈ 1808 words
16

Supabase Project Setup

Here’s the simple reason this matters: This lesson is about Supabase Project Setup. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the hosted project provides multiple services, but the application still treats each one as an explicit external boundary with separate configuration. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 1993 words
17

Direct vs Pooler Connections

Here’s the simple reason this matters: This lesson is about Direct vs Pooler Connections. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that connection mode is chosen for the runtime and workload instead of using one connection string blindly everywhere. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 2007 words
18

Design TaskFlow Relational Schema

Here’s the simple reason this matters: This lesson is about Design TaskFlow Relational Schema. Keep the idea practical: in the PostgreSQL/Supabase data layer, the worked example should show that the final schema makes tenancy and relationships explicit enough for constraints, authorization queries, and later reporting. Once you can explain why that happens, the name is much easier to remember. We connect it to the course project so you can see the idea working instead of memorizing a definition.

≈ 2004 words
Track knowledge check

Check the mental models before the project

Answer from memory. If two options sound similar, explain the boundary difference before choosing.

0/0 correct · 0/10 answered
01Which statement best explains “Tables and Data Types” in this track?
02Which statement best explains “Primary Keys” in this track?
03Which statement best explains “Foreign Keys” in this track?
04Which statement best explains “NOT NULL, UNIQUE, and CHECK” in this track?
05Which statement best explains “INSERT” in this track?
06Which statement best explains “SELECT and WHERE” in this track?
07Which statement best explains “UPDATE and DELETE” in this track?
08Which statement best explains “ORDER BY and LIMIT” in this track?
09Which statement best explains “JOINs” in this track?
10Which statement best explains “GROUP BY and Aggregates” in this track?
Ready to transfer the skill?

Design the TaskFlow PostgreSQL Schema

Build and query the relational model directly in PostgreSQL before introducing the ORM.

Start track project →