Chapter 01 · From Requirements to Data Models

A Repeatable Modeling Workflow and First Case Study

Apply a repeatable modeling workflow to the WorkshopHub case study and produce the first end-to-end conceptual and relational design.

Beginner55–75 minutesGuided case studyLast reviewed: August 2026

Learning outcomes

This lesson closes Chapter 1 by turning the previous ideas into a repeatable workflow. You will take a small WorkshopHub requirements set from domain language to a first conceptual model and then to a starter relational schema. Later chapters will revisit and improve this design as you learn keys, relationships, normalization, transactions, indexes, workload analysis, and evolution.

01

Apply a step-by-step modeling workflow instead of designing tables ad hoc.

02

Create a glossary, requirements matrix, candidate entity list, and relationship sketch.

03

Map the first conceptual design into a starter relational schema.

04

Record unresolved questions for later chapters rather than pretending the first model is final.

The modeling loop

Real data modeling is iterative. You rarely move through the steps exactly once. New questions appear when you draw relationships; normalization reveals hidden dependencies; query analysis reveals missing historical facts. A useful default loop is:

  1. Define scope and goals.
  2. Build a domain glossary.
  3. Collect data requirements, examples, and reports.
  4. Identify candidate entities and their identities.
  5. Identify relationships, cardinality, optionality, and history.
  6. Record rules and invariants.
  7. Create a conceptual model.
  8. Map to a logical relational model.
  9. Normalize and validate against requirements.
  10. Study workloads and choose physical structures.
  11. Review with domain experts and developers.
  12. Implement, test with real scenarios, and evolve.
Iteration is expected

Changing a model after learning something new is not failure. Hiding uncertainty to avoid changing the model is failure.

Case-study requirements

WorkshopHub needs a first operational database with the following agreed requirements:

  • A customer can register multiple assets.
  • An asset belongs to one current customer in version 1.
  • An asset is identified internally and also has a manufacturer plus serial number.
  • A work order is opened for exactly one asset.
  • A work order can have zero or more technician assignments over time.
  • Assignments record start time, optional end time, and role.
  • A work order can consume many parts; quantity and charged unit price must be preserved at the time of use.
  • Operations needs queues by status and opening time.

Step 1: glossary before schema

TermWorking definition
CustomerPerson or organization currently responsible for registered assets.
AssetPhysical item that can receive repair work.
Work orderOperational record authorizing and tracking repair work for one asset.
AssignmentA time-bounded association between a technician and work order.
Part usageA recorded quantity of a part consumed or charged on a work order.

Glossaries prevent a subtle source of defects: two teams using the same word with different meanings.

Step 2: conceptual model

The two associative concepts—assignment and part usage—are not merely “join tables.” They carry their own facts. Assignment has time and role. Part usage has quantity and charged unit price. This is an important modeling pattern you will revisit in Chapter 3.

Step 3: starter logical schema

model · example
Customer(  customer_id PK,  full_name,  email)Asset(  asset_id PK,  customer_id FK -> Customer,  manufacturer,  serial_number,  UNIQUE(manufacturer, serial_number))WorkOrder(  work_order_id PK,  asset_id FK -> Asset,  status,  opened_at,  closed_at)Technician(  technician_id PK,  full_name)WorkOrderAssignment(  work_order_id FK -> WorkOrder,  technician_id FK -> Technician,  started_at,  ended_at,  role)Part(  part_id PK,  sku UNIQUE,  description)PartUsage(  work_order_id FK -> WorkOrder,  part_id FK -> Part,  quantity,  charged_unit_price)

This is intentionally not the final schema. We have not yet resolved every key choice, normalization question, temporal rule, or physical access path.

Step 4: a runnable SQLite prototype

A prototype turns modeling decisions into executable constraints. The following subset is enough to test several important rules:

sql · example
PRAGMA foreign_keys = ON;CREATE TABLE customer (    customer_id INTEGER PRIMARY KEY,    full_name   TEXT NOT NULL,    email       TEXT NOT NULL UNIQUE);CREATE TABLE asset (    asset_id      INTEGER PRIMARY KEY,    customer_id   INTEGER NOT NULL,    manufacturer  TEXT NOT NULL,    serial_number TEXT NOT NULL,    FOREIGN KEY (customer_id) REFERENCES customer(customer_id),    UNIQUE (manufacturer, serial_number));CREATE TABLE work_order (    work_order_id INTEGER PRIMARY KEY,    asset_id      INTEGER NOT NULL,    status        TEXT NOT NULL                  CHECK (status IN ('open','scheduled','in_progress','closed','cancelled')),    opened_at     TEXT NOT NULL,    closed_at     TEXT,    FOREIGN KEY (asset_id) REFERENCES asset(asset_id));CREATE TABLE technician (    technician_id INTEGER PRIMARY KEY,    full_name     TEXT NOT NULL);CREATE TABLE work_order_assignment (    work_order_id  INTEGER NOT NULL,    technician_id  INTEGER NOT NULL,    started_at     TEXT NOT NULL,    ended_at       TEXT,    role           TEXT NOT NULL,    PRIMARY KEY (work_order_id, technician_id, started_at),    FOREIGN KEY (work_order_id) REFERENCES work_order(work_order_id),    FOREIGN KEY (technician_id) REFERENCES technician(technician_id),    CHECK (ended_at IS NULL OR ended_at >= started_at));

Step 5: validate with scenarios, not only diagrams

Try to represent normal cases, edge cases, and forbidden cases.

ScenarioExpected resultQuestion raised
Customer registers two assets.Two asset rows reference one customer.Works with current model.
Two manufacturers use serial number 1001.Both allowed.Composite uniqueness fits agreed rule.
Same manufacturer repeats serial 1001.Rejected.Unique constraint enforces invariant.
Technician is reassigned after shift change.New assignment row; old row gets end time.Need rule for overlapping assignments?
Asset changes owner.Current model overwrites customer_id.History is lost; assumption A-07 must be revisited if history becomes required.

Step 6: record open questions

A first model should end with a list of questions, not with false certainty.

  • Can multiple technicians be actively assigned at the same time?
  • Should technician role be free text or controlled reference data?
  • Do we need ownership history for assets?
  • Can a work order be reopened after closure?
  • Does part usage need technician/task attribution?
  • Which queries must remain fast when the database contains millions of work orders?

Each question previews later chapters. Cardinality and associative entities appear in Chapters 2–5, normalization in Chapters 7–9, transactions in Chapter 10, indexes and workload design in Chapters 11–12, history in Chapter 14, and evolution in Chapter 16.

Chapter checkpoint

Design exercise

  1. Add the requirement “customers may have multiple contact methods.” Decide whether contact method is an attribute or entity and justify your choice.
  2. Add “a work order can contain several repair tasks.” Decide whether tasks need identity and lifecycle.
  3. Write three invariants the database should protect.
  4. Write two questions you would ask before choosing indexes.
Review guidance

Multiple contact methods often become a child entity when each method has type, value, verification state, priority, or history. Repair tasks usually deserve identity if they have status, technician assignment, labor, parts, or timestamps. Example invariants include positive part quantity, valid work-order status, and no assignment ending before it starts. Index questions should ask which filters/sorts/joins dominate and what data volume/selectivity is expected.

Summary and next chapter

You now have a complete beginner workflow: define scope, establish vocabulary, extract requirements, expose assumptions, discover concepts and relationships, state invariants, sketch a conceptual model, map it logically, prototype constraints, and validate with scenarios. Chapter 2 begins the deeper design work by teaching how to discover entities, attributes, identifiers, and special entity types precisely.

References

  • Ramez Elmasri and Shamkant B. Navathe, Fundamentals of Database Systems.
  • Thomas Connolly and Carolyn Begg, Database Systems.
  • C. J. Date, Database Design and Relational Theory.
  • Peter P. Chen, “The Entity-Relationship Model—Toward a Unified View of Data,” 1976.

Keep knowledge open

Help the academy stay free and grow.

If these tutorials save you time, a small donation supports new lessons, technical review, diagrams, examples, and long-term maintenance.

ETHEthereum / ERC-20 only
0x716c4Ab160C4B66F31a28AE2448BfF68fc3a2ef0

Send only assets compatible with the Ethereum/ERC-20 network. Do not send TRC-20/TRON assets.