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
Core Entity Relationships
Key Relationships Explained
Event & Time Structure:EVENTs represent recurring check-in programs (Sunday School, Nursery, etc.)EVENT_TIMEs are specific time slots when events occurEVENT_PERIODs define date ranges when events are activeLOCATION_EVENT_TIMElinks locations to specific time slots
- Person arrives at a
LOCATIONduring anEVENT_TIME CHECKINrecord created with security code- Labels printed based on
EVENT_LABELandLOCATION_LABELconfigurations PERSON_EVENTtracks long-term attendance patterns
LABELs define printable tags (name tags, security labels, allergy alerts)EVENT_LABELdetermines which labels print for an eventLOCATION_LABELdetermines which labels print at a location- Multiple label types can apply to single check-in
PASSes provide reusable check-in codes- Security codes generated per check-in for child pickup
STATIONs configure check-in kiosks and admin workstationsTHEMEs customize check-in interface appearance
HEADCOUNTrecords aggregate attendance by typeATTENDANCE_TYPEcategorizes attendees (kids, volunteers, guests)- Tracked per
EVENT_TIMEfor capacity planning
- 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 theplanning_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
- ❌
WHERE tenant_organization_id = 1(unnecessary) - ❌
WHERE system_status = 'active'(unnecessary)
Core Tables Overview
Primary Entity Tables
checkins_checkins- Individual check-in recordscheckins_people- People who check incheckins_events- Event definitions (Sunday Service, Youth Group, etc.)checkins_event_times- Specific instances of eventscheckins_event_periods- Active check-in sessionscheckins_locations- Physical and logical locationscheckins_stations- Check-in kiosk stationscheckins_labels- Print labels for check-inscheckins_headcounts- Manual attendance countscheckins_checkin_times- Specific check-in time records
Supporting Entity Tables
checkins_attendance_types- Types of attendance trackingcheckins_checkin_groups- Groups of check-ins processed togethercheckins_event_labels- Labels associated with eventscheckins_location_event_periods- Location-specific period countscheckins_location_event_times- Location-specific time countscheckins_location_labels- Labels for locationscheckins_options- Label printing optionscheckins_passes- Pass codes for check-inscheckins_person_events- Person-event connectionscheckins_themes- Visual themes for stationscheckins_organizations- Organization settingscheckins_integration_links- External system integrations
Relationship Tables
checkins_checkin_relationships- Links check-ins to other entitiescheckins_event_relationships- Links events to related entitiescheckins_eventtime_relationships- Links event times to events and locationscheckins_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.checkins_integration_links
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_peopleEvent- Links to checkins_eventsEventTime- Links to checkins_event_timesEventPeriod- Links to checkins_event_periodsLocation- 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 identifiersystem_status- Data lifecycle status:transferring- Being imported from Planning Centeractive- Current active datastale- Marked for removal
system_created_at- When record was created in Parablesystem_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
- Schema Qualification: Always use
planning_center.prefix for all table references - Row Level Security: RLS automatically handles multi-tenancy and status filtering - do not add manual filters
- Monetary Values: Any fee or purchase columns are stored in cents - divide by 100.0 for display
- Check-in Status Flags: Use fields like
confirmed_at,checked_out_at, andheadcount_typeinstead of relying onsystem_status - Direct ID Columns: Core tables such as
checkins_checkinsandcheckins_event_timesexpose direct IDs for fast joins
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM checkins_checkins - ✅
FROM planning_center.checkins_checkins
- ❌
-
Adding Redundant RLS Filters
- ❌
WHERE tenant_organization_id = 1 AND system_status = 'active' - ✅ Trust RLS to handle this automatically
- ❌
-
Joining Without Schema
- ❌
JOIN checkins_locations l ON ... - ✅
JOIN planning_center.checkins_locations l ON ...
- ❌
-
Skipping Currency Conversion
- ❌
SELECT fee_cents as fee - ✅
SELECT fee_cents / 100.0 as fee
- ❌
Performance Considerations
-
Indexes: All tables have optimized indexes on:
- Primary keys and entity IDs
- Join columns and foreign keys
- Date columns for time-based queries
-
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
- Always use the
Next Steps
- Return to Basic Queries for simple examples
- Review Advanced Queries for complex analysis
- Check Reporting Examples for production-ready reports