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
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:
- Person arrives at a
LOCATION during an EVENT_TIME
CHECKIN record created with security code
- Labels printed based on
EVENT_LABEL and LOCATION_LABEL configurations
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_check_in_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.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
check_in_id | VARCHAR(64) | Planning Center check-in ID |
first_name | VARCHAR(64) | First name of person checking in |
last_name | VARCHAR(64) | Last name of person checking in |
kind | VARCHAR(64) | Type: ‘Regular’, ‘Guest’, ‘Volunteer’ |
one_time_guest | BOOLEAN | True if first-time guest |
security_code | VARCHAR(64) | Security code for child pickup |
number | INTEGER | Check-in number |
medical_notes | TEXT | Medical information or allergies |
emergency_contact_name | VARCHAR(64) | Emergency contact name |
emergency_contact_phone_number | VARCHAR(64) | Emergency contact phone |
created_at | TIMESTAMP | When check-in was created |
updated_at | TIMESTAMP | Last update time |
confirmed_at | TIMESTAMP | When check-in was confirmed |
checked_out_at | TIMESTAMP | When person checked out |
event_period_id | VARCHAR(64) | Associated event period |
person_id | VARCHAR(64) | Associated person ID |
event_id | VARCHAR(64) | Associated event ID |
checked_in_at_id | VARCHAR(64) | Station where checked in |
checked_in_by_id | VARCHAR(64) | Person who checked them in |
checked_out_by_id | VARCHAR(64) | Person who checked them out |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status: ‘active’, ‘transferring’, ‘stale’ |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_people
People who have checked in to events.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
person_id | VARCHAR(64) | Planning Center person ID |
avatar_url | VARCHAR(2048) | Avatar image URL |
birthdate | DATE | Date of birth |
check_in_count | INTEGER | Total check-ins |
child | BOOLEAN | True if child |
created_at | TIMESTAMP | When person was created |
demographic_avatar_url | VARCHAR(2048) | Demographic profile image URL |
first_name | VARCHAR(64) | First name |
gender | VARCHAR(64) | Gender |
grade | INTEGER | School grade level |
headcounter | BOOLEAN | Can do headcounts |
ignore_filters | BOOLEAN | Ignores event filters |
last_checked_in_at | TIMESTAMP | Last check-in time |
last_name | VARCHAR(64) | Last name |
medical_notes | TEXT | Medical information |
middle_name | VARCHAR(64) | Middle name |
name | VARCHAR(64) | Full name |
name_prefix | VARCHAR(64) | Name prefix (Mr., Mrs., etc.) |
name_suffix | VARCHAR(64) | Name suffix (Jr., Sr., etc.) |
passed_background_check | BOOLEAN | Background check status |
permission | VARCHAR(50) | Permission level |
top_permission | VARCHAR(50) | Highest permission level |
updated_at | TIMESTAMP | Last update time |
organization_id | VARCHAR(64) | Organization ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_events
Recurring event definitions (e.g., “Sunday Service”, “Youth Group”).
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
event_id | VARCHAR(64) | Planning Center event ID |
name | VARCHAR(255) | Event name |
frequency | VARCHAR(64) | How often event occurs |
enable_services_integration | BOOLEAN | Links to Services module |
location_times_enabled | BOOLEAN | Uses location-specific times |
pre_select_enabled | BOOLEAN | Pre-selection allowed |
integration_key | VARCHAR(64) | Integration identifier |
archived_at | TIMESTAMP | When event was archived |
created_at | TIMESTAMP | When event was created |
updated_at | TIMESTAMP | Last update time |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_times
Specific instances of events with start and end times.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
event_time_id | VARCHAR(64) | Planning Center event time ID |
created_at | TIMESTAMP | When created |
day_of_week | INTEGER | Day of week (0-6) |
guest_count | INTEGER | Number of guests |
hides_at | TIMESTAMP | When event time is hidden |
hour | INTEGER | Hour of day (0-23) |
minute | INTEGER | Minute of the hour |
name | TEXT | Event time name |
regular_count | INTEGER | Number of regular attendees |
shows_at | TIMESTAMP | When event time is shown |
starts_at | TIMESTAMP | Event start time |
total_count | INTEGER | Total attendance count |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Number of volunteers |
event_id | VARCHAR(64) | Parent event ID |
event_period_id | VARCHAR(64) | Associated event period ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_periods
Active check-in sessions for events.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
event_period_id | VARCHAR(64) | Planning Center event period ID |
created_at | TIMESTAMP | When created |
ends_at | TIMESTAMP | Period end time |
guest_count | INTEGER | Guest count |
note | TEXT | Period notes |
regular_count | INTEGER | Regular attendee count |
starts_at | TIMESTAMP | Period start time |
volunteer_count | INTEGER | Volunteer count |
quantity | INTEGER | Total quantity |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_locations
Physical locations (rooms) and logical groupings.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
location_id | VARCHAR(64) | Planning Center location ID |
name | VARCHAR(255) | Location name |
kind | VARCHAR(255) | Type: ‘Folder’, ‘Location’, etc. |
opened | BOOLEAN | Currently open for check-ins |
child_or_adult | VARCHAR(50) | ‘child’ or ‘adult’ |
gender | VARCHAR(50) | Gender restriction if any |
age_min_in_months | INTEGER | Minimum age in months |
age_max_in_months | INTEGER | Maximum age in months |
age_on | DATE | Date for age calculation |
age_range_by | VARCHAR(255) | How age range is determined |
grade_min | INTEGER | Minimum grade level |
grade_max | INTEGER | Maximum grade level |
max_occupancy | INTEGER | Room capacity |
min_volunteers | INTEGER | Minimum volunteers required |
attendees_per_volunteer | INTEGER | Required ratio |
milestone | VARCHAR(255) | Associated milestone |
position | INTEGER | Sort order |
effective_date | DATE | When settings take effect |
created_at | TIMESTAMP | When created |
updated_at | TIMESTAMP | Last update |
parent_id | VARCHAR(64) | Parent location ID |
event_id | VARCHAR(64) | Associated event |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_stations
Check-in kiosk stations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
station_id | VARCHAR(64) | Planning Center station ID |
created_at | TIMESTAMP | When created |
input_type | TEXT | Input method |
input_type_options | TEXT | Input configuration |
mode | INTEGER | Station mode |
name | TEXT | Station name |
timeout_seconds | INTEGER | Session timeout in seconds |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_labels
Print labels for check-ins.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
label_id | VARCHAR(64) | Planning Center label ID |
created_at | TIMESTAMP | When created |
name | VARCHAR(255) | Label name |
prints_for | VARCHAR(255) | Who gets this label |
roll | VARCHAR(255) | Label roll type |
updated_at | TIMESTAMP | Last update |
xml | TEXT | Label XML definition |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_headcounts
Manual attendance counts.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
headcount_id | VARCHAR(64) | Planning Center headcount ID |
total | INTEGER | Total count |
updated_at | TIMESTAMP | When count was updated |
created_at | TIMESTAMP | When count was created |
attendance_type_id | VARCHAR(64) | Type of attendance |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_checkin_times
Specific times when people checked into locations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
check_in_time_id | VARCHAR(64) | Planning Center check-in time ID |
kind | VARCHAR(64) | Type of check-in time |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
check_in_id | VARCHAR(64) | Parent check-in ID |
pre_check_id | VARCHAR(64) | Pre-check identifier |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_attendance_types
Types of attendance tracking for events.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
attendance_type_id | VARCHAR(64) | Planning Center attendance type ID |
color | VARCHAR(255) | Display color |
created_at | TIMESTAMP | When created |
attendance_limit | INTEGER | Maximum attendance |
name | VARCHAR(64) | Attendance type name |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_checkin_groups
Groups of check-ins processed together for printing labels.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
check_in_group_id | VARCHAR(64) | Planning Center check-in group ID |
check_ins_count | INTEGER | Number of check-ins in group |
created_at | TIMESTAMP | When group was created |
name_labels_count | INTEGER | Number of name labels |
print_status | VARCHAR(64) | Printing status |
security_labels_count | INTEGER | Number of security labels |
updated_at | TIMESTAMP | Last update |
event_period_id | VARCHAR(64) | Associated event period |
print_station_id | VARCHAR(64) | Print station ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_event_labels
Labels associated with specific events.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
event_label_id | VARCHAR(64) | Planning Center event label ID |
created_at | TIMESTAMP | When created |
for_guest | BOOLEAN | Print for guests |
for_regular | BOOLEAN | Print for regular attendees |
for_volunteer | BOOLEAN | Print for volunteers |
quantity | INTEGER | Number of labels to print |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
label_id | VARCHAR(64) | Associated label ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_event_periods
Location-specific attendance counts for event periods.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
location_event_period_id | VARCHAR(64) | Planning Center location event period ID |
created_at | TIMESTAMP | When created |
guest_count | INTEGER | Guest count for this location |
regular_count | INTEGER | Regular attendee count for this location |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Volunteer count for this location |
event_period_id | VARCHAR(64) | Associated event period |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_event_times
Location-specific attendance counts for event times.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
location_event_time_id | VARCHAR(64) | Planning Center location event time ID |
created_at | TIMESTAMP | When created |
guest_count | INTEGER | Guest count for this location |
regular_count | INTEGER | Regular attendee count for this location |
updated_at | TIMESTAMP | Last update |
volunteer_count | INTEGER | Volunteer count for this location |
event_time_id | VARCHAR(64) | Associated event time |
location_id | VARCHAR(64) | Associated location |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_location_labels
Labels associated with specific locations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
location_label_id | VARCHAR(64) | Planning Center location label ID |
created_at | TIMESTAMP | When created |
for_guest | BOOLEAN | Print for guests |
for_regular | BOOLEAN | Print for regular attendees |
for_volunteer | BOOLEAN | Print for volunteers |
quantity | INTEGER | Number of labels to print |
updated_at | TIMESTAMP | Last update |
label_id | VARCHAR(64) | Associated label ID |
location_id | VARCHAR(64) | Associated location ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_options
Label printing options and configurations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
option_id | VARCHAR(64) | Planning Center option ID |
body | TEXT | Option configuration body |
created_at | TIMESTAMP | When created |
quantity | INTEGER | Quantity setting |
updated_at | TIMESTAMP | Last update |
label_id | VARCHAR(64) | Associated label ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_passes
Pass codes for secure check-ins.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
pass_id | VARCHAR(64) | Planning Center pass ID |
code | VARCHAR(255) | Pass code |
created_at | TIMESTAMP | When created |
kind | VARCHAR(255) | Type of pass |
updated_at | TIMESTAMP | Last update |
person_id | VARCHAR(64) | Associated person ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_person_events
Connections between people and events they’ve attended.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
person_event_id | VARCHAR(64) | Planning Center person event ID |
check_in_count | INTEGER | Number of check-ins for this event |
created_at | TIMESTAMP | When created |
updated_at | TIMESTAMP | Last update |
event_id | VARCHAR(64) | Associated event ID |
first_check_in_id | VARCHAR(64) | First check-in ID |
last_check_in_id | VARCHAR(64) | Most recent check-in ID |
person_id | VARCHAR(64) | Associated person ID |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_themes
Visual themes for check-in stations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
theme_id | VARCHAR(64) | Planning Center theme ID |
background_color | TEXT | Background color |
color | TEXT | Primary color |
created_at | TIMESTAMP | When created |
image_thumbnail | TEXT | Thumbnail image URL |
mode | TEXT | Theme mode |
name | TEXT | Theme name |
text_color | TEXT | Text color |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_organizations
Organization settings and configuration.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
organization_id | VARCHAR(64) | Planning Center organization ID |
avatar_url | VARCHAR(2048) | Organization avatar URL |
created_at | TIMESTAMP | When created |
daily_check_ins | INTEGER | Daily check-in count |
date_format_pattern | VARCHAR(64) | Date format pattern |
name | VARCHAR(255) | Organization name |
time_zone | VARCHAR(64) | Organization time zone |
updated_at | TIMESTAMP | Last update |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
checkins_integration_links
Links to external systems and integrations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
integration_link_id | VARCHAR(64) | Planning Center integration link ID |
remote_app | TEXT | Remote application name |
remote_gid | TEXT | Remote global ID |
remote_id | TEXT | Remote ID |
remote_type | TEXT | Remote type |
sync_future_assignment_types | BOOLEAN | Sync future assignments |
local | VARCHAR(64) | Local identifier |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When record was created in Parable |
system_updated_at | TIMESTAMP | When record was last updated in Parable |
Relationship Tables
checkins_checkin_relationships
Links check-ins to people, events, locations, and other entities.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
checkin_id | VARCHAR(64) | Check-in ID |
relationship_type | VARCHAR(50) | Type: ‘Person’, ‘Event’, ‘Location’, etc. |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
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.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
event_id | VARCHAR(64) | Event ID |
relationship_type | VARCHAR(50) | Type of relationship |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
checkins_location_relationships
Links locations to parent locations and events.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
location_id | VARCHAR(64) | Location ID |
relationship_type | VARCHAR(50) | Type: ‘Parent’, ‘Event’, etc. |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
checkins_eventtime_relationships
Links event times to events and locations.
| Column | Type | Description |
|---|
id | UUID | Internal unique identifier |
eventtime_id | VARCHAR(64) | Event time ID |
relationship_type | VARCHAR(50) | Type of relationship |
relationship_id | VARCHAR(64) | ID of related entity |
tenant_organization_id | INTEGER | Organization identifier |
system_status | VARCHAR(50) | Data status |
system_created_at | TIMESTAMP | When created |
system_updated_at | TIMESTAMP | Last update |
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
SELECT
c.*,
p.first_name,
p.last_name,
p.birthdate
FROM planning_center.checkins_checkins c
JOIN planning_center.checkins_checkin_relationships cr
ON c.check_in_id = cr.checkin_id
AND cr.relationship_type = 'Person'
JOIN planning_center.checkins_people p
ON cr.relationship_id = p.person_id;
Joining Check-ins to Locations
SELECT
c.*,
l.name as location_name,
l.max_occupancy
FROM planning_center.checkins_checkins c
JOIN planning_center.checkins_checkin_relationships cr
ON c.check_in_id = cr.checkin_id
AND cr.relationship_type = 'Location'
JOIN planning_center.checkins_locations l
ON cr.relationship_id = l.location_id;
Finding Location Hierarchy
WITH RECURSIVE location_tree AS (
SELECT
location_id,
name,
parent_id,
0 as level
FROM planning_center.checkins_locations
WHERE parent_id IS NULL
UNION ALL
SELECT
l.location_id,
l.name,
l.parent_id,
lt.level + 1
FROM planning_center.checkins_locations l
JOIN location_tree lt ON l.parent_id = lt.location_id
)
SELECT * FROM location_tree;
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, and headcount_type instead of relying on system_status
- Direct ID Columns: Core tables such as
checkins_checkins and checkins_event_times expose 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
-
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
Next Steps