offdataai
Supply Chain & Logistics · data model template

Field Service Management data model

Normalized (3NF) field-service-management model. Customer/site/asset hierarchy, contract-governed work orders, technician dispatch with travel/labor capture, parts inventory and per-job consumption, and inspection records. Contact PII is classified and masked.

Field-service operations: customers and their service sites, the assets installed at those sites, work orders, technicians and dispatches, the parts inventory and parts consumed on a job, service contracts, and on-site inspections. Customer/technician contact data is PII. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFSupply Chain & LogisticsGDPRSOC2
10
tables
105
columns
15
relationships
8
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

customers_and_sitesworkworkforceinventory

Design decisions

  • Customer -> site -> asset hierarchy

    A customer can have many sites and each site many serviceable assets; this hierarchy lets work orders target the precise asset while still rolling up to the customer for billing and contracts.

  • Work order separate from dispatch

    One job may require multiple technician visits; modeling dispatches as children of the work order captures per-visit travel and labor without conflating the job with the people sent to it.

  • Parts inventory with per-job consumption junction

    Parts are shared stock referenced by many jobs; a part_used junction records quantity and warranty coverage per work order while keeping the catalog and on-hand counts normalized.

  • Service contract drives coverage and SLA

    Response SLAs and warranty handling depend on the governing contract; linking work orders to a contract enables entitlement checks and contract-vs-billable cost analysis.

Tables in the Field Service Management 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 (10)

customer

Grain: one row per service customer

Customer contact details are PII.

ColumnTypeKeys
customer_keybigintPK
customer_numbervarcharBK
customer_namevarchar
customer_typevarchar
primary_contact_namevarcharPII
emailvarcharPII
phonevarcharPII
billing_addressvarcharPII
billing_countryvarchar
is_activeboolean

site

Grain: one row per service location/site for a customer

ColumnTypeKeys
site_keybigintPK
customer_keybigint
site_codevarcharBK
site_namevarchar
address_line1varcharPII
cityvarchar
state_provincevarchar
postal_codevarchar
countryvarchar
latitudedecimal
longitudedecimal
service_territoryvarchar
access_notesvarchar

asset

Grain: one row per serviceable asset installed at a site

ColumnTypeKeys
asset_keybigintPK
site_keybigint
asset_tagvarcharBK
asset_namevarchar
asset_typevarchar
manufacturervarchar
model_numbervarchar
serial_numbervarchar
install_datedate
warranty_expiry_datedate
statusvarchar

service_contract

Grain: one row per service/maintenance contract

ColumnTypeKeys
service_contract_keybigintPK
customer_keybigint
contract_numbervarcharBK
contract_typevarchar
coverage_levelvarchar
start_datedate
end_datedate
response_sla_hoursinteger
annual_valuedecimal
currency_codevarchar
statusvarchar

technician

Grain: one row per field technician

Technician contact details are PII.

ColumnTypeKeys
technician_keybigintPK
technician_external_idvarcharBK
full_namevarcharPII
emailvarcharPII
phonevarcharPII
home_territoryvarchar
skill_setvarchar
certification_levelvarchar
is_activeboolean

work_order

Grain: one row per field work order

ColumnTypeKeys
work_order_keybigintPK
customer_keybigint
site_keybigint
asset_keybigint
service_contract_keybigint
work_order_numbervarcharBK
work_typevarchar
priorityvarchar
statusvarchar
descriptionvarchar
reported_attimestamp
scheduled_fortimestamp
completed_attimestamp
billed_amountdecimal

dispatch

Grain: one row per technician dispatch to a work order

ColumnTypeKeys
dispatch_keybigintPK
work_order_keybigint
technician_keybigint
dispatch_rolevarchar
scheduled_arrivaltimestamp
actual_arrivaltimestamp
departed_attimestamp
travel_minutesinteger
labor_minutesinteger
statusvarchar

part

Grain: one row per stockable part/SKU

ColumnTypeKeys
part_keybigintPK
part_numbervarcharBK
part_namevarchar
categoryvarchar
unit_of_measurevarchar
unit_costdecimal
unit_pricedecimal
quantity_on_handinteger
reorder_pointinteger

part_used

Grain: one row per part consumed on a work order (junction)

ColumnTypeKeys
part_used_keybigintPK
work_order_keybigint
part_keybigint
dispatch_keybigint
quantity_useddecimal
unit_pricedecimal
line_totaldecimal
is_warranty_coveredboolean

inspection

Grain: one row per on-site inspection performed on a work order

ColumnTypeKeys
inspection_keybigintPK
work_order_keybigint
asset_keybigint
technician_keybigint
inspection_typevarchar
checklist_scoredecimal
passedboolean
findingsvarchar
follow_up_requiredboolean
inspected_attimestamp

Relationships

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

  • site.customer_key → customer (many-to-one)
  • asset.site_key → site (many-to-one)
  • service_contract.customer_key → customer (many-to-one)
  • work_order.customer_key → customer (many-to-one)
  • work_order.site_key → site (many-to-one)
  • work_order.asset_key → asset (many-to-one)
  • work_order.service_contract_key → service_contract (many-to-one)
  • dispatch.work_order_key → work_order (many-to-one)
  • dispatch.technician_key → technician (many-to-one)
  • part_used.work_order_key → work_order (many-to-one)
  • part_used.part_key → part (many-to-one)
  • part_used.dispatch_key → dispatch (many-to-one)
  • inspection.work_order_key → work_order (many-to-one)
  • inspection.asset_key → asset (many-to-one)
  • inspection.technician_key → technician (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