I learned a lot about the inner workings of databases by reading DDIA. A database organizes data based on some database management system and basically takes data presented by application code and stores it on disk in a data center, and reserves this data when queried. At the end of the day, a database is just a cache of its Logs.

Types

Systems of Record

A system of record is a source of truth which holds an authoritative version of your data. It is written here and each fact is represented once.

Derived Data Systems

This is the result of taking some existing data and processing it in some way. This can be recreated from the original source (system of record). A cache is an example.

Denormalization

This is the idea of separating the from in which data is written and read, allowing for several different read views. This is known as command query responsibility segregation. Note that data does not need to be written in the same format that it is queried. Debates about normalization and denormalization become irrelevant when you maintain data from a write-optimized event log to a read-optimized application state.

Note

It is important to know in your system, what data is a system or record and what data is derived from other sources to remove confusion.

Federated DBs

This is an interface to provide a unified query across several underlying storage engines and processing methods.

Unbundled DBs

This tries to provide a synchronized write across several systems which is like unbundling a databases index maintenance.