Skip to main content

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

The diagram below shows the core entities and their relationships in the Services module. Use it as a visual reference while exploring the detailed table definitions below.

Core Entity Relationships

Services module data model
Open diagram in new tab →

Key Relationships Explained

Service Planning Hierarchy:
  1. SERVICE_TYPE defines worship service types (Sunday AM, Sunday PM, Youth, etc.)
  2. PLANs are individual service plans within a service type
  3. PLAN_TIMEs define when rehearsals and services occur
  4. ITEMs are the ordered elements within a plan (songs, media, announcements)
Team Structure:
  • TEAMs organize volunteers by function (Worship, Production, Hospitality)
  • TEAM_POSITIONs define specific roles (Vocalist, Keys, Sound Engineer)
  • PLAN_PERSON assigns people to positions for specific plans
  • Status tracking: C=Confirmed, D=Declined, U=Unconfirmed
Song Library:
  • SONGs are the core song catalog
  • ARRANGEMENTs provide different versions (Slow, Upbeat, Acoustic)
  • KEYs define available musical keys per arrangement
  • ITEMs link songs/arrangements to specific plans
Scheduling System:
  • SCHEDULEs assign people to specific plan times
  • BLOCKOUTs indicate when volunteers are unavailable
  • BLOCKOUT_DATEs specify exact dates blocked out
  • SIGNUP_SHEETs facilitate volunteer self-scheduling
Organization:
  • SERIES groups related plans (sermon series, special events)
  • FOLDERs provide hierarchical organization
  • MEDIA tracks video, audio, and presentation files

Query Requirements

Schema Prefix

IMPORTANT: All tables in the Planning Center Services module are in the planning_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
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

  • services_service_types - Service categories (Sunday morning, youth, special events)
  • services_plans - Individual service plans with dates and details
  • services_teams - Volunteer and worship teams
  • services_people - People who serve in ministry
  • services_songs - Song library and metadata
  • services_arrangements - Song arrangements and keys
  • services_items - Service elements and order
  • services_schedules - Person scheduling information
  • services_plan_people - People scheduled for specific plans
  • services_attachments - Files, charts, and media

Supporting Entity Tables

  • services_plan_times - Service times (9am service, 11am service, etc.)
  • services_plan_templates - Reusable service templates
  • services_team_positions - Roles within teams (drummer, vocalist, etc.)
  • services_person_team_position_assignments - Who can serve in what roles
  • services_needed_positions - Unfilled positions for services
  • services_blockouts - When people are unavailable
  • services_blockout_dates - Specific unavailable dates
  • services_lives - Live service control and streaming
  • services_media - Media files and videos
  • services_folders - Organizational structure

Relationship Tables

  • services_song_relationships - Links songs to tags and attachments
  • services_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

  1. Service Planning Hierarchy
    • Service Types → Plans → Items
    • Plans → Plan Times → Plan People
  2. Team Structure
    • Teams → Team Positions → Person Team Position Assignments
    • Teams → Plan People → Schedules
  3. Song Management
    • Songs → Arrangements → Items
    • Songs → Attachments (chord charts, lead sheets)
  4. Scheduling Flow
    • People → Schedules → Plan People
    • People → Blockouts → Blockout Dates
  5. Resource Attachments
    • Plans → Attachments
    • Songs → Attachments
    • Items → Media

Query Patterns

Finding Scheduled Volunteers

Analyzing Song Usage

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 cost or fee columns are stored in cents - divide by 100.0 for display
  4. Scheduling Status Flags: Use fields like status and decline_reason to interpret plan assignments instead of checking system_status
  5. Direct ID Columns: Core tables such as services_plans and services_plan_people expose direct IDs for performance-sensitive joins

Common Mistakes to Avoid

  1. Missing Schema Prefix
    • FROM services_plan_people
    • FROM planning_center.services_plan_people
  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 services_people p ON ...
    • JOIN planning_center.services_people p ON ...
  4. Forgetting Duration Conversion
    • SELECT duration_seconds as minutes
    • SELECT duration_seconds / 60.0 as minutes

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 scheduling status or declined responses when relevant
    • Consider CTEs for complex aggregations
    • Use direct ID columns when available instead of relationship tables

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_at timestamps
  • Person records link to the main People app for complete profiles