Services Data Model
This document provides complete documentation of the Planning Center Services data model in Parable, including all tables, fields, and relationships.Overview
The Services module contains 56 tables (54 entity tables and 2 relationship tables) supporting worship planning, volunteer scheduling, song management, and service coordination across your entire ministry.Visual Data Model
Core Entity Relationships
Key Relationships Explained
Service Planning Hierarchy:SERVICE_TYPEdefines worship service types (Sunday AM, Sunday PM, Youth, etc.)PLANs are individual service plans within a service typePLAN_TIMEs define when rehearsals and services occurITEMs are the ordered elements within a plan (songs, media, announcements)
TEAMs organize volunteers by function (Worship, Production, Hospitality)TEAM_POSITIONs define specific roles (Vocalist, Keys, Sound Engineer)PLAN_PERSONassigns people to positions for specific plans- Status tracking: C=Confirmed, D=Declined, U=Unconfirmed
SONGs are the core song catalogARRANGEMENTs provide different versions (Slow, Upbeat, Acoustic)KEYs define available musical keys per arrangementITEMs link songs/arrangements to specific plans
SCHEDULEs assign people to specific plan timesBLOCKOUTs indicate when volunteers are unavailableBLOCKOUT_DATEs specify exact dates blocked outSIGNUP_SHEETs facilitate volunteer self-scheduling
SERIESgroups related plans (sermon series, special events)FOLDERs provide hierarchical organizationMEDIAtracks video, audio, and presentation files
Query Requirements
Schema Prefix
IMPORTANT: All tables in the Planning Center Services module are in theplanning_center schema. You MUST prefix all table names with planning_center. in your queries.
✅ CORRECT: SELECT * FROM planning_center.services_plans
❌ INCORRECT: SELECT * FROM services_plans
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
services_service_types- Service categories (Sunday morning, youth, special events)services_plans- Individual service plans with dates and detailsservices_teams- Volunteer and worship teamsservices_people- People who serve in ministryservices_songs- Song library and metadataservices_arrangements- Song arrangements and keysservices_items- Service elements and orderservices_schedules- Person scheduling informationservices_plan_people- People scheduled for specific plansservices_attachments- Files, charts, and media
Supporting Entity Tables
services_plan_times- Service times (9am service, 11am service, etc.)services_plan_templates- Reusable service templatesservices_team_positions- Roles within teams (drummer, vocalist, etc.)services_person_team_position_assignments- Who can serve in what rolesservices_needed_positions- Unfilled positions for servicesservices_blockouts- When people are unavailableservices_blockout_dates- Specific unavailable datesservices_lives- Live service control and streamingservices_media- Media files and videosservices_folders- Organizational structure
Relationship Tables
services_song_relationships- Links songs to tags and attachmentsservices_team_relationships- Links teams to service types
Table Definitions
services_service_types
Service types define categories of services (Sunday Morning, Youth Service, etc.).services_plans
Individual service plans containing all details for a specific service date.services_teams
Teams of volunteers and staff who serve in ministry.services_people
People who participate in services as volunteers, staff, or worship team members.services_songs
Complete song library with metadata for worship planning.services_arrangements
Different arrangements and keys for songs.services_items
Individual elements within a service plan.services_plan_people
People scheduled to serve in specific service plans.services_schedules
Individual scheduling records for people across all services.services_attachments
Files attached to plans, songs, or other resources.Relationship Tables
services_song_relationships
Links songs to tags and attachments.services_team_relationships
Links teams to service types and parent teams.Planning & Scheduling
services_plan_person_times
Junction table linking plan people to specific plan times.services_plan_templates
Templates for creating new service plans with predefined structure.services_plan_times
Specific times associated with service plans (rehearsals, services, other events).services_needed_positions
Positions needed for service plans that require scheduling.services_signup_sheets
Signup sheets for volunteer positions on service plans.services_signup_sheet_metadata
Metadata about specific times on signup sheets.services_scheduled_people
People scheduled on signup sheets.services_available_signups
Available signup opportunities for people in the organization.services_attendances
Attendance records linking people to plan times through check-ins.services_blockouts
Recurring or one-time blockout periods when people are unavailable.services_blockout_dates
Individual dates within a blockout period.services_blockout_exceptions
Exceptions to recurring blockouts (dates when the blockout doesn’t apply).services_scheduling_preferences
Scheduling preferences between household members.services_time_preference_options
Available time preference options for scheduling team members.services_live_controllers
People who can control live services.services_lives
Live service sessions with control capabilities.services_series
Service series for grouping related plans.services_public_views
Public view settings for service plans.services_contributors
People who have contributed to a plan (edits, additions, etc.).services_plan_notes
Notes attached to service plans.services_plan_note_categories
Categories for organizing plan notes.services_item_note_categories
Categories for organizing item notes.Team Management
services_team_positions
Positions within service teams.services_person_team_position_assignments
Assignments of people to specific team positions.services_team_leaders
Leaders assigned to service teams.services_split_team_rehearsal_assignments
Rehearsal time assignments for split teams.Song & Music Management
services_arrangement_sections
Sections within song arrangements (verse, chorus, bridge, etc.).services_keys
Musical keys associated with song arrangements.services_song_schedules
Schedule information for when songs are used in plans.services_song_attachments
Junction table linking songs to their attachments.services_song_tags
Junction table linking songs to their tags.services_media
Media items (videos, images, audio) used in services.services_media_schedules
Schedule information for when media is used in plans.Communication & Notifications
services_email_templates
Templates for automated emails sent from Planning Center Services.services_emails
Email addresses associated with people in Services.services_phone_numbers
Phone numbers associated with people in Services.services_text_settings
Text messaging settings for people in Services.Administration & Settings
services_organizations
Organization-wide settings for Planning Center Services.services_folders
Folders for organizing service plans and songs.services_tags
Tags for categorizing songs, people, and other entities.services_tag_groups
Groups for organizing related tags.services_attachment_type_groups
Groups for organizing attachment types.services_attachment_types
Types of attachments that can be associated with plans, songs, and other entities.services_report_templates
Templates for generating reports.Data Relationships
Key Relationships
-
Service Planning Hierarchy
- Service Types → Plans → Items
- Plans → Plan Times → Plan People
-
Team Structure
- Teams → Team Positions → Person Team Position Assignments
- Teams → Plan People → Schedules
-
Song Management
- Songs → Arrangements → Items
- Songs → Attachments (chord charts, lead sheets)
-
Scheduling Flow
- People → Schedules → Plan People
- People → Blockouts → Blockout Dates
-
Resource Attachments
- Plans → Attachments
- Songs → Attachments
- Items → Media
Query Patterns
Finding Scheduled Volunteers
Analyzing Song Usage
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 cost or fee columns are stored in cents - divide by 100.0 for display
- Scheduling Status Flags: Use fields like
statusanddecline_reasonto interpret plan assignments instead of checkingsystem_status - Direct ID Columns: Core tables such as
services_plansandservices_plan_peopleexpose direct IDs for performance-sensitive joins
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM services_plan_people - ✅
FROM planning_center.services_plan_people
- ❌
-
Adding Redundant RLS Filters
- ❌
WHERE tenant_organization_id = 1 AND system_status = 'active' - ✅ Trust RLS to handle this automatically
- ❌
-
Joining Without Schema
- ❌
JOIN services_people p ON ... - ✅
JOIN planning_center.services_people p ON ...
- ❌
-
Forgetting Duration Conversion
- ❌
SELECT duration_seconds as minutes - ✅
SELECT duration_seconds / 60.0 as minutes
- ❌
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 scheduling status or declined responses when relevant
- Consider CTEs for complex aggregations
- Use direct ID columns when available instead of relationship tables
- Always use the
Data Synchronization
All Services tables use the standard Parable synchronization pattern:- system_status: Tracks data lifecycle (‘transferring’ → ‘active’ → ‘stale’)
- system_created_at: When record entered Parable
- system_updated_at: Last Parable update
- created_at/updated_at: Original Planning Center timestamps
Notes
- Status codes often use single letters: C=Confirmed, U=Unconfirmed, D=Declined
- All timestamps are stored in UTC
- JSONB fields store complex nested data structures
- File URLs may expire based on
files_expire_attimestamps - Person records link to the main People app for complete profiles