offdataai
Manufacturing & Industrial · data model template

Manufacturing Execution System (ISA-95) data model

Third-normal-form mirror of an ISA-95 Layer-3 MES. Each ISA-95 object becomes its own entity with a warehouse surrogate key plus the genuine MES business key, child execution/quality/material tables reference their parents via foreign keys, and self-referencing columns capture equipment assembly hierarchy, material BOM links and operation routing predecessors. Operator and inspector identifiers are PII-masked; electronic batch records carry an is_locked flag for 21 CFR Part 11 immutability.

Normalized replica of an ISA-95 Layer-3 Manufacturing Execution System covering Production / Maintenance / Quality / Inventory operations management. Models the ISA-95 Enterprise → Site → Area → WorkCenter → Equipment role-based hierarchy, ERP-issued production orders vs shop-floor production runs (B2MML schedule-vs-response), executed operations with routing predecessors, material consumption / output, quality inspections, equipment state log and downtime events feeding OEE, and 21 CFR Part 11 electronic batch records. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFManufacturing & IndustrialISA-95ISO-900121-CFR-Part-11
20
tables
173
columns
31
relationships
4
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: PostgreSQL). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

isa95_hierarchyproduction_executionmaterial_flowquality_compliancedowntime_oeemaster_data

Design decisions

  • ISA-95 hierarchy modeled as nested entities

    ISA-95 Part 1 defines a role-based equipment hierarchy of Enterprise → Site → Area → WorkCenter → Equipment; modeling each level as its own entity with a foreign key to its parent keeps the hierarchy normalized and lets reports roll up unambiguously from shop floor to enterprise.

  • Separate production_order (schedule) and production_run (response)

    B2MML defines distinct ProductionSchedule and ProductionResponse / ProductionPerformance messages between ERP (L4) and MES (L3); splitting the order from the run preserves the schedule-vs-actual reconciliation and supports partial runs, rework and split lots without losing the ERP intent.

  • Downtime events and equipment state log feed OEE

    OEE = Availability x Performance x Quality requires per-equipment state intervals (running / idle / setup / down / blocked / starved) and reason-coded downtime events; keeping both at source grain lets analytics compute Availability loss (downtime), Performance loss (slow / idle) and Quality loss (defects) without re-deriving them from aggregates.

  • Electronic batch record for 21 CFR Part 11 e-records

    FDA 21 CFR Part 11 requires electronic records and signatures to be attributable, time-stamped and immutable; a dedicated electronic_batch_record entity with signed_off_by / signed_off_at / is_locked captures the e-signature attestation and lock state without polluting the production_run.

  • Self-referencing material BOM and equipment assembly hierarchy

    Bills of material and equipment sub-assemblies are inherently recursive (material → sub-component material, equipment → sub-equipment); plain self-referencing keys (parent_material_key, parent_equipment_key) keep the recursion in one table without an extra bridge entity, mirroring how ISA-95 Equipment and material masters are represented in source systems.

Tables in the Manufacturing Execution System (ISA-95) model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Tables (12)

work_center

Grain: one row per ISA-95 work center

ISA-95 WorkCenter — line/cell that groups equipment under an area.

ColumnTypeKeys
work_center_keybigintPK
area_keybigint
work_center_idvarcharBK
work_center_namevarchar
work_center_typevarchar
is_constraintboolean
capacity_per_hourdecimal

equipment

Grain: one row per ISA-95 equipment instance

ISA-95 Equipment — physical asset with self-referencing assembly hierarchy.

ColumnTypeKeys
equipment_keybigintPK
work_center_keybigint
equipment_idvarcharBK
equipment_namevarchar
equipment_classvarchar
manufacturervarchar
modelvarchar
parent_equipment_keybigint
commissioning_datedate
operating_hoursdecimal
equipment_statusvarchar
is_criticalboolean

material

Grain: one row per material master record

Material master with self-referencing BOM relationships.

ColumnTypeKeys
material_keybigintPK
material_class_keybigint
material_idvarcharBK
material_descriptionvarchar
unit_of_measurevarchar
standard_costdecimal
currencyvarchar
parent_material_keybigint
is_activeboolean
is_batch_managedboolean

production_order

Grain: one row per ERP-issued production order

ERP-issued production schedule (B2MML ProductionSchedule).

ColumnTypeKeys
production_order_keybigintPK
site_keybigint
material_keybigint
work_center_keybigint
production_order_idvarcharBK
order_typevarchar
planned_quantitydecimal
planned_starttimestamp
planned_endtimestamp
actual_starttimestamp
actual_endtimestamp
order_statusvarchar
priorityvarchar

production_run

Grain: one row per shop-floor production run

Shop-floor production response (B2MML ProductionResponse / ProductionPerformance).

ColumnTypeKeys
production_run_keybigintPK
production_order_keybigint
equipment_keybigint
shift_id_keybigint
run_start_datetimetimestamp
run_end_datetimetimestamp
produced_good_quantitydecimal
produced_scrap_quantitydecimal
batch_lot_numbervarchar
operator_idvarcharPII
run_statusvarchar

operation

Grain: one row per executed operation in a run

Executed operation (ISA-95 OperationsPerformance) with self-referencing routing predecessors.

ColumnTypeKeys
operation_keybigintPK
production_run_keybigint
operation_definition_keybigint
equipment_keybigint
operation_idvarcharBK
sequence_numberinteger
planned_starttimestamp
actual_starttimestamp
actual_endtimestamp
planned_quantitydecimal
completed_good_quantitydecimal
completed_scrap_quantitydecimal
operation_statusvarchar
parent_operation_keybigint

downtime_event

Grain: one row per equipment downtime event

Equipment downtime events feeding OEE Availability loss analysis.

ColumnTypeKeys
downtime_event_keybigintPK
equipment_keybigint
production_run_keybigint
downtime_reason_keybigint
shift_id_keybigint
downtime_event_idvarcharBK
event_start_datetimetimestamp
event_end_datetimetimestamp
duration_minutesdecimal
is_plannedboolean
mttr_minutesdecimal
reported_byvarcharPII
root_causevarchar

material_consumption

Grain: one row per material consumption transaction

Material consumption on the shop floor (issues, returns, scrap).

ColumnTypeKeys
material_consumption_keybigintPK
production_run_keybigint
material_keybigint
equipment_keybigint
consumption_idvarcharBK
consumed_quantitydecimal
unit_of_measurevarchar
lot_or_batch_numbervarchar
consumed_attimestamp
transaction_typevarchar

material_output

Grain: one row per material output transaction

Material outputs (good / rework / scrap) from a production run.

ColumnTypeKeys
material_output_keybigintPK
production_run_keybigint
material_keybigint
output_idvarcharBK
output_quantitydecimal
output_qualityvarchar
lot_or_batch_numbervarchar
produced_attimestamp

quality_inspection

Grain: one row per quality inspection record

Quality inspection feeding OEE Quality loss and batch release.

ColumnTypeKeys
quality_inspection_keybigintPK
production_run_keybigint
material_keybigint
operation_keybigint
defect_code_keybigint
inspection_idvarcharBK
inspection_typevarchar
sample_sizeinteger
defect_countinteger
inspector_idvarcharPII
inspected_attimestamp
dispositionvarchar
is_batch_releasedboolean

equipment_state_log

Grain: one row per equipment state interval

Equipment state history feeding OEE Availability/Performance computation.

ColumnTypeKeys
equipment_state_log_keybigintPK
equipment_keybigint
shift_id_keybigint
state_log_idvarcharBK
state_start_datetimetimestamp
state_end_datetimetimestamp
equipment_statevarchar
duration_minutesdecimal

electronic_batch_record

Grain: one row per electronic batch record (21 CFR Part 11)

21 CFR Part 11 electronic batch record with e-signature attestation.

ColumnTypeKeys
electronic_batch_record_keybigintPK
production_run_keybigint
material_keybigint
ebr_idvarcharBK
batch_numbervarchar
manufacture_datedate
expiry_datedate
batch_statusvarchar
signed_off_byvarcharPII
signed_off_attimestamp
is_lockedboolean

Lookup tables (8)

enterprise

Grain: one row per ISA-95 enterprise

ISA-95 Enterprise — top of the manufacturing role-based equipment hierarchy.

ColumnTypeKeys
enterprise_keybigintPK
enterprise_idvarcharBK
enterprise_namevarchar
countryvarchar

site

Grain: one row per ISA-95 site

ISA-95 Site — geographic manufacturing location under an enterprise.

ColumnTypeKeys
site_keybigintPK
enterprise_keybigint
site_idvarcharBK
site_namevarchar
countryvarchar
regionvarchar

area

Grain: one row per ISA-95 area within a site

ISA-95 Area — production area inside a site (groups work centers).

ColumnTypeKeys
area_keybigintPK
site_keybigint
area_idvarcharBK
area_namevarchar

shift

Grain: one row per manufacturing shift definition

Shift calendar dimension used by runs, downtime and state logs.

ColumnTypeKeys
shift_keybigintPK
shift_idvarcharBK
shift_namevarchar
start_timevarchar
end_timevarchar
hoursdecimal

material_class

Grain: one row per material classification

Material classification (raw / WIP / finished / by-product / scrap).

ColumnTypeKeys
material_class_keybigintPK
material_class_idvarcharBK
descriptionvarchar
is_serializedboolean
is_lot_controlledboolean

operation_definition

Grain: one row per ISA-95 operations definition

ISA-95 OperationsDefinition — recipe/routing step library.

ColumnTypeKeys
operation_definition_keybigintPK
operation_definition_idvarcharBK
operation_namevarchar
operation_typevarchar
standard_cycle_time_secondsdecimal
requires_certified_operatorboolean
is_criticalboolean

downtime_reason

Grain: one row per downtime reason code

Reason code dimension for OEE loss classification.

ColumnTypeKeys
downtime_reason_keybigintPK
downtime_reason_idvarcharBK
descriptionvarchar
downtime_categoryvarchar
oee_loss_classvarchar

defect_code

Grain: one row per quality defect code

Quality defect taxonomy used by inspections.

ColumnTypeKeys
defect_code_keybigintPK
defect_code_idvarcharBK
descriptionvarchar
defect_categoryvarchar
severityvarchar
is_repairableboolean

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • site.enterprise_key → enterprise (many-to-one)
  • area.site_key → site (many-to-one)
  • work_center.area_key → area (many-to-one)
  • equipment.work_center_key → work_center (many-to-one)
  • material.material_class_key → material_class (many-to-one)
  • production_order.site_key → site (many-to-one)
  • production_order.material_key → material (many-to-one)
  • production_order.work_center_key → work_center (many-to-one)
  • production_run.production_order_key → production_order (many-to-one)
  • production_run.equipment_key → equipment (many-to-one)
  • production_run.shift_id_key → shift (many-to-one)
  • operation.production_run_key → production_run (many-to-one)
  • operation.operation_definition_key → operation_definition (many-to-one)
  • operation.equipment_key → equipment (many-to-one)
  • downtime_event.equipment_key → equipment (many-to-one)
  • downtime_event.production_run_key → production_run (many-to-one)
  • downtime_event.downtime_reason_key → downtime_reason (many-to-one)
  • downtime_event.shift_id_key → shift (many-to-one)
  • material_consumption.production_run_key → production_run (many-to-one)
  • material_consumption.material_key → material (many-to-one)
  • material_consumption.equipment_key → equipment (many-to-one)
  • material_output.production_run_key → production_run (many-to-one)
  • material_output.material_key → material (many-to-one)
  • quality_inspection.production_run_key → production_run (many-to-one)
  • quality_inspection.material_key → material (many-to-one)
  • quality_inspection.operation_key → operation (many-to-one)
  • quality_inspection.defect_code_key → defect_code (many-to-one)
  • equipment_state_log.equipment_key → equipment (many-to-one)
  • equipment_state_log.shift_id_key → shift (many-to-one)
  • electronic_batch_record.production_run_key → production_run (many-to-one)
  • electronic_batch_record.material_key → material (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time