Objective. Students will apply first, second, and third normal form rules to decompose a denormalized dataset and produce a correct ER diagram.
This lesson, its worked examples and its practice questions has not yet been verified by an industry-certified professional or by a certification or approval body. It is a study draft and may contain errors. Do not use it as instructions for work on a job site or on live equipment. Always follow your instructor, your supervising professional, and current official references and regulations.
VoTechWorks program approval and accreditation are still in progress. Credentials are issued only by the certifying bodies named in each program, after their own exams.
A poorly designed database causes real problems: duplicate data wastes storage, inconsistent updates corrupt records, and queries become needlessly complex. Normalization is the formal process of organizing a relational database so that data is stored in exactly one place and every piece of information depends logically on the correct key. Entity-Relationship (ER) modeling is the visual technique used to plan that structure before writing a single line of SQL.
These two skills—normalization and ER modeling—are foundational for every role that touches a database, from back-end developer to data analyst.
Before applying normal forms, you need to recognize what goes wrong without them. There are three classic anomalies:
Normalization eliminates these anomalies by ensuring that each table represents exactly one subject.
A table is in First Normal Form when:
1. Every column holds only atomic (indivisible) values—no comma-separated lists or repeating groups inside a single cell.
2. Every row is unique, identified by a primary key.
Example violation: An `Orders` table with columns `OrderID`, `CustomerName`, `Items` where `Items` contains `"Keyboard, Mouse, Monitor"`. The `Items` column is not atomic. To reach 1NF, move each item to its own row in a separate `OrderItems` table linked by `OrderID`.
A table is in Second Normal Form when it is already in 1NF and every non-key column is fully functionally dependent on the entire primary key—not just part of it. This rule only applies to tables with a composite primary key.
Example violation: An `OrderItems` table with primary key `(OrderID, ProductID)` and a column `ProductName`. `ProductName` depends only on `ProductID`, not on the combination of `OrderID` and `ProductID`. This is a partial dependency. To reach 2NF, move `ProductName` to a separate `Products` table keyed by `ProductID`.
A table is in Third Normal Form when it is already in 2NF and no non-key column depends on another non-key column—there are no transitive dependencies.
Example violation: An `Orders` table with columns `OrderID` (PK), `CustomerID`, `CustomerCity`, `CustomerZip`. `CustomerCity` depends on `CustomerZip`, which is not the primary key. To reach 3NF, move `CustomerZip` and `CustomerCity` to a `Customers` table keyed by `CustomerID` (or a `ZipCodes` lookup table).
After applying 3NF, each table represents one entity, and every non-key column describes only that entity.
An ER diagram is a blueprint of your normalized database. It shows entities, their attributes, and how they relate to one another.
Entities are the major subjects of the database—things worth storing data about, such as Customer, Order, Product, and Category. Each entity becomes a table.
Attributes are the facts recorded about an entity. The attribute that uniquely identifies each row is the primary key (usually underlined or marked PK in diagrams).
Relationships describe how entities connect. A Customer places Orders; an Order contains Products. Relationships are labeled with a verb and decorated with cardinality notation to show how many instances of one entity relate to instances of another.
Crow's-foot notation uses symbols at each end of a relationship line:
Common cardinality patterns:
Always label the minimum and maximum cardinality (e.g., "zero or one" vs. "one and only one") to distinguish mandatory from optional participation.
Using draw.io or Lucidchart:
1. Create one rectangle (entity box) for each table identified after normalization.
2. List attributes inside the box; mark the primary key.
3. Draw a line between related entities.
4. Place crow's-foot symbols at the correct ends.
5. Label the relationship with a verb phrase.
Check your diagram against your normalized tables. Every foreign key in a table should correspond to a relationship line on the diagram.
Errors in database design are expensive to fix after data accumulates. Always validate your ER diagram against the business rules in the requirements document, not just against your intuition. Peer review—checking a colleague's diagram—catches assumptions you made silently. When in doubt, ask a stakeholder to confirm the business rule before encoding it in a schema.
Answer each question, then check it. Nothing is recorded; this is your own practice.
A free tech program — complimentary, as our commitment to get America working. Help us build VoTechWorks. Tell us what works, what doesn’t, and what you want to learn.