offdataai
Travel & Hospitality · data model template

Airline MRO Aircraft Maintenance data model

Third-normal-form mirror of an airline / MRO maintenance information system as it lands from the source CAMO/CMMS. Each source table becomes its own entity with a warehouse surrogate key plus the genuine MRO business key(s) (tail number, component serial, work-order id, S1000D DMC, part number). The on-wing rotable assembly tree is preserved via a parent_component_key self-reference; FAA/EASA traceability is preserved on every transactional row (mechanic certificate, inspector RII sign-off, MEL deferral).

Normalized replica of an airline / MRO aircraft-maintenance source system (CAMO/CMMS such as AMOS, TRAX, Maintenix). Anchored to ATA-100 chapter codes (21 AirCond, 27 Flight-Controls, 32 Landing-Gear, 72 Engine), S1000D data module codes for task cards, SPEC 2000 business information exchange for parts and repair orders, and reliability programs driven by flight-hour / flight-cycle / calendar intervals (A/B/C/D checks, CPCP). Fleet, rotables with serial tracking, work orders and task cards, discrepancies with MEL/CDL deferrals, and the off-wing shop-visit cycle are each modeled as their own entity, keyed by the genuine MRO business keys. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFTravel & HospitalityFAAEASAISO-9001
15
tables
147
columns
23
relationships
2
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

master_datafleet_componentswork_executioncompliance_reliability

Design decisions

  • ATA-100 chapter as the universal subsystem dimension

    ATA-100 (and its iSpec 2200 successor) assigns every aircraft system a two-digit chapter code (21 AirCond, 27 Flight-Controls, 32 Landing-Gear, 72 Engine); reusing it as the single ata_chapter lookup keeps parts, components, work, discrepancies and reliability data joinable across every operator and every type.

  • Aircraft to installed components via a self-referencing assembly tree

    A rotable build-up (engine → module → LRU → sub-LRU) is naturally a tree, and CMMS systems model it that way; a single component entity with a parent_component_key self-reference preserves the on-wing assembly hierarchy without a separate bridge table.

  • S1000D data module code preserved as the task card business key

    S1000D issues every approved maintenance task as a Data Module with a globally unique DMC; keeping the DMC as the task_card business key makes the warehouse reconcilable with the AMM and lets reliability engineers trace findings back to the exact approved procedure.

  • Discrepancies carry MEL / CDL deferral category and expiry

    Operators can dispatch with open defects only under their approved MEL/CDL with a fixed deferral interval (A/B/C/D); modeling deferral category and deferred_until_date on the discrepancy is what lets ops control verify legal dispatch and what auditors reconstruct.

  • Off-wing shop visit modeled separately from on-wing work orders

    A rotable removed from one tail is repaired in a Part-145 shop and may be reinstalled on a different tail; the shop visit has its own SPEC 2000 repair-order business key, costs and outcome, so keeping it distinct from work_order preserves FAA/EASA part traceability.

Tables in the Airline MRO Aircraft Maintenance 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 (8)

aircraft

Grain: one row per aircraft (tail number)

Aircraft — one row per tail number, the asset against which all maintenance is tracked.

ColumnTypeKeys
aircraft_keybigintPK
airline_operator_keybigint
aircraft_model_keybigint
aircraft_idvarcharBK
serial_numbervarchar
delivery_datedate
total_flight_hoursdecimal
total_cyclesinteger
fleet_statusvarchar
base_station_codevarchar

component

Grain: one row per serial-controlled component

Component — serial-controlled rotables, tracked individually with an assembly tree via parent_component_key.

ColumnTypeKeys
component_keybigintPK
part_master_keybigint
aircraft_keybigint
ata_chapter_keybigint
parent_component_keybigint
component_idvarcharBK
install_datedate
removal_datedate
total_time_since_new_hoursdecimal
total_time_since_overhaul_hoursdecimal
time_since_overhaul_cyclesinteger
position_codevarchar
component_statusvarchar

work_order

Grain: one row per maintenance work order / work package

Work order / work package — the top-level container for a maintenance event on a tail.

ColumnTypeKeys
work_order_keybigintPK
aircraft_keybigint
station_keybigint
maintenance_program_keybigint
airline_operator_keybigint
work_order_idvarcharBK
work_order_typevarchar
check_typevarchar
planned_start_datedate
actual_start_datedate
planned_end_datedate
actual_end_datedate
planned_labor_hoursdecimal
actual_labor_hoursdecimal
work_order_statusvarchar
total_costdecimal
currencyvarchar

task_card

Grain: one row per task card on a work order

Task card — one approved task / inspection step from the AMM / MPD (S1000D DMC).

ColumnTypeKeys
task_card_keybigintPK
work_order_keybigint
ata_chapter_keybigint
task_card_idvarcharBK
task_descriptionvarchar
task_typevarchar
dmc_data_module_codevarchar
interval_typevarchar
interval_valuedecimal
expected_duration_minutesinteger
requires_certified_inspectorboolean
task_statusvarchar

task_signoff

Grain: one row per task card sign-off / certification

Task sign-off — the mechanic / inspector certification that closes a task card.

ColumnTypeKeys
task_signoff_keybigintPK
task_card_keybigint
signoff_idvarcharBK
mechanic_certificate_numbervarcharPII
inspector_signoff_numbervarcharPII
signoff_datedate
labor_minutesinteger
was_passedinteger

discrepancy

Grain: one row per discrepancy / finding raised against a tail

Discrepancy — PIREP/MAREP/finding raised against a tail, with MEL/CDL deferral tracking.

ColumnTypeKeys
discrepancy_keybigintPK
aircraft_keybigint
work_order_keybigint
ata_chapter_keybigint
discrepancy_idvarcharBK
discrepancy_typevarchar
discovered_datedate
descriptionvarchar
deferral_categoryvarchar
deferred_until_datedate
resolved_datedate
mel_item_numbervarchar

part_consumption

Grain: one row per part transaction against a task / work order

Part consumption — parts removed, installed, scrapped or returned against a task card.

ColumnTypeKeys
part_consumption_keybigintPK
work_order_keybigint
task_card_keybigint
part_master_keybigint
component_removed_keybigint
vendor_keybigint
consumption_idvarcharBK
quantity_useddecimal
unit_costdecimal
total_costdecimal
currencyvarchar
transaction_typevarchar

shop_visit

Grain: one row per off-wing shop visit on a rotable component

Shop visit — the off-wing rotable repair cycle, distinct from on-wing work orders.

ColumnTypeKeys
shop_visit_keybigintPK
component_keybigint
vendor_keybigint
shop_visit_idvarcharBK
induction_datedate
completion_datedate
work_scopevarchar
total_costdecimal
labor_costdecimal
parts_costdecimal
currencyvarchar
outcomevarchar
replacement_component_idvarchar

Lookup tables (7)

airline_operator

Grain: one row per airline / operator

Airline / operator master — owner of the aircraft and the maintenance program.

ColumnTypeKeys
airline_operator_keybigintPK
operator_idvarcharBK
operator_namevarchar
countryvarchar
fleet_size_bandvarchar
certificate_typevarchar
is_activeboolean

ata_chapter

Grain: one row per ATA-100 chapter (aircraft system code)

ATA-100 chapter check table — the universal aircraft subsystem dimension.

ColumnTypeKeys
ata_chapter_keybigintPK
ata_chaptervarcharBK
descriptionvarchar
system_categoryvarchar
is_powerplantboolean

aircraft_model

Grain: one row per aircraft type/model

Aircraft type/model master — links to the type certificate and design data.

ColumnTypeKeys
aircraft_model_keybigintPK
aircraft_modelvarcharBK
manufacturervarchar
mtow_kgdecimal
max_seatsinteger
etops_minutesinteger
type_certificatevarchar

station

Grain: one row per maintenance station / airport

Station / airport master — where the aircraft is when work is performed.

ColumnTypeKeys
station_keybigintPK
station_idvarcharBK
station_namevarchar
countryvarchar
station_typevarchar
capabilitiesvarchar

vendor

Grain: one row per external vendor / repair station

Vendor master — OEMs, FAR-145 repair stations and parts brokers.

ColumnTypeKeys
vendor_keybigintPK
vendor_idvarcharBK
vendor_namevarchar
countryvarchar
vendor_typevarchar
far_145_certifiedboolean

part_master

Grain: one row per part number

Part master — SPEC 2000 part catalog with rotable / LLP attributes.

ColumnTypeKeys
part_master_keybigintPK
ata_chapter_keybigint
part_numbervarcharBK
part_namevarchar
unit_of_measurevarchar
is_serializedboolean
is_consumableboolean
is_rotableboolean
is_life_limitedboolean
life_limit_hoursdecimal
life_limit_cyclesinteger
life_limit_daysinteger

maintenance_program

Grain: one row per maintenance program task / check

Maintenance program — the operator's approved check & inspection schedule.

ColumnTypeKeys
maintenance_program_keybigintPK
program_idvarcharBK
program_namevarchar
program_typevarchar
interval_basisvarchar
interval_valuedecimal
is_activeboolean

Relationships

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

  • part_master.ata_chapter_key → ata_chapter (many-to-one)
  • aircraft.airline_operator_key → airline_operator (many-to-one)
  • aircraft.aircraft_model_key → aircraft_model (many-to-one)
  • component.part_master_key → part_master (many-to-one)
  • component.aircraft_key → aircraft (many-to-one)
  • component.ata_chapter_key → ata_chapter (many-to-one)
  • work_order.aircraft_key → aircraft (many-to-one)
  • work_order.station_key → station (many-to-one)
  • work_order.maintenance_program_key → maintenance_program (many-to-one)
  • work_order.airline_operator_key → airline_operator (many-to-one)
  • task_card.work_order_key → work_order (many-to-one)
  • task_card.ata_chapter_key → ata_chapter (many-to-one)
  • task_signoff.task_card_key → task_card (many-to-one)
  • discrepancy.aircraft_key → aircraft (many-to-one)
  • discrepancy.work_order_key → work_order (many-to-one)
  • discrepancy.ata_chapter_key → ata_chapter (many-to-one)
  • part_consumption.work_order_key → work_order (many-to-one)
  • part_consumption.task_card_key → task_card (many-to-one)
  • part_consumption.part_master_key → part_master (many-to-one)
  • part_consumption.component_removed_key → component (many-to-one)
  • part_consumption.vendor_key → vendor (many-to-one)
  • shop_visit.component_key → component (many-to-one)
  • shop_visit.vendor_key → vendor (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