🏛 Data Modeling

1. Conceptual Data Model

Capture the business view first — just entities and relationships, no attributes.

What is a Conceptual Data Model?

A Conceptual Data Model (CDM) is the simplest, highest-level view of a database design. It contains only:

No attributes. No keys. No data types. No technical detail of any kind. The audience is business stakeholders — product managers, business analysts, domain experts — who need to confirm "yes, that's how our business works."

Why bother with a CDM? Because the most expensive mistakes happen when developers and the business disagree on what entities even exist. If "Customer" in marketing means something different from "Customer" in billing, every downstream design will fight that mismatch forever. The CDM forces the conversation early.

Our example: a small e-commerce system

We'll model an e-commerce platform. After interviewing the business, we've identified five core entities:

And the relationships:

Building it in ERWIN — step by step

1

Create a new model in Logical mode

In the New Model dialog:

  • Model Type: Logical (we'll switch back and forth later)
  • Database: leave empty for now (we'll set it in the Physical lesson)
  • Notation: IE (Information Engineering) — the default, used by most enterprises

Click OK. You'll see a blank canvas.

2

Place your first entity

In the toolbox, click the Entity icon (looks like a rounded rectangle). Then click anywhere on the canvas to drop one. A new entity called "E/1" appears.

Press F2 (or just type) and rename it to Customer. Click anywhere to deselect.

Pro tip ERWIN supports spaces in logical entity names but not in physical table names. Use natural names here — "Order Line Item" not "OrderLineItem". The physical model will normalize them later.
3

Place the rest of the entities

Repeat for the other four entities: Order, Product, Category, Address. Position them on the canvas so they're not overlapping.

Don't worry about layout aesthetics — ERWIN has auto-layout (Diagram → Layout → Auto Layout) that you can run later.

At this point your canvas should look something like:

┌──────────┐ ┌──────────┐ ┌──────────┐ │ Customer │ │ Order │ │ Product │ └──────────┘ └──────────┘ └──────────┘ ┌──────────┐ ┌──────────┐ │ Address │ │Category │ └──────────┘ └──────────┘
4

Add your first relationship

In the toolbox, click the Identifying Relationship icon (solid line) — this represents a strong dependency. (We'll discuss non-identifying soon.)

Then:

  • Click on Customer (the parent — the "one" side)
  • Then click on Order (the child — the "many" side)

A line appears connecting them, with a dot on the Order side. The dot represents "many" — so this reads as "one Customer places many Orders."

5

Set cardinality on the relationship

Right-click the relationship line and choose Relationship Properties (or double-click it).

You'll see a dialog with options for Cardinality:

  • One or many (default) — parent has zero or many children. Most common.
  • One or zero — parent has zero or exactly one child (1:1 optional)
  • Exactly one — parent has exactly one child (1:1 mandatory — rare)
  • Many (P) — parent has one or many (NOT zero) children

For Customer → Order, "One or many" is correct: a customer can have zero orders (just signed up) or many.

Also set the Verb Phrase — this is the human-readable description of the relationship. From Customer's side, type "places". From Order's side, type "is placed by".

6

Identifying vs Non-identifying relationships

ERWIN has two styles for parent-child relationships:

Identifying (solid line)

The child cannot exist without the parent. The parent's PK becomes part of the child's PK. Example: an OrderLine can't exist without an Order.

Non-identifying (dashed line)

The child can exist independently but references the parent. The parent's PK becomes a regular FK in the child, not part of its PK. Most foreign keys are non-identifying.

For Customer → Order, use a non-identifying relationship (dashed line). An Order has its own OrderID and could conceptually exist without being tied to a specific Customer (e.g., guest checkouts).

To convert: right-click the line → Relationship Properties → Type → Non-identifying.

7

Add the remaining relationships

Add these one by one (non-identifying for all):

  • Customer → Address ("has" / "belongs to") — one customer, many addresses
  • Order → Address ("ships to" / "is shipping address for") — one order, one address
  • Category → Product ("contains" / "belongs to") — one category, many products
8

Handle the many-to-many: Order ↔ Product

An order can contain many products, and a product can appear in many orders. This is a many-to-many (M:N) relationship.

In the toolbox, click the Many-to-Many relationship icon, then click Order, then Product. You'll see a line with a dot at both ends.

Right now this is allowed in the CDM. But when we move to logical/physical, ERWIN will force us to resolve it by inserting a bridge entity (we'll call it OrderLine).

Many-to-many = always a bridge Relational databases can't directly store M:N relationships. They get resolved into two 1:N relationships with a junction (bridge) table in the middle. ERWIN will do this for you when you move to logical — but it's worth knowing what's happening underneath.
9

Document the entities

Even though a CDM has no attributes, you can still document what each entity means — and you absolutely should.

Double-click any entity (e.g., Customer). In the Property Editor:

  • Click the Definition tab
  • Type a clear description: "A person or business that has placed an order or has a registered account. Includes prospects who registered but haven't yet placed an order."
  • Click OK

This definition will travel with the model into Logical and Physical, and gets included when you generate documentation. It's how you settle "what counts as a Customer" debates years from now.

10

Auto-layout and save

Run auto-layout to clean up the diagram:

Save your model:

Take a screenshot or export as image — you've completed your first Conceptual Data Model.

What's in our CDM now

┌──────────┐ (places) ┌──────────┐ (ships to) ┌──────────┐ │ Customer │─────────────│ Order │───────────│ Address │ └──────────┘ └──────────┘ └──────────┘ │ │ M:N │ │ (has) │ │ │ │ │ └────────────────────────┼────────────────────────┘ │ ┌─────┴────┐ │ Product(belongs to) ┌──────────┐ └──────────┘─────────────────│Category │ └──────────┘

Review checklist

What to do next Walk your CDM through with a business stakeholder. If they say "wait, can a Customer have multiple billing addresses?" — that's the kind of question you want to surface NOW, not after writing 50,000 lines of code. When the CDM is signed off, move to the Logical Model where we add attributes and keys.