Database Design for Google Calendar: A Tutorial
Overall reception of the tutorial
- Many found it a clear, concrete guide to modeling a non-trivial domain.
- The step of defining attributes as questions is widely praised for surfacing ambiguity and aligning with customer needs.
- Some note that modeling like this is rarely taught well, and they see it as valuable for both juniors and experienced developers.
“Anchor” terminology and modeling concepts
- Several commenters initially find “anchor” a strange term but end up appreciating it because it avoids overloaded terms like “entity” or “aggregate root.”
- Examples of what is and isn’t an anchor are seen as more helpful than abstract definitions.
- There is agreement that logical modeling (first) is database-independent and should precede any physical schema work.
Recurring events, edits, and complexity of time
- Recurrence and “what am I doing today?” queries are described as surprisingly hard, especially with exceptions and edits.
- Some advocate generating concrete instances for each recurrence to better handle per-occurrence exceptions; others prefer rule-based storage for efficiency.
- Time zones and daylight savings are viewed as a major source of complexity.
- One camp: store a timezone with each date/time; UTC alone is not enough for future events.
- Another camp: store in UTC and convert, but acknowledge that future rules can change.
- Real-world edge cases (ships crossing zones, overlapping jurisdictions with different DST rules) are cited as particularly nasty.
SQL vs NoSQL for calendars
- Strong sentiment that a calendar’s highly relational nature (users, events, time zones, related events) fits relational databases better.
- Criticism of document stores for poor joins and rigidity in evolving access patterns; suggested pattern: start with SQL, move to NoSQL only when access patterns and scale demand it.
- Counterpoint: “NoSQL” is not monolithic; some systems have strong indexing, transactions, and joins. Many large sites use NoSQL selectively.
- Note that Google Calendar is reportedly backed by a Spanner-like system, blurring SQL/NoSQL boundaries.
iCalendar as storage vs interchange
- Some propose using iCalendar blobs plus fast scanning instead of a schema.
- Others argue iCalendar is an interchange format from the 1990s, not ideal as a primary storage model, and lacks normalized structures and stable identifiers.
Difficulty and interviewing
- Multiple commenters describe calendar/booking and datetime questions as deceptively hard.
- Consensus: use solid libraries; don’t reimplement time, time zones, or recurrence logic from scratch.