# Databases and data management

# Database characteristics

<p class="callout info">This article was originally published at [https://gist.github.com/joepie91/f9df0b96c600b4fb3946e68a3a3344af](https://gist.github.com/joepie91/f9df0b96c600b4fb3946e68a3a3344af).</p>

<p class="callout warning">**NOTE:** This is simplified. However, it's a useful high-level model for determining what kind of database you need for your project.</p>

### Data models[<svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://gist.github.com/joepie91/f9df0b96c600b4fb3946e68a3a3344af#data-models)

- **Documents:** Single type of thing, no relations
- **Relational:** Multiple types of things, relations between different types of things
- **Graph:** Single or multiple types of things, relations between different things of the *same* type

### Consistency models[<svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://gist.github.com/joepie91/f9df0b96c600b4fb3946e68a3a3344af#consistency-models)

- **Strong consistency:** There is a single canonical view of the database, and everything connecting to any node in the database cluster is guaranteed to see the same data at the same moment in time.
- **Eventual consistency:** There can be multiple different views of the database (eg. different nodes in the cluster may have a different idea of what the current state of the data is), but once you stop changing stuff, they will eventually converge into a single view.
- **No consistency:** There's no guarantee that all nodes in the cluster will ever converge to the same view, whatsoever.

### Schemafulness[<svg aria-hidden="true" class="octicon octicon-link" height="16" version="1.1" viewbox="0 0 16 16" width="16"></svg>](https://gist.github.com/joepie91/f9df0b96c600b4fb3946e68a3a3344af#schemafulness)

- **Schemaful:** You know the format (fields, types, etc.) of the data upfront. Fields may be optional, but every field you use is defined in the schema upfront.
- **Schemaless:** You have no idea what the format is going to be. This is rarely applicable, and only really applies when dealing with storing data from a source that doesn't produce data in a reliable format.

# New Page