In 09-01 we looked at slow learning: books, chapters worked through with the keyboard in front of you, one title every three months. This lesson covers the other side, the one that produces results in weeks: official documentation studied seriously, platforms where you write SQL and something corrects you instantly, university courses published openly, and the sources that keep you current once the course is over.

It also covers something almost nobody explains and that saves months: how to tell a course that teaches from one that entertains. There is an enormous amount of database material online, and a good part of it is the same SELECT * FROM customers repeated for nine hours of video. Learning to discard quickly is a skill as valuable as knowing how to choose.

The lesson ends with a concrete twelve-week study plan template, built exactly on the point where this course has left you: someone who has designed and normalized a schema, has written multi-table and aggregate queries, has read an execution plan, has modeled documents in MongoDB and has split a system across four engines.

Important warning. Course availability, prices, free tiers, contents and even existence change constantly. Platforms withdraw courses, universities reorganize their programs, and free tiers are cut back or extended without notice. This lesson quotes no prices and gives no deep links: for each course its exact title and the institution that teaches it are given, and the instruction is that you search for it by that title on the corresponding platform. Before enrolling or paying for anything, check at the official source what is available today.

Contents

  1. How to choose an online course without wasting your time
  2. Official documentation as the first resource
  3. How the PostgreSQL manual is studied
  4. The documentation of the other engines
  5. Interactive practice platforms
  6. Structured courses from universities and platforms
  7. Blogs, channels and newsletters for keeping current
  8. Certifications: who they are for and who they are not
  9. Your personal study plan: a 12-week template
  10. Common Mistakes and Tips
  11. Exercises
  12. Conclusion

  1. How to choose an online course without wasting your time

Before the list, the filter. These are the signals you can check in ten minutes, before investing forty hours.

Quality signals

Signal Why it matters
There is a project built up across the course It forces you to carry decisions from one lesson to the next; that is where judgment appears
Decisions are justified, not just syntax "We use TEXT instead of VARCHAR(50) because…" is teaching; "write TEXT" is dictation
Mistakes are shown along with how they are debugged The instructor who never gets it wrong on screen has edited the video, and with you the error will happen
There are graded exercises, not just videos The difference between recognizing and knowing how to do
The specific engine version is stated A course that does not say whether it is PostgreSQL 12 or 17 has never been revised
The syllabus mentions indexes, transactions or execution plans A sign that it goes beyond syntax
You can see the full syllabus before enrolling If they hide it, it is usually because it is thin
There is a visible last-updated date And it is recent

Red flags

Signal What it usually means
A title promising a timeframe or a job ("master SQL in 7 days", "from zero to expert") Marketing over content
Forty hours of video and not one graded exercise A passive-consumption course
The syllabus ends at GROUP BY Syntax only: it never reaches design, indexes or transactions
Screenshots with clearly old interfaces It has not been touched for years
Recent comments asking why something no longer works Out of date and unmaintained
No specific engine is named "Generic SQL" that works nowhere
The whole course happens inside a drag-and-drop GUI tool You will learn neither to read nor to write SQL
The final project is "a shop database" and nothing more Absence of a real domain and of interesting constraints

The problem with courses that only teach syntax

SQL syntax is small. The essentials fit in a couple of evenings, and this course already gave them to you in module 2. What takes years is the other thing: deciding. Whether that column should allow NULL, whether that table should be split, whether that index is going to be worth anything, whether that JOIN should be a subquery, whether that operation needs a transaction and at what isolation level.

A course that only teaches syntax produces a pleasant sensation of progress — every lesson adds a new keyword — and leaves the student unable to design anything. It is the reason this course devoted two whole modules (4 and 5) to design and normalization before considering the matter finished, and why modules 7 and 8 were all exercises and case studies.

When you evaluate a course, look for the decisions part. If it does not have one, it does not matter how many hours it runs.

Why your own project is worth more than the certificate

Put plainly: in a technical interview, a completion certificate from an open platform counts for very little, and a repository with a well-designed schema, its migrations, its justified indexes and a README explaining the decisions counts for a great deal.

The reason is not snobbery. The certificate proves you saw the material; the project proves you made decisions under constraints and that you can defend them. And decisions are the job.

That is why, in the twelve-week plan of section 9, every block has a deliverable, and the certificate appears nowhere.

  1. Official documentation as the first resource

The most widespread and most expensive habit is searching the internet before searching the manual. It is done because the manual "is dense" and the forum answer "is faster". That is true in the short term and false in the medium term: the forum answer is from 2013, it was written for another version, it solves a similar case but not yours, and it does not teach you where to look next time.

Always start with the official documentation. And not only for one-off lookups: study it in blocks, as if it were a book, because in several of these engines it is one.

Documentation Root link What to look for in it Follows on from
PostgreSQL Manual https://www.postgresql.org/docs/ Tutorial, the SQL language, data types, indexes, performance, administration The whole course; especially M2, M4, M6
MongoDB Manual https://www.mongodb.com/docs/ Data modeling, CRUD, aggregation pipelines, indexes, explain() 03-03, 08-02
SQLite https://sqlite.org/ "When to use SQLite", dynamic typing, deliberate limitations 01-02, 01-04
Redis https://redis.io/docs/ Data types, key expiry, persistence, caching patterns 03-02, 08-03
Neo4j https://neo4j.com/docs/ Graph modeling, the Cypher query language 03-02
Elasticsearch https://www.elastic.co/ Text analysis, mappings, search queries 03-02, 08-03
Apache Cassandra https://cassandra.apache.org/ Query-driven modeling, partition keys 03-02, 03-03

Two warnings about documentation. First: always check the version. The PostgreSQL manual is published per version and it is easy to end up reading the one for a version you do not have installed; check the page's version selector. Second: the official documentation overrides any course, blog or forum answer. If a video says one thing and the manual says another, the manual is right.

  1. How the PostgreSQL manual is studied

The PostgreSQL manual is intimidating because of its size, and it should not be: it is organized into parts with very different purposes, and only two or three are continuous reading. This is a reasonable reading order for someone finishing this course.

Phase Part of the manual to read Why now Follows on from
1 Tutorial (all of it, in one evening) It is short and it anchors the official vocabulary. You will be surprised by what it clarifies even if you already know SQL 02-01, 02-02
2 The SQL Language → Data Types This is where you really start deciding well: text, numeric, timestamptz, jsonb, ranges, arrays 04-04
3 The SQL Language → Data Definition Constraints, foreign keys with their actions, inheritance, partitioning 02-06, 04-04
4 The SQL Language → Queries and Functions and Operators Advanced queries, LATERAL, common table expressions, window functions 02-04, 02-05, 07-04
5 The SQL Language → Indexes Index types (B-tree, GIN, GiST, BRIN), partial indexes, expression indexes 06-03
6 Server Administration → Backup and Restore pg_dump, physical backups, point-in-time recovery 06-04
7 Server Administration → Client Authentication and the roles chapter Who connects and what they can do 06-04
8 Server Administration → Server Configuration Memory, work_mem, WAL, automatic maintenance 06-03, 06-04
9 Internals → Concurrency Control and Performance Tips The why of multiversion concurrency control and of the planner 06-02, 06-03
Reference Reference (SQL commands, client applications) Not read: consulted daily

A method that works well: one section of the manual per week, with a query notebook of your own. For each section, write five queries against BiblioRed that use something you have just discovered. The data types section, for example, will almost certainly make you rewrite a couple of columns in your schema as soon as you discover range types and timestamptz.

  1. The documentation of the other engines

MongoDB Manual and MongoDB University. The manual (https://www.mongodb.com/docs/) has a data modeling section that is required reading after 03-03: it formalizes the embed-versus-reference criterion you applied by feel in 08-02, with its named patterns. Besides the manual, MongoDB maintains MongoDB University, a training platform of its own with learning paths for development and administration, reachable from the official MongoDB site. It is one of the best-made product training programs in existence. Like everything else in this lesson: check on the official site which paths are available today and under what conditions, because they change.

SQLite. Its documentation has an unusual and valuable feature: besides the reference, it publishes opinion and design documents — when to use SQLite and when not to, why its type system is dynamic, which limitations are deliberate. Reading those pages is the best continuation of 01-02, because they explain honestly what an embedded database is for and what it is not. Root: https://sqlite.org/.

Redis. The documentation (https://redis.io/docs/) is organized by data type, and that organization is itself the teaching: understanding what a sorted set solves versus a list versus a hash is understanding Redis. The key expiry part and the persistence part are the ones that ground what you did in 08-03 with VallBici's real-time availability.

Neo4j. Its documentation (https://neo4j.com/docs/) includes learning material for the Cypher language and for graph modeling. Neo4j was the engine mentioned in 03-02 and never practiced; if you want to fill that gap, this is the best place to do it, and graph modeling has an interesting side effect: it forces you to think of relationships as first-class citizens, which changes how you see the relational model.

Elasticsearch. The documentation at https://www.elastic.co/ covers text analysis, mappings and the query language. What is worth studying after 08-03 is the analyzers part: understanding what happens to a piece of text between being indexed and being searched is what explains why Elasticsearch finds "Vallmar" when you type "valmar" and ILIKE does not.

  1. Interactive practice platforms

Writing SQL and having something tell you immediately whether it is right is, for learning queries, more effective than any video. These are the established platforms.

Platform Root link Level Type of exercise What it is for Who it is not for
SQLBolt https://sqlbolt.com/ Beginner Short lessons with an immediate exercise Reviewing from SELECT to JOIN in a couple of evenings Anyone who already has module 2 down
SQLZoo https://sqlzoo.net/ Beginner-medium Exercises by topic with real data (world data, countries) Practicing JOIN and aggregation with data that invites questions Anyone looking for realistic business cases
PGExercises https://pgexercises.com/ Medium Exercises on PostgreSQL with a sports club schema The best free resource for consolidating module 2 on real PostgreSQL Anyone not using PostgreSQL
Select Star SQL https://selectstarsql.com/ Beginner-medium An interactive book over a real data set Learning to ask questions of data, not just to query it Anyone looking for a quick reference
HackerRank (SQL domain) https://www.hackerrank.com/ Medium Challenges with automatic grading and increasing difficulty Volume of practice and interview preparation Anyone looking for design or modeling
LeetCode (database section) https://leetcode.com/ Medium-high Interview-style problems, many with window functions Technical interview preparation Anyone wanting to learn databases: there are only queries here
DataLemur https://datalemur.com/ Medium-high Data analysis interview questions Practice aimed at data roles Anyone heading for application development
Advent of SQL and similar seasonal challenges Search by name Medium-high One problem a day for a month, with a community Keeping the muscle and seeing other people's solutions to the same problem Anyone starting out: the curve is steep

Where to start based on what was hard in module 7

If in module 7 you struggled with… Start with And follow with
07-01, basic queries and filters All of SQLBolt, then SQLZoo PGExercises, basic sections
07-01/07-04, JOINs across three or more tables SQLZoo (JOIN section) PGExercises, joins section
07-04, aggregation and correlated subqueries All of PGExercises HackerRank, medium difficulty
07-04, "the same member's previous loan" and similar LeetCode, database section, filtering by window functions "SQL Cookbook", window functions chapter (09-01)
07-02, schema design None of these: design is not practiced with automatic grading. Go to exercise 2 of this lesson "Database Design for Mere Mortals" (09-01)
07-03, normalization Likewise: no platform grades it. Audit other people's real schemas Module 5 reread + "SQL Antipatterns"

That last point deserves emphasis: interactive platforms teach you to query, not to design. They cover module 2 perfectly and much of module 7, and they do not cover modules 4, 5 and 8. There is no shortcut for design: it is learned by designing and by submitting the design to criticism.

  1. Structured courses from universities and platforms

Here exact titles and institutions are given. Search for them by that title on the corresponding platform; catalogs and addresses change, which is why no links to specific listings are given.

Course (exact title) Institution Where to look for it Level Follows on from
Series of mini-courses "Databases" (Jennifer Widom): among others, Relational Databases and SQL, Advanced Topics in SQL, Modeling and Theory, Semistructured Data Stanford University Stanford Online's open course portal and massive course platforms Medium M2, M4, M5, M3
"Introduction to Structured Query Language (SQL)" (Charles Severance), within a web applications specialization University of Michigan Coursera, searching by the title Beginner 02-01 to 02-05
"Intro to Database Systems" (undergraduate course, published openly with videos and materials) Carnegie Mellon University — CMU Database Group The CMU Database Group's channel and site, https://db.cs.cmu.edu/ High 01-04, 06-01, 06-02, 06-03
"Advanced Database Systems" (graduate course, published openly) Carnegie Mellon University — CMU Database Group Likewise Very high 01-04, 06-03
MongoDB University learning paths (development and administration) MongoDB, Inc. Official MongoDB site Beginner-medium 03-03, 08-02

Profile: the CMU Database Group courses

What it is. Carnegie Mellon publishes openly, term after term, its database systems courses: the recorded lectures, the slides, the project assignments. It is top-tier university material available without enrolling.

What it covers. The introductory course goes through storage, page formats, B-tree indexes, query processing, planning and optimization, concurrency control, recovery and distributed systems. The graduate one goes deep into modern engines, vectorized execution and columnar storage.

Level. High. It is a computer science course, with systems programming in the projects.

How to work through it. Do not attempt the whole thing up front. It is the perfect continuation of 01-04 — where a database engine's architecture was described from the outside — and of 06-03 — where you read execution plans without knowing how they are generated. Start by watching only the lectures on indexes, query processing and query optimization, in that order. If they hook you, carry on; if not, you have already got the main thing.

What to skip. The programming projects, unless you want to build engines for a living. Watching the lectures without doing the projects already gives you a great deal.

Profile: Stanford's "Databases" series

What it is. The material from Stanford's classic database course, reorganized into several self-guided mini-courses, each focused on one block. It is probably the most veteran and most polished online database course in existence.

What it covers. The relational model and SQL, design and theory — including functional dependencies and normal forms, with more rigor than module 5 gave — semistructured data (XML, JSON), and advanced SQL topics such as views, triggers and constraints.

Level. Medium, with demanding theoretical parts.

How to work through it. If in 05-02 you were left with the feeling of having applied the normal forms without fully understanding their foundation, the modeling and theory mini-course is exactly the remedy. The exercises are automatically graded, which for theory is rare and very valuable.

What to skip. The XML part, unless you have a specific interest; today it carries much less weight than it did when it was recorded.

  1. Blogs, channels and newsletters for keeping current

Once the course is over, the problem stops being learning and becomes not rusting. The trap here is subscribing to thirty sources, reading none of them and feeling bad about it. The strategy that works is the opposite: two or three fixed sources and a fixed slot each week.

Source Root link What it publishes Recommended reading frequency
Markus WinandUse The Index, Luke! and his site about modern SQL https://use-the-index-luke.com/ Indexes, performance and which parts of the SQL standard each engine implements As a reference, when the topic comes up
Planet PostgreSQL (aggregator of community blogs) https://planet.postgresql.org/ Everything the PostgreSQL community writes, raw A skim of the headlines each week
Hubert Lubaczewski's blog (depesz) https://www.depesz.com/ What is new in each PostgreSQL version, explained one item at a time When a new version comes out
Jepsen https://jepsen.io/ Independent analyses of the consistency guarantees of distributed databases, put under real failures When a specific engine interests you
Weekly database newsletters (for example Postgres Weekly and DB Weekly) Search by name A weekly summary of articles, releases and tools Fifteen minutes a week
Company engineering blogs publishing real migration, scaling or incident cases Postmortems and architecture decisions with numbers When one appears on the topic that concerns you

About Jepsen, a note: it is the place where commercial claims about consistency are genuinely put to the test. After 06-02 and 08-03, reading a Jepsen report on an engine you thought you knew is a notably formative experience, because it shows the distance between what a product promises on its website and what it guarantees under a network partition.

How not to drown. Three rules. One: aggregators are read by headline, not by article; you open two, not twelve. Two: if a topic does not touch you at work or in a project of your own, reading about it is entertainment, not training — which is fine, but do not count it as study. Three: reserve a fixed slot, thirty minutes a week, and outside that slot read nothing. Technical news is almost never urgent.

  1. Certifications: who they are for and who they are not

Certifications come in three families: database product ones (for example, MongoDB's official certifications for development and administration, or the ones offered by the companies that give commercial support for PostgreSQL), cloud provider ones (the big three all have data and database certifications, with catalogs they reorganize often) and training platform ones, which are really completion certificates and not certifications.

Profile Does certifying make sense? Comment
Developer with experience and projects of their own Not much Your repository and your decisions count for more in any technical conversation
Someone switching sector with no demonstrable experience Sometimes It works as a signal of commitment to someone who cannot assess you technically
Someone working in consultancy or in companies with accreditation requirements Yes Sometimes it is a contractual requirement from the client, not a choice
A sysadmin moving to the cloud Yes, the provider one Its syllabus on operations, backup and high availability is useful in itself
A student or recent graduate It depends Before a certification, a well-documented public project

Two cautions. First: the catalogs, names, codes and requirements of certifications change frequently — exams are withdrawn, renamed, merged; always consult the provider's official catalog and do not trust third-party lists, this one included. Second: the greatest value of a certification is usually not the diploma, but that its official syllabus is an excellent checklist of what you ought to know. You can use that syllabus as a study plan without ever sitting the exam, and that is a perfectly legitimate strategy.

  1. Your personal study plan: a 12-week template

A study plan needs five things: realistic weekly hours, ordered topics, a specific resource per topic, one deliverable per block and a review date. Without a deliverable it is not a plan, it is a wish list.

This is the skeleton, meant to be written into a file and versioned alongside your project.

# study-plan.yml — 12-week template after "Database Fundamentals"
starting_point:
  completed: "Full course, 36 lessons (M1-M9)"
  i_can:
    - "Design and normalize a relational schema up to 3NF/BCNF"
    - "Multi-table queries, aggregation and subqueries"
    - "Read an EXPLAIN and decide on a simple index"
    - "Model documents in MongoDB according to access patterns"
  weak_points:               # <- you fill these in, be specific
    - "..."
    - "..."
  target_profile: "development | data_analysis | administration"

dedicated_resources:
  hours_per_week: 4          # be conservative: better to hit 3 than miss 8
  sessions: 2                # two of two hours yields more than eight of half an hour
  fixed_day_and_time: "Tuesday and Thursday, 19:00-21:00"

blocks:
  - id: 1
    weeks: "1-3"
    topic: "Advanced SQL: window functions and CTEs"
    resources:
      - "PostgreSQL manual: Queries + Functions and Operators"
      - "PGExercises, aggregation and advanced sections"
    deliverable: "10 analytical queries over BiblioRed, documented"
    success_criterion: "I write them without looking up the syntax"

  - id: 2
    weeks: "4-6"
    topic: "..."
    resources: ["..."]
    deliverable: "..."
    success_criterion: "..."

review:
  date: "at the end of week 6"
  questions:
    - "Have I hit the hours? If not, do I cut the plan or change the schedule?"
    - "Do the deliverables actually exist or have I only read?"
    - "Is the target profile still the right one?"

And this is a complete instance of the template, for an application development profile. It serves as an example of the level of specificity, not as a universal plan.

Weeks Topic Resources Deliverable
1-2 Consolidating SQL on real PostgreSQL All of PGExercises + PostgreSQL manual, Queries part Your own commented solutions, and three PGExercises queries rewritten against the BiblioRed schema
3-4 Window functions and common table expressions PostgreSQL manual, Functions and Operators; window functions chapter of "SQL Cookbook" A monthly BiblioRed loans report: ranking by branch, 7-day moving average and variation against the previous month, all in SQL
5-6 Data types and constraints in depth PostgreSQL manual, Data Types and Data Definition A review of the BiblioRed schema: timestamptz where appropriate, range types for room reservations with an exclusion constraint, and CHECK for the rules that today live only in the application
7-8 Indexes and performance "SQL Performance Explained" + manual, Indexes and Performance Tips A test bench: 500,000 generated loans, five slow queries, their plan before and after, and the justified index in each case
9-10 Transactions and concurrency for real Manual, Concurrency Control; transactions chapters of "Designing Data-Intensive Applications" Reproduce a write skew over the room reservations in two terminals, and fix it in two different ways (explicit locking and SERIALIZABLE), documenting the cost of each
11-12 Taking your own project to production Manual, Backup and Restore and Client Authentication; tools from 09-03 A public BiblioRed repository: schema with versioned migrations, roles and permissions, automated backup, reproducible test data and a README with the design decisions

How to spot a course that has not been touched for years (relevant when choosing your plan's resources): the engine version shown in the screenshots is several versions behind the current one; tools are used whose interface no longer resembles the real one; recent comments ask why a step no longer works; the syllabus ignores features that today are standard in the engine; and there is no visible update date anywhere. Any of those signals does not invalidate a theory course — normalization has not changed — but it rules out a product one.

Common Mistakes and Tips

Mistake 1: collecting courses. Enrolling in six courses and finishing none is a pattern so common that the platforms have a name for it. One at a time, with its deliverable, and until the deliverable exists the next one does not start.

Mistake 2: watching video without writing code. Watching someone write SQL produces the complete illusion of having learned, and that illusion dissolves the moment you have the cursor blinking on a blank query. Pause the video, type it yourself, and when it works, break it on purpose.

Mistake 3: searching a forum before the manual. The forum answer solves today's symptom; the manual teaches you where tomorrow's answer will be. And in a surprising percentage of cases, the forum answer is for a version that no longer exists.

Mistake 4: chasing the certificate instead of the project. It has been said already: a well-designed and documented schema in a public repository counts for more in a technical conversation than any completion diploma.

Mistake 5: studying an engine you are not going to use. Learning Cassandra "just in case" when you work with PostgreSQL is time that yields little. The legitimate exception is studying an engine from a different family in order to understand the contrast, which is exactly what module 3 of this course did: not to use Neo4j, but to see the relational model from the outside.

Mistake 6: not setting a time. "I'll study when I can" means not studying. Two fixed slots in the calendar, with a reminder, and treat them like a meeting.

Tip 1: always mix one slow resource with one fast one. A book under way (the 09-01 format) and a practice platform under way. The book gives judgment, the practice gives fluency, and each makes the other bearable.

Tip 2: write down what you learn. A short note per session — what I tried, what failed, what I understood — turns scattered hours into something you can consult. And if you dare to publish them, writing for others is the best detector of your own gaps in existence.

Tip 3: translate everything to your domain. The PGExercises exercises are about a sports club; rewrite three of them against BiblioRed. The translation is where the learning happens, because it forces you to understand the query instead of copying it.

Tip 4: use official syllabuses as checklists. A certification syllabus or a university course's table of contents is a very carefully worked inventory of what you need to know. Take advantage of them even if you do not enroll.

Exercises

These exercises are about planning and real practice, not about memory. They have no single correct answer: the solutions are reasoned model answers, and yours will be different and can be just as good if the reasoning holds up.

Exercise 1: build your twelve-week plan

Fill in the study-plan.yml template from section 9 with your real case. Minimum requirements:

  1. Three specific weak points, citing the lesson where they appeared (not "SQL", but "in 07-04 I couldn't solve the same member's previous loan without a correlated subquery").
  2. A justified target profile.
  3. Weekly hours you can genuinely keep to, with a fixed day and time.
  4. Four three-week blocks, each with named resources and a verifiable deliverable.
  5. One success criterion per block that is not "having read it".
  6. An intermediate review date and the questions you will ask yourself at it.

Exercise 2: evaluate three courses in twenty minutes

Find three online courses about databases or SQL: one from a university, one from a commercial platform and one free one from a community or a vendor. Without enrolling in any of them, in twenty minutes per course, fill in this table and decide which one you would take and why:

Criterion Course A Course B Course C
Is there a project carried across lessons?
Are decisions justified or is only syntax given?
Does it reach indexes, transactions or plans?
Is the engine version stated? Which one?
Are there graded exercises?
Is the last update visible?
Red flags detected
Verdict and why

Add a final sentence: which part of that course you would skip, given what you already know after this one.

Exercise 3: a week with the official documentation

For one week, forbid yourself from searching the internet for any PostgreSQL doubt: the official manual only. Choose one section from the table in section 3 that you have not worked through (for example, Data Types or Indexes), read it in full and produce:

  1. Five queries or DDL statements against BiblioRed that use something you have discovered in that section and did not know before.
  2. One schema change in BiblioRed that you would make in light of what you read, with its justification.
  3. Three things you thought you knew and that were wrong or incomplete.
  4. An honest assessment: how much slower was it than searching the internet, and was it worth it?

Solutions

These are model answers. What is assessed is the reasoning, not the agreement.

Solution 1 (model answer)

starting_point:
  weak_points:
    - "07-04: I can't solve 'the same member's previous loan' unaided;
       I suspect there are window functions I haven't mastered"
    - "06-03: I read the EXPLAIN but I don't predict whether the index will
       be used; I can't decide the column order of a composite index"
    - "08-03: I understand the outbox pattern but can't reason about its partial failures"
  target_profile: "development"

dedicated_resources:
  hours_per_week: 4
  sessions: 2
  fixed_day_and_time: "Tuesday and Thursday, 19:00-21:00"

blocks:
  - id: 1
    weeks: "1-3"
    topic: "Window functions and CTEs"
    resources:
      - "PostgreSQL manual: Queries + Functions and Operators"
      - "SQL Cookbook, window functions chapter"
      - "LeetCode, database section, window function problems"
    deliverable: "Monthly BiblioRed report in pure SQL: ranking by
                  branch, 7-day moving average and month-on-month variation"
    success_criterion: "I solve 'the same member's previous loan' with
                        LAG in under five minutes and without looking anything up"

  - id: 2
    weeks: "4-6"
    topic: "Indexes and execution plans"
    resources:
      - "SQL Performance Explained (Winand)"
      - "PostgreSQL manual: Indexes + Performance Tips"
    deliverable: "Test bench with 500,000 generated loans, five
                  slow queries, plan before/after and a justified index"
    success_criterion: "I predict the plan before running EXPLAIN and get it
                        right in four out of five cases"

  - id: 3
    weeks: "7-9"
    topic: "Transactions, isolation and integration patterns"
    resources:
      - "PostgreSQL manual: Concurrency Control"
      - "Designing Data-Intensive Applications, transactions chapters"
    deliverable: "Write skew reproduced in two terminals over the
                  room reservations, and fixed in two different ways"
    success_criterion: "I can explain in writing the cost of each fix"

  - id: 4
    weeks: "10-12"
    topic: "Taking my own project to production"
    resources:
      - "PostgreSQL manual: Backup and Restore, Client Authentication"
      - "Tools from lesson 09-03"
    deliverable: "Public BiblioRed repository with versioned migrations,
                  roles, automated backup, test data and a README of
                  design decisions"
    success_criterion: "Somebody else clones the repository and has the
                        database running with data in under ten minutes"

review:
  date: "at the end of week 6"
  questions:
    - "Do the first two deliverables exist or have I only read?"
    - "If I am below 4 h/week, I cut down to three blocks instead of four"

What makes this plan good is not its ambition, but three things: the weak points are cited by lesson, the deliverables are verifiable by a third party, and there is an explicit mechanism for cutting back at the review instead of abandoning.

Solution 2 (model answer)

A typical verdict, with the three usual profiles:

Criterion A: open university (CMU) B: commercial, massive platform C: free, from a vendor (MongoDB University)
Continuous project Yes, programming projects on an engine Yes, "a shop", superficial Yes, over a data set of its own
Decisions vs. syntax Decisions and foundations Almost all syntax Product decisions, syntax explained
Indexes/transactions/plans Yes, it is the core One stray video at the end Indexes and explain() yes; transactions, not much
Engine version Stated, by course edition Not stated Yes, and kept updated
Graded exercises Self-assessment and projects Multiple-choice quizzes Yes, with labs
Last update Visible, by academic year Not visible Visible
Red flags None; the risk is the level Title promising a job; syllabus ends at GROUP BY Natural bias toward the product
Verdict I would do it partially: only the lectures on indexes, processing and optimization I would not do it: it adds nothing above module 2 of this course I would do it if I am going to use MongoDB seriously

What I would skip in A: the programming projects, unless interested in building engines. In C: the introductory CRUD modules, already covered by 03-03 and 08-02.

The important conclusion of the exercise is usually this: after this course, most generalist SQL courses no longer give you anything, and your time yields far more in official documentation, graded practice and high-level university material.

Solution 3 (model answer, Data Types section)

1. Five new things applied to BiblioRed.

-- 1. A time range for the room reservations, instead of two separate columns
ALTER TABLE room_reservations ADD COLUMN period tstzrange;

-- 2. And the constraint that prevents overlaps declaratively:
--    what in module 7 was solved with manual checks
ALTER TABLE room_reservations
  ADD CONSTRAINT no_overlaps
  EXCLUDE USING gist (room_id WITH =, period WITH &&);

-- 3. timestamptz instead of timestamp for every real instant
ALTER TABLE loans ALTER COLUMN loan_date TYPE timestamptz;

-- 4. An enumerated type for the copy status, instead of free text
CREATE TYPE copy_status AS ENUM ('available','on_loan','repair','withdrawn');

-- 5. A reusable domain constraint for the ISBN
CREATE DOMAIN isbn13 AS text CHECK (VALUE ~ '^[0-9]{13}$');

2. A justified schema change. Replace start_date/end_date in room_reservations with a tstzrange plus an exclusion constraint. Reason: the rule "two reservations for the same room cannot overlap" goes from being a check in the application — which fails under concurrency, exactly the problem in 06-02 — to being an engine constraint, which never fails. It is the same principle as 02-06: if the rule is about integrity, it lives in the database.

3. Three things I thought I knew and got wrong.

  • I thought timestamp and timestamptz differed in that one stores the time zone. It does not store it: timestamptz normalizes to UTC on storage and converts to the session's zone on reading. That changes how you have to think about reports by time zone.
  • I thought varchar(n) was more efficient than text in PostgreSQL. It is not; the limit is a constraint, not an optimization, and adding it without a reason only generates future migrations.
  • I did not know range types or exclusion constraints existed, and I had been solving by hand a problem the engine solves declaratively.

4. Was it worth it? It was clearly slower: reading the whole section cost about three hours against the two minutes of a one-off search. It was worth it, and by a lot, because the three findings above cannot be searched for: I did not know they existed, and therefore I would never have formulated the query that would have found them. That is the argument for reading documentation in blocks instead of only consulting it: it solves the problem of the things you do not know you do not know.

Conclusion

This lesson can be summed up in four decisions.

The first: start with the official documentation, and study it in blocks. The PostgreSQL manual is not just a reference for looking up doubts: read section by section, with a query notebook of your own, it is the best available course on the engine, and it is free. The same goes for the MongoDB Manual, for the SQLite documentation — whose design documents are formative reading in themselves — and for Redis, Neo4j and Elasticsearch when you need them. The official documentation overrides any course.

The second: practice where you get corrected. PGExercises, SQLZoo, SQLBolt for the basics, HackerRank and LeetCode for volume and interviews. Choose the platform according to what stuck in your throat in module 7, and remember its limit: they teach you to query, not to design. Modules 4, 5 and 8 of this course have no equivalent platform, and their equivalent is designing things and submitting them to criticism.

The third: when you want depth, go to the university. The CMU Database Group's open material and Stanford's "Databases" series are at a level no commercial SQL course reaches, and they are the natural continuation of what 01-04 and 06-03 left hanging. Search for them by their exact title on the institution's site.

And the fourth, the one that decides whether the other three are worth anything: write your plan and give it deliverables. Four three-week blocks, one named resource and one thing built per block, two fixed slots in the calendar and a mid-way review to cut back without abandoning. Without deliverables there is no plan; with deliverables, in twelve weeks you have a public project worth more than any certificate.

And for the last time the warning that opens and closes this lesson: courses, prices, free tiers, certification catalogs and contents change without notice, and product courses age badly. Always check at the official source before enrolling or paying, and faced with any discrepancy between a course and the engine's documentation, the documentation is right.

You now have what to read and where to practice. The third vertex is missing: what with. Lesson 09-03 covers the tools you actually work with — the engines on your machine, the clients, the design tools, the migrations, the test data, the diagnostics and the backups — and includes the Docker Compose file that brings up in a single command the exact environment of the polyglot case study in 08-03.

© Copyright 2026. All rights reserved