Overview
The Check-ins module contains 41 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_check_ins_relationships - Event associations via
checkins_events_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_check_ins
❌ INCORRECT: SELECT * FROM checkins_check_ins
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_check_ins- 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_check_in_times- Specific check-in time records
Supporting Entity Tables
checkins_attendance_types- Types of attendance trackingcheckins_check_in_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_check_ins_relationships- Links check-ins to other entitiescheckins_events_relationships- Links events to related entitiescheckins_event_times_relationships- Links event times to events and locationscheckins_locations_relationships- Links locations to parents and eventscheckins_attendance_types_relationships- Links attendance types to eventscheckins_check_in_groups_relationships- Links check-in groups to check-ins and stationscheckins_check_in_times_relationships- Links check-in times to check-ins and locationscheckins_event_labels_relationships- Links event labels to events and labelscheckins_event_periods_relationships- Links event periods to eventscheckins_headcounts_relationships- Links headcounts to attendance types and event timescheckins_integration_links_relationships- Links integration links to external entitiescheckins_location_event_periods_relationships- Links location event periods to locations and periodscheckins_location_event_times_relationships- Links location event times to locations and event timescheckins_location_labels_relationships- Links location labels to labels and locationscheckins_options_relationships- Links options to labelscheckins_pass_relationships- Links passes to peoplecheckins_person_events_relationships- Links person events to people and eventscheckins_people_relationships- Links people to related entitiescheckins_stations_relationships- Links stations to themes and other entities
Table Definitions
checkins_check_ins
The main check-in record table that tracks individual check-ins.
Relationships (via
checkins_check_ins_relationships):
relationship_type = 'Person'→ links tocheckins_people.person_idrelationship_type = 'Event'→ links tocheckins_events.event_idrelationship_type = 'EventTime'→ links tocheckins_event_times.event_time_idrelationship_type = 'EventPeriod'→ links tocheckins_event_periods.event_period_idrelationship_type = 'Location'→ links tocheckins_locations.location_idrelationship_type = 'CheckedInAt'→ links tocheckins_stations.station_idrelationship_type = 'CheckedInBy'→ links tocheckins_people.person_idrelationship_type = 'CheckedOutBy'→ links tocheckins_people.person_idrelationship_type = 'CheckInTime'→ links tocheckins_check_in_times.check_in_time_id
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.
Relationships (via
checkins_event_times_relationships):
relationship_type = 'Event'→ links tocheckins_events.event_id
checkins_event_periods
Active check-in sessions for events.
Relationships (via
checkins_event_periods_relationships):
relationship_type = 'Event'→ links tocheckins_events.event_id
checkins_locations
Physical locations (rooms) and logical groupings.
Relationships (via
checkins_locations_relationships):
relationship_type = 'Parent'→ links to parentcheckins_locations.location_idrelationship_type = 'Event'→ links tocheckins_events.event_id
checkins_stations
Check-in kiosk stations.checkins_labels
Print labels for check-ins.checkins_headcounts
Manual attendance counts.
Relationships (via
checkins_headcounts_relationships):
relationship_type = 'AttendanceType'→ links tocheckins_attendance_types.attendance_type_idrelationship_type = 'EventTime'→ links tocheckins_event_times.event_time_idrelationship_type = 'Location'→ links tocheckins_locations.location_id
checkins_check_in_times
Specific times when people checked into locations.
Relationships (via
checkins_check_in_times_relationships):
relationship_type = 'CheckIn'→ links tocheckins_check_ins.check_in_idrelationship_type = 'EventTime'→ links tocheckins_event_times.event_time_idrelationship_type = 'Location'→ links tocheckins_locations.location_idrelationship_type = 'PreCheck'→ links to pre-check record
checkins_attendance_types
Types of attendance tracking for events.
Relationships (via
checkins_attendance_types_relationships):
relationship_type = 'Event'→ links tocheckins_events.event_id
checkins_check_in_groups
Groups of check-ins processed together for printing labels.
Relationships (via
checkins_check_in_groups_relationships):
relationship_type = 'CheckIn'→ links tocheckins_check_ins.check_in_idrelationship_type = 'EventPeriod'→ links tocheckins_event_periods.event_period_idrelationship_type = 'Station'→ links tocheckins_stations.station_id
checkins_event_labels
Labels associated with specific events.
Relationships (via
checkins_event_labels_relationships):
relationship_type = 'Event'→ links tocheckins_events.event_idrelationship_type = 'Label'→ links tocheckins_labels.label_id
checkins_location_event_periods
Location-specific attendance counts for event periods.
Relationships (via
checkins_location_event_periods_relationships):
relationship_type = 'EventPeriod'→ links tocheckins_event_periods.event_period_idrelationship_type = 'Location'→ links tocheckins_locations.location_id
checkins_location_event_times
Location-specific attendance counts for event times.
Relationships (via
checkins_location_event_times_relationships):
relationship_type = 'EventTime'→ links tocheckins_event_times.event_time_idrelationship_type = 'Location'→ links tocheckins_locations.location_id
checkins_location_labels
Labels associated with specific locations.
Relationships (via
checkins_location_labels_relationships):
relationship_type = 'Label'→ links tocheckins_labels.label_idrelationship_type = 'Location'→ links tocheckins_locations.location_id
checkins_options
Label printing options and configurations.
Relationships (via
checkins_options_relationships):
relationship_type = 'Label'→ links tocheckins_labels.label_id
checkins_passes
Pass codes for secure check-ins.
Relationships (via
checkins_pass_relationships):
relationship_type = 'Person'→ links tocheckins_people.person_id
checkins_person_events
Connections between people and events they’ve attended.
Relationships (via
checkins_person_events_relationships):
relationship_type = 'Event'→ links tocheckins_events.event_idrelationship_type = 'Person'→ links tocheckins_people.person_idrelationship_type = 'FirstCheckIn'→ links tocheckins_check_ins.check_in_idrelationship_type = 'LastCheckIn'→ links tocheckins_check_ins.check_in_id
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
All relationship tables share this common structure, with the entity ID column named after the parent entity:checkins_check_ins_relationships
Links check-ins to people, events, locations, and other entities. Parent ID column:check_in_id
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_events_relationships
Links events to other entities. Parent ID column:event_id
checkins_locations_relationships
Links locations to parent locations and events. Parent ID column:location_id
Common relationship types:
Parent- Links to parent checkins_locationsEvent- Links to checkins_events
checkins_event_times_relationships
Links event times to events and locations. Parent ID column:event_time_id
checkins_attendance_types_relationships
Links attendance types to events and other entities. Parent ID column:attendance_type_id
checkins_check_in_groups_relationships
Links check-in groups to check-ins, event periods, and stations. Parent ID column:checkin_group_id
checkins_check_in_times_relationships
Links check-in times to check-ins, event times, and locations. Parent ID column:check_in_time_id
checkins_event_labels_relationships
Links event labels to events and labels. Parent ID column:event_label_id
checkins_event_periods_relationships
Links event periods to events. Parent ID column:event_period_id
checkins_headcounts_relationships
Links headcounts to attendance types, event times, and locations. Parent ID column:headcount_id
checkins_integration_links_relationships
Links integration links to external entities. Parent ID column:integration_link_id
checkins_location_event_periods_relationships
Links location event periods to locations and event periods. Parent ID column:location_event_period_id
checkins_location_event_times_relationships
Links location event times to locations and event times. Parent ID column:location_event_time_id
checkins_location_labels_relationships
Links location labels to labels and locations. Parent ID column:location_label_id
checkins_options_relationships
Links options to labels. Parent ID column:option_id
checkins_pass_relationships
Links passes to people. Parent ID column:pass_id
checkins_person_events_relationships
Links person events to people, events, and check-ins. Parent ID column:person_event_id
checkins_people_relationships
Links people to related entities. Parent ID column:person_id
checkins_stations_relationships
Links stations to themes and other entities. Parent ID column:station_id
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
Note:checkins_locations has no parent_id column. Parent relationships are
stored in checkins_locations_relationships with relationship_type = 'Parent'.
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_atandchecked_out_atoncheckins_check_insto determine check-in state - Relationship Tables: Core entity tables (like
checkins_check_ins,checkins_event_times,checkins_locations) do not have direct FK columns. Use the corresponding*_relationshipstable to navigate associations (e.g.,checkins_check_ins_relationships,checkins_event_times_relationships,checkins_locations_relationships)
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM checkins_check_ins - ✅
FROM planning_center.checkins_check_ins
- ❌
-
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
- Join through the
*_relationshipstables — entity tables carry no foreign-key columns
- Always use the
Next Steps
- Return to Basic Queries for simple examples
- Review Advanced Queries for complex analysis