offdataai
SaaS & Technology · data model template

ITSM Helpdesk data model

Normalized (3NF) ITIL-inspired helpdesk model. Service catalog and SLA policy lookups, incident/request tickets with work-note comments and affected-CI links, problem and change management with implementation tasks, and a CMDB asset register. Requester/agent contact data is PII.

IT service management following ITIL process areas: a service catalog and SLA policies, customers and agents, incident/request tickets with comments, problems and changes, the configuration items (CMDB) they affect, and the category taxonomy classifying work. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFSaaS & TechnologyITILSOC2
12
tables
106
columns
18
relationships
5
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

catalog_and_slapeopleincidentsproblem_and_change

Design decisions

  • Separate incident, problem, and change records

    ITIL treats incidents (restore service), problems (root cause), and changes (controlled modification) as distinct processes; modeling them as separate linked entities mirrors the practice and keeps lifecycle fields from colliding.

  • Assets as a CMDB referenced by tickets

    Configuration items are reused across many tickets, problems, and changes; a normalized CI register avoids duplicating asset data and supports impact analysis via the ticket-asset junction.

  • SLA policy as a lookup applied to tickets

    Response/resolution targets are policy-driven and shared; storing them once and referencing from service and ticket keeps targets consistent and breach calculation auditable.

  • Comments split into customer-visible and internal

    Work notes must be distinguishable from customer-facing replies; an is_internal flag on a normalized comment table preserves the full conversation thread at one grain.

Tables in the ITSM Helpdesk 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)

service_catalog

Grain: one row per offered IT service

ColumnTypeKeys
service_catalog_keybigintPK
sla_policy_keybigint
service_codevarcharBK
service_namevarchar
service_categoryvarchar
descriptionvarchar
owner_groupvarchar
is_activeboolean

customer

Grain: one row per requesting customer/end user

End-user contact details are PII.

ColumnTypeKeys
customer_keybigintPK
customer_external_idvarcharBK
full_namevarcharPII
emailvarcharPII
phonevarcharPII
departmentvarchar
organizationvarchar
locationvarchar
vipboolean

agent

Grain: one row per support agent/technician

Agent contact details are PII.

ColumnTypeKeys
agent_keybigintPK
agent_external_idvarcharBK
full_namevarcharPII
emailvarcharPII
support_groupvarchar
tiervarchar
is_activeboolean

asset

Grain: one row per configuration item (CMDB CI)

ColumnTypeKeys
asset_keybigintPK
category_keybigint
ci_numbervarcharBK
ci_namevarchar
ci_typevarchar
statusvarchar
environmentvarchar
serial_numbervarchar
assigned_to_external_idvarchar
acquired_datedate

problem

Grain: one row per problem (root cause of incidents)

ColumnTypeKeys
problem_keybigintPK
category_keybigint
problem_numbervarcharBK
titlevarchar
descriptionvarchar
statusvarchar
root_causevarchar
workaroundvarchar
priorityvarchar
identified_attimestamp
resolved_attimestamp

change

Grain: one row per change request

ColumnTypeKeys
change_keybigintPK
category_keybigint
problem_keybigint
change_numbervarcharBK
titlevarchar
change_typevarchar
risk_levelvarchar
statusvarchar
requested_by_external_idvarchar
scheduled_starttimestamp
scheduled_endtimestamp
implemented_attimestamp

ticket

Grain: one row per incident/service-request ticket

ColumnTypeKeys
ticket_keybigintPK
customer_keybigint
assigned_agent_keybigint
category_keybigint
sla_policy_keybigint
service_catalog_keybigint
asset_keybigint
problem_keybigint
ticket_numbervarcharBK
ticket_typevarchar
subjectvarchar
descriptionvarchar
priorityvarchar
statusvarchar
channelvarchar
opened_attimestamp
first_response_attimestamp
resolved_attimestamp
sla_breachedboolean

ticket_comment

Grain: one row per comment/work-note on a ticket

ColumnTypeKeys
ticket_comment_keybigintPK
ticket_keybigint
author_agent_keybigint
comment_textvarchar
is_internalboolean
created_attimestamp

change_task

Grain: one row per implementation task within a change

ColumnTypeKeys
change_task_keybigintPK
change_keybigint
assigned_agent_keybigint
task_numbervarcharBK
descriptionvarchar
statusvarchar
planned_starttimestamp
completed_attimestamp

ticket_asset

Grain: one row per asset affected by a ticket (junction)

ColumnTypeKeys
ticket_asset_keybigintPK
ticket_keybigint
asset_keybigint
impactvarchar

Lookup tables (2)

category

Grain: reference taxonomy classifying tickets/problems/changes

ColumnTypeKeys
category_keybigintPK
category_codevarcharBK
category_namevarchar
parent_category_codevarchar
applies_tovarchar

sla_policy

Grain: reference list of SLA policies

ColumnTypeKeys
sla_policy_keybigintPK
policy_codevarcharBK
policy_namevarchar
priorityvarchar
response_target_minutesinteger
resolution_target_minutesinteger
business_hours_onlyboolean

Relationships

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

  • service_catalog.sla_policy_key → sla_policy (many-to-one)
  • asset.category_key → category (many-to-one)
  • problem.category_key → category (many-to-one)
  • change.category_key → category (many-to-one)
  • change.problem_key → problem (many-to-one)
  • ticket.customer_key → customer (many-to-one)
  • ticket.assigned_agent_key → agent (many-to-one)
  • ticket.category_key → category (many-to-one)
  • ticket.sla_policy_key → sla_policy (many-to-one)
  • ticket.service_catalog_key → service_catalog (many-to-one)
  • ticket.asset_key → asset (many-to-one)
  • ticket.problem_key → problem (many-to-one)
  • ticket_comment.ticket_key → ticket (many-to-one)
  • ticket_comment.author_agent_key → agent (many-to-one)
  • change_task.change_key → change (many-to-one)
  • change_task.assigned_agent_key → agent (many-to-one)
  • ticket_asset.ticket_key → ticket (many-to-one)
  • ticket_asset.asset_key → asset (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