offdataai
Healthcare & Life Sciences · data model template

Dental Practice data model

Normalized (3NF) dental-office model. Procedures are coded with the ADA Code on Dental Procedures and Nomenclature (CDT) held as a lookup, tooth positions follow the Universal Numbering System, and the revenue cycle is split into claims, claim lines, and payments. Treatment plans link proposed to performed work. PHI is classified phi and masked.

Operational dental-practice-management data: patients, dentists and hygienists, appointments, treatment plans, performed procedures (ADA CDT) located by tooth and surface, per-tooth charting (odontogram), insurance plans and coverage, dental claims (ADA J430), claim lines, and payments. Patient PHI is classified and masked for HIPAA. It is a normalized (3NF) relational model that mirrors the source system, suited to operational databases and to landing source data faithfully.

3NFHealthcare & Life SciencesHIPAAHITECH
13
tables
151
columns
25
relationships
12
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

practice_directoryclinicalinsurancerevenue_cycle

Design decisions

  • ADA CDT coding held as a reference lookup

    Dental procedures are billed with the ADA Code on Dental Procedures and Nomenclature (CDT); holding the codes as a static lookup keeps treatments and claim lines consistent and supports fee schedules.

  • Per-tooth/surface granularity

    Dental work is recorded per tooth and surface using the Universal Numbering System; charting and treatments capture tooth number, surface, and quadrant so claims carry the detail payers require.

  • Revenue cycle split into claims, lines, and payments

    Claims are submitted on the ADA J430 form with per-procedure lines and adjudicated independently of patient/insurer payments; splitting them preserves the true billing grain and supports A/R aging.

  • PHI classification and masking for HIPAA

    Patient and guarantor identifiers and subscriber IDs are classified phi and masked (SSN fully) so the governance report enforces HIPAA controls on a covered dental provider.

Tables in the Dental Practice 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)

practice

Grain: one row per dental practice / office location

ColumnTypeKeys
practice_keybigintPK
practice_idvarcharBK
npivarchar
tax_idvarchar
namevarchar
phonevarchar
address_line1varchar
cityvarchar
statevarchar
postal_codevarchar
is_activeboolean

dentist

Grain: one row per dentist / hygienist

ColumnTypeKeys
dentist_keybigintPK
practice_keybigint
dentist_idvarcharBK
npivarchar
first_namevarcharPII
last_namevarcharPII
rolevarchar
specialtyvarchar
license_numbervarchar
license_statevarchar
emailvarcharPII
is_activeboolean

patient

Grain: one row per dental patient

All PHI masked for HIPAA.

ColumnTypeKeys
patient_keybigintPK
practice_keybigint
patient_idvarcharBK
chart_numbervarchar
ssnvarcharPII
first_namevarcharPII
last_namevarcharPII
date_of_birthdatePII
gendervarchar
emailvarcharPII
phonevarcharPII
address_line1varcharPII
cityvarchar
statevarchar
postal_codevarchar
guarantor_namevarcharPII
guarantor_relationshipvarchar
preferred_languagevarchar
is_activeboolean

insurance_plan

Grain: one row per dental insurance plan

ColumnTypeKeys
insurance_plan_keybigintPK
plan_idvarcharBK
carrier_namevarchar
plan_namevarchar
group_numbervarchar
plan_typevarchar
annual_maximumdecimal
deductible_individualdecimal
preventive_coverage_pctdecimal
basic_coverage_pctdecimal
major_coverage_pctdecimal
is_activeboolean

patient_coverage

Grain: one row per patient's enrollment in a plan

ColumnTypeKeys
patient_coverage_keybigintPK
patient_keybigint
insurance_plan_keybigint
subscriber_idvarcharPII
coverage_ordervarchar
relationship_to_subscribervarchar
effective_datedate
termination_datedate
is_activeboolean

appointment

Grain: one row per scheduled appointment

ColumnTypeKeys
appointment_keybigintPK
patient_keybigint
dentist_keybigint
practice_keybigint
appointment_idvarcharBK
appointment_typevarchar
operatoryvarchar
scheduled_starttimestamp
scheduled_endtimestamp
checked_in_attimestamp
statusvarchar
reasonvarchar

treatment_plan

Grain: one row per proposed treatment plan

ColumnTypeKeys
treatment_plan_keybigintPK
patient_keybigint
dentist_keybigint
plan_idvarcharBK
statusvarchar
estimated_totaldecimal
estimated_insurance_portiondecimal
estimated_patient_portiondecimal
created_datedate
accepted_datedate

treatment

Grain: one row per performed or planned procedure (ADA CDT)

Procedures coded in ADA CDT and located by tooth/surface.

ColumnTypeKeys
treatment_keybigintPK
patient_keybigint
dentist_keybigint
procedure_code_keybigint
appointment_keybigint
treatment_plan_keybigint
tooth_numbervarchar
tooth_surfacevarchar
quadrantvarchar
statusvarchar
fee_chargeddecimal
performed_datedate
notesvarchar

tooth_chart

Grain: one row per tooth condition entry on a patient's chart

Per-tooth dental charting (odontogram).

ColumnTypeKeys
tooth_chart_keybigintPK
patient_keybigint
examined_by_dentist_keybigint
tooth_numbervarchar
tooth_surfacevarchar
conditionvarchar
statusvarchar
charted_datedate
notesvarchar

claim

Grain: one row per dental insurance claim (ADA J430)

ADA dental claim form (J430) submission.

ColumnTypeKeys
claim_keybigintPK
patient_keybigint
insurance_plan_keybigint
practice_keybigint
claim_idvarcharBK
claim_typevarchar
total_chargeddecimal
total_alloweddecimal
insurance_paiddecimal
patient_responsibilitydecimal
statusvarchar
denial_reasonvarchar
submitted_datedate
adjudicated_datedate

claim_line

Grain: one row per procedure line on a claim

ColumnTypeKeys
claim_line_keybigintPK
claim_keybigint
treatment_keybigint
procedure_code_keybigint
tooth_numbervarchar
tooth_surfacevarchar
charged_amountdecimal
allowed_amountdecimal
paid_amountdecimal
statusvarchar
adjustment_reasonvarchar
service_datedate

payment

Grain: one row per payment received (patient or insurer)

ColumnTypeKeys
payment_keybigintPK
patient_keybigint
claim_keybigint
practice_keybigint
payment_idvarcharBK
payer_typevarchar
amountdecimal
applied_amountdecimal
unapplied_amountdecimal
payment_methodvarchar
reference_numbervarchar
posted_datedate
statusvarchar

Lookup tables (1)

procedure_code

Grain: static ADA CDT procedure code reference

ColumnTypeKeys
procedure_code_keybigintPK
cdt_codevarcharBK
descriptionvarchar
categoryvarchar
typical_feedecimal

Relationships

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

  • dentist.practice_key → practice (many-to-one)
  • patient.practice_key → practice (many-to-one)
  • patient_coverage.patient_key → patient (many-to-one)
  • patient_coverage.insurance_plan_key → insurance_plan (many-to-one)
  • appointment.patient_key → patient (many-to-one)
  • appointment.dentist_key → dentist (many-to-one)
  • appointment.practice_key → practice (many-to-one)
  • treatment_plan.patient_key → patient (many-to-one)
  • treatment_plan.dentist_key → dentist (many-to-one)
  • treatment.patient_key → patient (many-to-one)
  • treatment.dentist_key → dentist (many-to-one)
  • treatment.procedure_code_key → procedure_code (many-to-one)
  • treatment.appointment_key → appointment (many-to-one)
  • treatment.treatment_plan_key → treatment_plan (many-to-one)
  • tooth_chart.patient_key → patient (many-to-one)
  • tooth_chart.examined_by_dentist_key → dentist (many-to-one)
  • claim.patient_key → patient (many-to-one)
  • claim.insurance_plan_key → insurance_plan (many-to-one)
  • claim.practice_key → practice (many-to-one)
  • claim_line.claim_key → claim (many-to-one)
  • claim_line.treatment_key → treatment (many-to-one)
  • claim_line.procedure_code_key → procedure_code (many-to-one)
  • payment.patient_key → patient (many-to-one)
  • payment.claim_key → claim (many-to-one)
  • payment.practice_key → practice (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