Skip to main content

Check-ins Data Model

This document provides complete documentation of the Planning Center Check-ins data model in Parable, including all tables, fields, and relationships.

Overview

The Check-ins module contains 26 tables supporting attendance tracking, child safety, volunteer management, and event organization.

Visual Data Model

The diagram below shows the core entities and their relationships in the Check-ins module. Use it as a visual reference while exploring the detailed table definitions below.

Core Entity Relationships

Check-ins module data model
Open diagram in new tab →

Key Relationships Explained

Event & Time Structure:
  • EVENTs represent recurring check-in programs (Sunday School, Nursery, etc.)
  • EVENT_TIMEs are specific time slots when events occur
  • EVENT_PERIODs define date ranges when events are active
  • LOCATION_EVENT_TIME links locations to specific time slots
Check-in Flow:
  1. Person arrives at a LOCATION during an EVENT_TIME
  2. CHECKIN record created with security code
  3. Labels printed based on EVENT_LABEL and LOCATION_LABEL configurations
  4. PERSON_EVENT tracks long-term attendance patterns
Label System:
  • LABELs define printable tags (name tags, security labels, allergy alerts)
  • EVENT_LABEL determines which labels print for an event
  • LOCATION_LABEL determines which labels print at a location
  • Multiple label types can apply to single check-in
Security & Safety:
  • PASSes provide reusable check-in codes
  • Security codes generated per check-in for child pickup
  • STATIONs configure check-in kiosks and admin workstations
  • THEMEs customize check-in interface appearance
Headcount Tracking:
  • HEADCOUNT records aggregate attendance by type
  • ATTENDANCE_TYPE categorizes attendees (kids, volunteers, guests)
  • Tracked per EVENT_TIME for capacity planning
Generic Relationship Pattern:
  • Check-in groups via checkins_checkin_relationships
  • Event associations via checkins_event_relationships

Query Requirements

Schema Prefix

IMPORTANT: All tables in the Planning Center Check-ins module are in the planning_center schema. You MUST prefix all table names with planning_center. in your queries. ✅ CORRECT: SELECT * FROM planning_center.checkins_checkins ❌ INCORRECT: SELECT * FROM checkins_checkins

Row Level Security (RLS)

This database uses Row Level Security (RLS) to automatically filter data based on:
  • tenant_organization_id: You only see data for your current organization
  • system_status: You only see ‘active’ records by default
DO NOT add these filters to your WHERE clause - they are applied automatically:
  • WHERE tenant_organization_id = 1 (unnecessary)
  • WHERE system_status = 'active' (unnecessary)
The RLS policies ensure you only access data you’re authorized to see. Adding these filters is redundant and can negatively impact query speed.

Core Tables Overview

Primary Entity Tables

  • checkins_checkins - Individual check-in records
  • checkins_people - People who check in
  • checkins_events - Event definitions (Sunday Service, Youth Group, etc.)
  • checkins_event_times - Specific instances of events
  • checkins_event_periods - Active check-in sessions
  • checkins_locations - Physical and logical locations
  • checkins_stations - Check-in kiosk stations
  • checkins_labels - Print labels for check-ins
  • checkins_headcounts - Manual attendance counts
  • checkins_checkin_times - Specific check-in time records

Supporting Entity Tables

  • checkins_attendance_types - Types of attendance tracking
  • checkins_checkin_groups - Groups of check-ins processed together
  • checkins_event_labels - Labels associated with events
  • checkins_location_event_periods - Location-specific period counts
  • checkins_location_event_times - Location-specific time counts
  • checkins_location_labels - Labels for locations
  • checkins_options - Label printing options
  • checkins_passes - Pass codes for check-ins
  • checkins_person_events - Person-event connections
  • checkins_themes - Visual themes for stations
  • checkins_organizations - Organization settings
  • checkins_integration_links - External system integrations

Relationship Tables

  • checkins_checkin_relationships - Links check-ins to other entities
  • checkins_event_relationships - Links events to related entities
  • checkins_eventtime_relationships - Links event times to events and locations
  • checkins_location_relationships - Links locations to parents and events

Table Definitions

checkins_checkins

The main check-in record table that tracks individual check-ins.

checkins_people

People who have checked in to events.

checkins_events

Recurring event definitions (e.g., “Sunday Service”, “Youth Group”).

checkins_event_times

Specific instances of events with start and end times.

checkins_event_periods

Active check-in sessions for events.

checkins_locations

Physical locations (rooms) and logical groupings.

checkins_stations

Check-in kiosk stations.

checkins_labels

Print labels for check-ins.

checkins_headcounts

Manual attendance counts.

checkins_checkin_times

Specific times when people checked into locations.

checkins_attendance_types

Types of attendance tracking for events.

checkins_checkin_groups

Groups of check-ins processed together for printing labels.

checkins_event_labels

Labels associated with specific events.

checkins_location_event_periods

Location-specific attendance counts for event periods.

checkins_location_event_times

Location-specific attendance counts for event times.

checkins_location_labels

Labels associated with specific locations.

checkins_options

Label printing options and configurations.

checkins_passes

Pass codes for secure check-ins.

checkins_person_events

Connections between people and events they’ve attended.

checkins_themes

Visual themes for check-in stations.

checkins_organizations

Organization settings and configuration. Links to external systems and integrations.

Relationship Tables

checkins_checkin_relationships

Links check-ins to people, events, locations, and other entities. Common relationship types:
  • Person - Links to checkins_people
  • Event - Links to checkins_events
  • EventTime - Links to checkins_event_times
  • EventPeriod - Links to checkins_event_periods
  • Location - Links to checkins_locations

checkins_event_relationships

Links events to other entities.

checkins_location_relationships

Links locations to parent locations and events.

checkins_eventtime_relationships

Links event times to events and locations.

System Fields

All tables include these system fields for data management:
  • tenant_organization_id - Multi-tenant organization identifier
  • system_status - Data lifecycle status:
    • transferring - Being imported from Planning Center
    • active - Current active data
    • stale - Marked for removal
  • system_created_at - When record was created in Parable
  • system_updated_at - When record was last updated in Parable

Common Query Patterns

Joining Check-ins to People

Joining Check-ins to Locations

Finding Location Hierarchy

Data Integrity Rules

  1. Schema Qualification: Always use planning_center. prefix for all table references
  2. Row Level Security: RLS automatically handles multi-tenancy and status filtering - do not add manual filters
  3. Monetary Values: Any fee or purchase columns are stored in cents - divide by 100.0 for display
  4. Check-in Status Flags: Use fields like confirmed_at, checked_out_at, and headcount_type instead of relying on system_status
  5. Direct ID Columns: Core tables such as checkins_checkins and checkins_event_times expose direct IDs for fast joins

Common Mistakes to Avoid

  1. Missing Schema Prefix
    • FROM checkins_checkins
    • FROM planning_center.checkins_checkins
  2. Adding Redundant RLS Filters
    • WHERE tenant_organization_id = 1 AND system_status = 'active'
    • ✅ Trust RLS to handle this automatically
  3. Joining Without Schema
    • JOIN checkins_locations l ON ...
    • JOIN planning_center.checkins_locations l ON ...
  4. Skipping Currency Conversion
    • SELECT fee_cents as fee
    • SELECT fee_cents / 100.0 as fee

Performance Considerations

  1. Indexes: All tables have optimized indexes on:
    • Primary keys and entity IDs
    • Join columns and foreign keys
    • Date columns for time-based queries
  2. Query Optimization:
    • Always use the planning_center. schema prefix
    • RLS handles tenant and status filtering automatically
    • Filter by event period or location status when relevant
    • Consider using CTEs for complex hierarchical queries
    • Use direct ID columns when available instead of relationship tables

Next Steps