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
- How to choose an online course without wasting your time
- Official documentation as the first resource
- How the PostgreSQL manual is studied
- The documentation of the other engines
- Interactive practice platforms
- Structured courses from universities and platforms
- Blogs, channels and newsletters for keeping current
- Certifications: who they are for and who they are not
- Your personal study plan: a 12-week template
- Common Mistakes and Tips
- Exercises
- Conclusion
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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 Winand — Use 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.
- 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.
- 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:
- 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").
- A justified target profile.
- Weekly hours you can genuinely keep to, with a fixed day and time.
- Four three-week blocks, each with named resources and a verifiable deliverable.
- One success criterion per block that is not "having read it".
- 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:
- Five queries or DDL statements against BiblioRed that use something you have discovered in that section and did not know before.
- One schema change in BiblioRed that you would make in light of what you read, with its justification.
- Three things you thought you knew and that were wrong or incomplete.
- 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
timestampandtimestamptzdiffered in that one stores the time zone. It does not store it:timestamptznormalizes 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 thantextin 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.
Database Fundamentals
Module 1: Introduction to Databases
- Basic Database Concepts
- Types of Databases
- History and Evolution of Databases
- Database Management Systems and Architecture
Module 2: Relational Databases
- The Relational Model
- The SQL Language
- Basic SQL Operations
- Multi-Table Queries: JOINs and Subqueries
- Data Aggregation and Grouping
- Referential Integrity
Module 3: Non-Relational Databases
- Introduction to NoSQL
- Types of NoSQL Databases
- Data Modeling in NoSQL
- Comparing Relational and Non-Relational Databases
Module 4: Schema Design
- Schema Design Principles
- Entity-Relationship (ER) Diagrams
- Transforming ER Diagrams into Relational Schemas
- Data Types and Constraints
Module 5: Normalization
Module 6: Transactions, Performance, and Security
- Transactions and ACID Properties
- Concurrency and Isolation Levels
- Indexes and Query Optimization
- Security, Permissions, and Backups
Module 7: Practical Exercises
- SQL Exercises
- Schema Design Exercises
- Normalization Exercises
- Advanced Query and Transaction Exercises
Module 8: Case Studies
- Case Study: Relational Database
- Case Study: Non-Relational Database
- Case Study: Polyglot Persistence
