# Database Normalization

> A technique for decomposing tables by their functional dependencies into normal forms, so no column depends on anything but its key.

Record: `architecture:database-normalization`
Kind: technique
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: recommended
Scope: schema, data modeling, integrity
Canonical: https://banes-lab.com/ontology#architecture-database-normalization

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Principle of Least Surprise](https://banes-lab.com/records/architecture/principle-of-least-surprise.md) and before [Security by Design](https://banes-lab.com/records/architecture/security-by-design.md).

## Repair

- Refactored by: Normalize to 3NF, extracting dependent attributes into their own relations
- Detected by: the same fact stored in multiple places drifting out of sync
- Violated by: repeating groups and transitively-dependent columns duplicated across rows
- Measured by: update-anomaly incidents and redundant-column count
- Enforced by: schema review

## Requires

- [Functional Dependencies](https://banes-lab.com/records/lexicon/functional-dependencies.md)

## Reinforces

- [Single Source of Truth](https://banes-lab.com/records/architecture/single-source-of-truth.md)
- [Data Integrity](https://banes-lab.com/records/lexicon/data-integrity.md)

## Enables

- [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md)
- [Non-Redundant Storage](https://banes-lab.com/records/lexicon/non-redundant-storage.md)

## Conflicts with

- [Duplicated Denormalized Columns](https://banes-lab.com/records/lexicon/duplicated-denormalized-columns.md)

## In tension with

- [Read Performance](https://banes-lab.com/records/lexicon/read-performance.md)

## Tensions

- [Database Normalization / Read Performance](https://banes-lab.com/records/tension/database-normalization-read-performance.md)

## Severity

- [recommended](https://banes-lab.com/records/vocabulary/severity-recommended.md)

## Category

- [Schema / Canonical Data / Semantics](https://banes-lab.com/records/architecture-category/schema-canonical-data-semantics.md)

## Linked from

- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/principles/architecture-category-schema-canonical-data-semantics.md)
- [Quality Attributes](https://banes-lab.com/ontology/lexicon/lexicon-category-quality-attributes.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/lexicon/lexicon-category-schema-canonical-data-semantics.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
