Skip to content

ignatius · data modeling · works with or without noorm

Agree on the data model
before anyone writes the SQL

Analysis costs less than rebuilding a system. ignatius turns a folder of markdown into a picture of the plan: what captures data, the shape it takes, why each table exists, the rules it follows, and who outside the system sends it and receives it.

DownloadTry it in two minutes

one binary · macOS, Linux, Windows

01 · Movement

Do you know how data moves through your system, and who produces it?

A data flow diagram answers both. It shows who produces data, including people outside the technical system, which process moves or transforms it, and which store keeps it: a table, a cache, a log file, a paper form. Most teams skip this step and draw logic flowcharts, which show decisions, not data.

logic flowchartwhat teams draw

What the code decides. No table, log file, or person appears in it.

data flow diagram · order to cashrendered by ignatius

Every place an order's data enters, rests, and leaves, including the gateway log that no table holds.

Read each process as an operation your database must support. Place order takes the customer's order request and product prices and writes sales_order and order_line. That is place_order(), specified before anyone writes the SQL or the code that calls it.

02 · Relationships

Have you ever visualized your entity relationships clearly?

An ER diagram lists every column and buries the relationships under them. ignatius draws the relationships alone: entities by name, joined by the business verbs that relate them. Click an entity to open its columns, keys, example rows, and the reason it exists, then walk the graph to tell the story in a meeting.

model/data/sales/sales_order.mdyou write this
yaml
---
entity: sales_order
group: sales
pk: [party_id, order_no]
columns:
  party_id:  { type: integer }
  order_no:  { type: integer }
  placed_at: { type: datetime, default: now }
  status:    { type: text, default: open }
examples:
  - { party_id: 2, order_no: 1, status: invoiced }
  - { party_id: 2, order_no: 2, status: open }
  - { party_id: 1, order_no: 1, status: paid }
relationships:
  - target: party
    on: { party_id: party_id }
    predicate:
      fwd: places
      rev: is placed by
---
ignatius draws this

Cardinality and identifying edges come from the keys, and subtype clusters from the subtypes: block. Nothing is drawn by hand, and saving a file reloads the open browser.

03 · Agents

In the age of AI agents, review the plan first

Agents write schemas faster than anyone can read them, so the review has to happen before the code exists. The model is markdown, so it is the thing you review before you sign off on what the agent builds. The agent reads the same files, and the ignatius-modeling skill writes them one question at a time and validates each one.

bash
# check the model in CI
$ ignatius validate model/
✓ /home/you/shop/model: valid — 11 entities, no findings.
text
# model with an agent, in Claude Code
> /ignatius-modeling discover
  interviews you about how the business runs,
  then writes the entities and flows

04 · Documentation

The plan becomes the visualization

Everything above comes from one folder of markdown. The same files are your database's documentation and its data dictionary, the place the team plans and shares plans, and the place an agent looks to see what it should build.

The ER diagram in your wiki stopped matching the database months ago.

The diagram renders from markdown in the repo, so it changes in the same pull request as the schema.

ignatius serve model/ -o

Nobody remembers why a table exists.

Each entity carries its purpose and example rows beside its keys, searchable in the dictionary.

examples:

The person who signs off on the design can't read DDL.

Export the whole model to one HTML file. They open it from their desktop, with nothing installed.

ignatius export -o model.html

You inherited a database nobody documented.

An agent reads it through noorm's read-only MCP server, and the ignatius-modeling skill writes the model.

/ignatius-modeling

05 · Lineage

Built on the shoulders of giants

ignatius is not a new invention. It is a looking glass into excellent standards: IDEF1X for entities, grown out of E. F. Codd's relational model, and SSADM-style data flow diagrams for movement.

YearStep
1970E. F. Codd publishes the relational model of data.
1977–78Chris Gane and Trish Sarson, then Tom DeMarco, publish structured analysis built on data flow diagrams.
1981The US Air Force's ICAM program publishes IDEF1, built on Codd's relational theory and Peter Chen's entity-relationship model.
1982Robert Brown develops the logical database design technique for Bank of America.
1983 onThe Air Force extends IDEF1 into IDEF1X, using Brown's technique.
1993NIST publishes IDEF1X as federal standard FIPS 184.
2012IDEF1X becomes part of the international standard ISO/IEC/IEEE 31320-2.

Try it

A model in two minutes

01 · Install

Windows and other options: Download.

bash
curl -fsSL https://noorm.dev/ignatius.sh | sh

02 · Write one entity

A folder with an ignatius.yml is a model. Each file under data/ is one entity: keys and columns in the frontmatter, what it is for in the body.

model/ignatius.ymlyou write this
yaml
name: Shop
model/data/party.mdyou write this
markdown
---
entity: party
pk: [party_id]
columns:
  party_id: { type: integer }
  name:     { type: text }
---

# party

Anyone who places orders.

03 · Serve it

The browser opens on the diagram. Save party.md and the open tab redraws. Add the next entity with a relationships: block pointing at party, and the edge appears.

bash
ignatius serve model -o

Go deeper

Where to go next