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.

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, making these filters redundant and potentially causing performance issues.

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.
ColumnTypeDescription
idUUIDInternal unique identifier
check_in_idVARCHAR(64)Planning Center check-in ID
first_nameVARCHAR(64)First name of person checking in
last_nameVARCHAR(64)Last name of person checking in
kindVARCHAR(64)Type: ‘Regular’, ‘Guest’, ‘Volunteer’
one_time_guestBOOLEANTrue if first-time guest
security_codeVARCHAR(64)Security code for child pickup
numberINTEGERCheck-in number
medical_notesTEXTMedical information or allergies
emergency_contact_nameVARCHAR(64)Emergency contact name
emergency_contact_phone_numberVARCHAR(64)Emergency contact phone
created_atTIMESTAMPWhen check-in was created
updated_atTIMESTAMPLast update time
confirmed_atTIMESTAMPWhen check-in was confirmed
checked_out_atTIMESTAMPWhen person checked out
event_period_idVARCHAR(64)Associated event period
person_idVARCHAR(64)Associated person ID
event_idVARCHAR(64)Associated event ID
checked_in_at_idVARCHAR(64)Station where checked in
checked_in_by_idVARCHAR(64)Person who checked them in
checked_out_by_idVARCHAR(64)Person who checked them out
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status: ‘active’, ‘transferring’, ‘stale’
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_people

People who have checked in to events.
ColumnTypeDescription
idUUIDInternal unique identifier
person_idVARCHAR(64)Planning Center person ID
avatar_urlVARCHAR(2048)Avatar image URL
birthdateDATEDate of birth
check_in_countINTEGERTotal check-ins
childBOOLEANTrue if child
created_atTIMESTAMPWhen person was created
demographic_avatar_urlVARCHAR(2048)Demographic profile image URL
first_nameVARCHAR(64)First name
genderVARCHAR(64)Gender
gradeINTEGERSchool grade level
headcounterBOOLEANCan perform headcounts
ignore_filtersBOOLEANIgnores event filters
last_checked_in_atTIMESTAMPLast check-in time
last_nameVARCHAR(64)Last name
medical_notesTEXTMedical information
middle_nameVARCHAR(64)Middle name
nameVARCHAR(64)Full name
name_prefixVARCHAR(64)Name prefix (Mr., Mrs., etc.)
name_suffixVARCHAR(64)Name suffix (Jr., Sr., etc.)
passed_background_checkBOOLEANBackground check status
permissionVARCHAR(50)Permission level
top_permissionVARCHAR(50)Highest permission level
updated_atTIMESTAMPLast update time
organization_idVARCHAR(64)Organization ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_events

Recurring event definitions (e.g., “Sunday Service”, “Youth Group”).
ColumnTypeDescription
idUUIDInternal unique identifier
event_idVARCHAR(64)Planning Center event ID
nameVARCHAR(255)Event name
frequencyVARCHAR(64)How often event occurs
enable_services_integrationBOOLEANLinks to Services module
location_times_enabledBOOLEANUses location-specific times
pre_select_enabledBOOLEANPre-selection allowed
integration_keyVARCHAR(64)Integration identifier
archived_atTIMESTAMPWhen event was archived
created_atTIMESTAMPWhen event was created
updated_atTIMESTAMPLast update time
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_event_times

Specific instances of events with start and end times.
ColumnTypeDescription
idUUIDInternal unique identifier
event_time_idVARCHAR(64)Planning Center event time ID
created_atTIMESTAMPWhen created
day_of_weekINTEGERDay of week (0-6)
guest_countINTEGERNumber of guests
hides_atTIMESTAMPWhen event time is hidden
hourINTEGERHour of day (0-23)
minuteINTEGERMinute of the hour
nameTEXTEvent time name
regular_countINTEGERNumber of regular attendees
shows_atTIMESTAMPWhen event time is shown
starts_atTIMESTAMPEvent start time
total_countINTEGERTotal attendance count
updated_atTIMESTAMPLast update
volunteer_countINTEGERNumber of volunteers
event_idVARCHAR(64)Parent event ID
event_period_idVARCHAR(64)Associated event period ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_event_periods

Active check-in sessions for events.
ColumnTypeDescription
idUUIDInternal unique identifier
event_period_idVARCHAR(64)Planning Center event period ID
created_atTIMESTAMPWhen created
ends_atTIMESTAMPPeriod end time
guest_countINTEGERGuest count
noteTEXTPeriod notes
regular_countINTEGERRegular attendee count
starts_atTIMESTAMPPeriod start time
volunteer_countINTEGERVolunteer count
quantityINTEGERTotal quantity
updated_atTIMESTAMPLast update
event_idVARCHAR(64)Associated event
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_locations

Physical locations (rooms) and logical groupings.
ColumnTypeDescription
idUUIDInternal unique identifier
location_idVARCHAR(64)Planning Center location ID
nameVARCHAR(255)Location name
kindVARCHAR(255)Type: ‘Folder’, ‘Location’, etc.
openedBOOLEANCurrently open for check-ins
child_or_adultVARCHAR(50)‘child’ or ‘adult’
genderVARCHAR(50)Gender restriction if any
age_min_in_monthsINTEGERMinimum age in months
age_max_in_monthsINTEGERMaximum age in months
age_onDATEDate for age calculation
age_range_byVARCHAR(255)How age range is determined
grade_minINTEGERMinimum grade level
grade_maxINTEGERMaximum grade level
max_occupancyINTEGERRoom capacity
min_volunteersINTEGERMinimum volunteers required
attendees_per_volunteerINTEGERRequired ratio
milestoneVARCHAR(255)Associated milestone
positionINTEGERSort order
effective_dateDATEWhen settings take effect
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update
parent_idVARCHAR(64)Parent location ID
event_idVARCHAR(64)Associated event
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_stations

Check-in kiosk stations.
ColumnTypeDescription
idUUIDInternal unique identifier
station_idVARCHAR(64)Planning Center station ID
created_atTIMESTAMPWhen created
input_typeTEXTInput method
input_type_optionsTEXTInput configuration
modeINTEGERStation mode
nameTEXTStation name
timeout_secondsINTEGERSession timeout in seconds
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_labels

Print labels for check-ins.
ColumnTypeDescription
idUUIDInternal unique identifier
label_idVARCHAR(64)Planning Center label ID
created_atTIMESTAMPWhen created
nameVARCHAR(255)Label name
prints_forVARCHAR(255)Who gets this label
rollVARCHAR(255)Label roll type
updated_atTIMESTAMPLast update
xmlTEXTLabel XML definition
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_headcounts

Manual attendance counts.
ColumnTypeDescription
idUUIDInternal unique identifier
headcount_idVARCHAR(64)Planning Center headcount ID
totalINTEGERTotal count
updated_atTIMESTAMPWhen count was updated
created_atTIMESTAMPWhen count was created
attendance_type_idVARCHAR(64)Type of attendance
event_time_idVARCHAR(64)Associated event time
location_idVARCHAR(64)Associated location
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_checkin_times

Specific times when people checked into locations.
ColumnTypeDescription
idUUIDInternal unique identifier
check_in_time_idVARCHAR(64)Planning Center check-in time ID
kindVARCHAR(64)Type of check-in time
event_time_idVARCHAR(64)Associated event time
location_idVARCHAR(64)Associated location
check_in_idVARCHAR(64)Parent check-in ID
pre_check_idVARCHAR(64)Pre-check identifier
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_attendance_types

Types of attendance tracking for events.
ColumnTypeDescription
idUUIDInternal unique identifier
attendance_type_idVARCHAR(64)Planning Center attendance type ID
colorVARCHAR(255)Display color
created_atTIMESTAMPWhen created
attendance_limitINTEGERMaximum attendance
nameVARCHAR(64)Attendance type name
updated_atTIMESTAMPLast update
event_idVARCHAR(64)Associated event ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_checkin_groups

Groups of check-ins processed together for printing labels.
ColumnTypeDescription
idUUIDInternal unique identifier
check_in_group_idVARCHAR(64)Planning Center check-in group ID
check_ins_countINTEGERNumber of check-ins in group
created_atTIMESTAMPWhen group was created
name_labels_countINTEGERNumber of name labels
print_statusVARCHAR(64)Printing status
security_labels_countINTEGERNumber of security labels
updated_atTIMESTAMPLast update
event_period_idVARCHAR(64)Associated event period
print_station_idVARCHAR(64)Print station ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_event_labels

Labels associated with specific events.
ColumnTypeDescription
idUUIDInternal unique identifier
event_label_idVARCHAR(64)Planning Center event label ID
created_atTIMESTAMPWhen created
for_guestBOOLEANPrint for guests
for_regularBOOLEANPrint for regular attendees
for_volunteerBOOLEANPrint for volunteers
quantityINTEGERNumber of labels to print
updated_atTIMESTAMPLast update
event_idVARCHAR(64)Associated event ID
label_idVARCHAR(64)Associated label ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_location_event_periods

Location-specific attendance counts for event periods.
ColumnTypeDescription
idUUIDInternal unique identifier
location_event_period_idVARCHAR(64)Planning Center location event period ID
created_atTIMESTAMPWhen created
guest_countINTEGERGuest count for this location
regular_countINTEGERRegular attendee count for this location
updated_atTIMESTAMPLast update
volunteer_countINTEGERVolunteer count for this location
event_period_idVARCHAR(64)Associated event period
location_idVARCHAR(64)Associated location
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_location_event_times

Location-specific attendance counts for event times.
ColumnTypeDescription
idUUIDInternal unique identifier
location_event_time_idVARCHAR(64)Planning Center location event time ID
created_atTIMESTAMPWhen created
guest_countINTEGERGuest count for this location
regular_countINTEGERRegular attendee count for this location
updated_atTIMESTAMPLast update
volunteer_countINTEGERVolunteer count for this location
event_time_idVARCHAR(64)Associated event time
location_idVARCHAR(64)Associated location
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_location_labels

Labels associated with specific locations.
ColumnTypeDescription
idUUIDInternal unique identifier
location_label_idVARCHAR(64)Planning Center location label ID
created_atTIMESTAMPWhen created
for_guestBOOLEANPrint for guests
for_regularBOOLEANPrint for regular attendees
for_volunteerBOOLEANPrint for volunteers
quantityINTEGERNumber of labels to print
updated_atTIMESTAMPLast update
label_idVARCHAR(64)Associated label ID
location_idVARCHAR(64)Associated location ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_options

Label printing options and configurations.
ColumnTypeDescription
idUUIDInternal unique identifier
option_idVARCHAR(64)Planning Center option ID
bodyTEXTOption configuration body
created_atTIMESTAMPWhen created
quantityINTEGERQuantity setting
updated_atTIMESTAMPLast update
label_idVARCHAR(64)Associated label ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_passes

Pass codes for secure check-ins.
ColumnTypeDescription
idUUIDInternal unique identifier
pass_idVARCHAR(64)Planning Center pass ID
codeVARCHAR(255)Pass code
created_atTIMESTAMPWhen created
kindVARCHAR(255)Type of pass
updated_atTIMESTAMPLast update
person_idVARCHAR(64)Associated person ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_person_events

Connections between people and events they’ve attended.
ColumnTypeDescription
idUUIDInternal unique identifier
person_event_idVARCHAR(64)Planning Center person event ID
check_in_countINTEGERNumber of check-ins for this event
created_atTIMESTAMPWhen created
updated_atTIMESTAMPLast update
event_idVARCHAR(64)Associated event ID
first_check_in_idVARCHAR(64)First check-in ID
last_check_in_idVARCHAR(64)Most recent check-in ID
person_idVARCHAR(64)Associated person ID
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_themes

Visual themes for check-in stations.
ColumnTypeDescription
idUUIDInternal unique identifier
theme_idVARCHAR(64)Planning Center theme ID
background_colorTEXTBackground color
colorTEXTPrimary color
created_atTIMESTAMPWhen created
image_thumbnailTEXTThumbnail image URL
modeTEXTTheme mode
nameTEXTTheme name
text_colorTEXTText color
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

checkins_organizations

Organization settings and configuration.
ColumnTypeDescription
idUUIDInternal unique identifier
organization_idVARCHAR(64)Planning Center organization ID
avatar_urlVARCHAR(2048)Organization avatar URL
created_atTIMESTAMPWhen created
daily_check_insINTEGERDaily check-in count
date_format_patternVARCHAR(64)Date format pattern
nameVARCHAR(255)Organization name
time_zoneVARCHAR(64)Organization time zone
updated_atTIMESTAMPLast update
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable
Links to external systems and integrations.
ColumnTypeDescription
idUUIDInternal unique identifier
integration_link_idVARCHAR(64)Planning Center integration link ID
remote_appTEXTRemote application name
remote_gidTEXTRemote global ID
remote_idTEXTRemote ID
remote_typeTEXTRemote type
sync_future_assignment_typesBOOLEANSync future assignments
localVARCHAR(64)Local identifier
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen record was created in Parable
system_updated_atTIMESTAMPWhen record was last updated in Parable

Relationship Tables

checkins_checkin_relationships

Links check-ins to people, events, locations, and other entities.
ColumnTypeDescription
idUUIDInternal unique identifier
checkin_idVARCHAR(64)Check-in ID
relationship_typeVARCHAR(50)Type: ‘Person’, ‘Event’, ‘Location’, etc.
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen created
system_updated_atTIMESTAMPLast 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.
ColumnTypeDescription
idUUIDInternal unique identifier
event_idVARCHAR(64)Event ID
relationship_typeVARCHAR(50)Type of relationship
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen created
system_updated_atTIMESTAMPLast update

checkins_location_relationships

Links locations to parent locations and events.
ColumnTypeDescription
idUUIDInternal unique identifier
location_idVARCHAR(64)Location ID
relationship_typeVARCHAR(50)Type: ‘Parent’, ‘Event’, etc.
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen created
system_updated_atTIMESTAMPLast update

checkins_eventtime_relationships

Links event times to events and locations.
ColumnTypeDescription
idUUIDInternal unique identifier
eventtime_idVARCHAR(64)Event time ID
relationship_typeVARCHAR(50)Type of relationship
relationship_idVARCHAR(64)ID of related entity
tenant_organization_idINTEGEROrganization identifier
system_statusVARCHAR(50)Data status
system_created_atTIMESTAMPWhen created
system_updated_atTIMESTAMPLast 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

  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 performance-sensitive 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