What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Database normalization organizes relational data so each fact is stored in an appropriate place and relationships are represented through keys. It reduces avoidable duplication that can cause conflicting updates, while making clear that a good schema must still reflect the facts an application needs.
What is database normalization?
Normalization is a process for designing relational tables around keys and dependencies: which attributes identify a row, and which facts depend on those identifiers. If the same customer address is copied into customer, order, shipping, invoice, and collections records, changing the address may require several updates. Miss one, and the database can disagree with itself. A single authoritative customer address is easier to maintain. Microsoft’s database design guidance describes normalization as most useful after the information items have been identified and a preliminary design exists.
Redundancy can also create three kinds of anomalies: an update anomaly (copies diverge), an insertion anomaly (a fact cannot be recorded without unrelated data), or a deletion anomaly (removing one fact unintentionally removes another). Normalization helps prevent these problems by separating facts according to their dependencies. It does not decide which facts the application needs; that requires understanding the business rules and use cases.
What are the normal forms in DBMS?
First, consider a student taking multiple classes. A table with columns such as Class1, Class2, and Class3, or a single cell containing a list of classes, makes relationships awkward to query and update. A normalized design records each student-course association as a row, identified by a key such as the combination of StudentID and CourseID. The usual progression is 1NF, 2NF, then 3NF; BCNF is a further dependency check for some schemas.
#1 Best Overall
First normal form (1NF): represent values and repeating relationships in rows
In the introductory rule, each row-column intersection contains a single value rather than a repeating group or list, and repeating sets of columns are avoided. “Single value” is understood in the context of the application’s data model: a value that is meaningful as one field for that application may contain structured detail, but a list of independently meaningful relationships should generally be represented as rows.
For the student-course example, store one student-course pairing per row rather than numbered class columns. A key must distinguish each association, often a composite key made from student and course identifiers. This makes it possible to add another course without changing the table’s shape.
Second normal form (2NF): remove dependencies on only part of a composite key
2NF matters when a table has a composite key. Every non-key fact should depend on the whole key, not just one component. Imagine an order-line table keyed by (OrderID, ProductID) that also stores ProductName. The product name depends on ProductID, not on the complete order-and-product pairing. Keeping it on every order line repeats the same product fact.
Move product attributes such as the name to a Products table keyed by ProductID, and keep ProductID on the order line as a reference. Each order line still describes the product ordered, but the product name has one authoritative home. A table with a single-attribute key cannot have a dependency on only part of that key, so it has no partial-dependency problem of this kind; it can still violate 3NF.
Do these 3 things before closing this tab:
1Clear out junk files and repair common Windows errors2Scan for outdated or missing drivers - takes under a minute3Repair Windows errors before they cause bigger problemsThird normal form (3NF): remove dependencies between non-key facts
A common teaching shorthand says that non-key facts should depend on “the key, the whole key, and nothing but the key.” The dependency version is more precise: non-key attributes should not depend transitively on a key through another non-key attribute. For instance, suppose a product table contains ProductID, Name, SRP, and Discount, and the business rule says the discount is determined by the SRP. Then Discount depends on SRP, not independently on the product identifier. If that rule is genuine, model the price-to-discount relationship separately or otherwise represent the dependency explicitly.
This is not a rule that every repeated value deserves its own lookup table, nor that derived values can never be stored. The schema should reflect real business dependencies and the application’s needs. A value that only happens to repeat may not be functionally determined by another attribute.
Rank #3
Boyce–Codd normal form (BCNF): check every determinant
BCNF is a stricter check than 3NF: every determinant (an attribute or set of attributes that determines another fact) must be a candidate key. It can reveal remaining anomalies in a 3NF table when there are multiple candidate keys and a dependency is driven by a determinant that is not itself a candidate key. It is useful for those cases, not a mandatory destination for every application schema.
What normalization helps with—and what it costs
- Fewer conflicting copies: storing a fact once reduces the chance that one copy changes while another does not.
- Safer changes: separating different kinds of facts can prevent a change to one entity from accidentally altering another.
- More tables and relationships: the design may be less convenient to inspect at a glance, and queries may need joins to assemble a result.
- Workload-dependent performance: more joins are not proof that a normalized database is inherently slow. The impact depends on the database, query, data size, indexes, and workload.
A 2025 arXiv preprint reports that its IMDb/PostgreSQL experiment reduced on-disk database size by 10% when moving from 1NF to 2NF. In that same specific case, increasing normalization also meant more tables and rows overall and greater query complexity. The authors characterize the results as case-specific, so the figure is not a general prediction for other data or database systems. See the study and its stated scope.
Recommended Free Tools
Microsoft’s legacy Access guidance likewise treats table proliferation as a practical consideration, particularly for small databases, rather than establishing that normalized designs are universally impractical. The right balance depends on how often facts change and how the application uses them; see Microsoft’s normalization description.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.When should you normalize or denormalize a database?
Start with normalized entities, keys, and dependencies that describe the business facts clearly. Consider denormalization only when a representative workload shows that a specific read path is a meaningful bottleneck. Denormalization deliberately stores redundant or cached data, often to avoid joins; it trades simpler or faster reads in some cases for the work and risk of keeping copies current.
For example, an application might store the average rating of a blog’s posts on the Blog row instead of recalculating it for every request. That cached aggregate is useful only if its freshness behavior fits the application. Microsoft’s EF Core performance guidance discusses this pattern and the need to synchronize cached values.
- Establish a clear baseline. Model the entities, keys, and functional dependencies first; verify that the schema reflects the business rules.
- Measure the actual bottleneck. Use representative data and the application’s real query or reporting workload, rather than assuming a join is expensive.
- Compare alternatives. Depending on the system, an index, a query change, a cache, a materialized result, or a maintained redundant field may address the problem.
- Specify the consistency plan. For any duplicated value, define when it is updated, how updates behave transactionally, how existing rows are backfilled, and how the copy can be recovered or recalculated.
- Re-measure. Confirm that the change helps the target workload without making write costs or stale data unacceptable.
Normalization is a design discipline, not a promise of the fastest possible query. Denormalization is an intentional optimization, not a shortcut around understanding dependencies. The decision should follow evidence from the system the schema serves.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




