Instiq
Chapter 2 · Database design & normalization·v1.0.0·Updated 7/10/2026·~15 min

What's changed: Initial version

2.5From logical design to physical design

Key points

Covers physical design, which translates a normalized logical design into an actual storage scheme; denormalization, which intentionally introduces redundancy for performance; and the design judgment of balancing the trade-off between normalization and denormalization, and between JOIN cost and redundancy.

The normalization covered in earlier sections is a matter of "logical design," pursuing the correctness of eliminating update anomalies. In actual operation, however, an over-normalized schema runs into the real-world wall of degraded read performance from excessive JOINs. At the final stage, a database designer must judge whether to translate the logical design directly into a physical storage scheme, or to deliberately denormalize part of it to prioritize performance. This section covers the distinction between logical and physical design, and denormalization as the final design judgment.

2.5.1The distinction between logical and physical design

  • Logical design is the process of expressing business requirements as an E-R diagram and a normalized relational schema. It is the stage that defines what to manage, independent of any particular DBMS product or concrete storage scheme.
  • Physical design is the process of translating the logical design into actual tables, indexes, partitions, and storage areas (tablespaces, and so on). It is the stage that defines how to store data and access it quickly, taking performance requirements, data-volume estimates, and access-pattern analysis as inputs.

2.5.2The denormalization trade-off

  • Denormalization is the deliberate reintroduction of redundant data into some tables, for performance reasons, of information that normalization had separated out (for example, redundantly copying a product name into the order-line table, even though it should properly be obtained via a JOIN to the product table each time). It is a trade-off that reduces the number of JOINs and improves read performance, at the cost of deliberately accepting the risk of update anomalies.
  • Denormalization is not "breaking normalization out of ignorance"—the correct procedure is to first establish a normalized logical design, and then, as a later-stage optimization judgment, deliberately choose where to break it based on performance requirements (read frequency, data volume, tolerable latency). A redundant column must be designed together with an operational mechanism (such as a trigger) that keeps it in sync with the original data on update.
Exam point

Most-tested: "logical design defines what (a normalized E-R diagram and relational schema)", "physical design defines how (tables, indexes, partitions)", and "denormalization is deliberate redundancy for performance". Watch out for the misconception that "denormalization is a failure of normalization"—denormalization is a deliberate trade-off chosen with full understanding of normalization, and it is always considered only after normalization, never before.

A database designer at an e-commerce company operates a normalized "order line" table (order-line ID, order ID, product ID, quantity) and a "product" table (product ID, product name, unit price). The homepage's "order history" screen is a high-frequency read operation, accessed tens of thousands of times a day, and every access joins the "order line" table with the "product" table to fetch the product name—causing a performance problem where the response is delayed by several seconds under peak load. The designer first considers denormalizing to avoid the JOIN, just for this screen: adding a redundant product-name column to the "order line" table, copying in the product name as of the moment the order was finalized. A key judgment arises here. Product names can change in the future, but if the business requires that "order history should display the product name as it was at the time of the order," this denormalization is actually the correct design (the copied product name carries a different meaning—a snapshot at that point in time—so it need not be updated even if the product name later changes). If instead the requirement were "the order history should always display the current product name," the denormalized column would additionally need a trigger or update process to keep it synchronized whenever the product name changes, and the complexity and bug risk of that synchronization process would have to be weighed. This designer judges that, since order history is by nature (including legally) a record of "what was true at the time of the order," denormalizing it as a snapshot that requires no synchronization is the most sensible design, and further adds an index, as physical design, on the frequently queried order-ID column—resolving the performance problem through both the normalization trade-off and physical design working together.

Design stageWhat it definesKey deliverable
Logical designExpresses business requirements as what to manageE-R diagram, normalized relational schema
Physical designDecides how to store data and access it quicklyTable definitions, indexes, partitions
DenormalizationDeliberately accepts redundancy for performanceRedundant column plus a sync design (whether needed depends on the business requirement)
Warning

Trap: "Denormalization is a design mistake stemming from a poor understanding of normalization" is wrong—denormalization is a later-stage optimization judgment, deliberately chosen based on performance requirements, after a normalized logical design has already been established. Also wrong: "a denormalized redundant column must always be kept in sync with the original data"—when the redundant data carries its own distinct meaning (a snapshot), such as "the product name at the time of the order," deliberately not synchronizing it can be the correct design.

Normalization vs denormalization.
Balancing performance and integrity

2.5.3Section summary

  • Logical design defines what to manage (a normalized E-R diagram and relational schema); physical design defines how (tables, indexes, partitions)
  • Denormalization is deliberate redundancy chosen with full understanding of normalization; it is applied selectively, as a step after normalization, based on performance requirements
  • When redundant data carries its own distinct meaning, such as a snapshot, denormalization that requires no synchronization can be the correct design

Sign in to track progress — Log in.

Quick check

(just a quick review)

Q1. An "order history" screen, which joins the "order line" table with the "product" table to fetch the product name, is suffering response delays under high-frequency access. Given the business requirement that "order history should display the product name as it was at the time of the order," what is the most appropriate response?

Q2. In the scenario from the previous question, if the business requirement instead becomes "the order history should always display the current product name," what additional design is needed to operate the denormalized product-name column?

Q3. A database designer proposes to "skip normalization as too much trouble, and from the start do only a physical design with redundant columns added to every table, prioritizing performance." Which is the most appropriate evaluation of this approach?

Check your understandingPractice questions for Chapter 2: Database design & normalization