Planning Center People Data Model - Complete Documentation
This document provides complete documentation of ALL tables in the Planning Center People data model in Parable, including all 84 entity tables and 25+ relationship tables with full field definitions.Overview
The People module is the most comprehensive in Planning Center, containing:- 84 entity tables - All person, household, workflow, form, messaging, and configuration data
- 25+ relationship tables - Linking entities together following Parable’s relationship architecture
Visual Data Model
Core Entity Relationships
Key Relationships Explained
Direct Parent-Child Relationships:- Emails, phone numbers, and addresses belong directly to people (via
parent_id) - Household memberships link people to households with explicit junction table
- Form submissions, workflow cards, notes link back to people
- Campus associations stored in
people_people_relationshipstable - Relationship type identifies the connection (e.g.,
primary_campus)
- Workflows: Multi-step process tracking with cards, steps, and activities
- Forms: Dynamic form builder with fields, options, and submissions
- Lists: Smart segmentation with results linking people to lists
- Messaging: Bidirectional messaging between people
Query Requirements
Schema Prefix
IMPORTANT: All tables in the Planning Center People module are in theplanning_center schema. You MUST prefix all table names with planning_center. in your queries.
✅ CORRECT: SELECT * FROM planning_center.people_people
❌ INCORRECT: SELECT * FROM people_people
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)
Complete Table Inventory
Entity Tables (84 total)
Core Person & Contact Tables (11)
people_people- Core person recordspeople_addresses- Physical addressespeople_emails- Email addressespeople_phone_numbers- Phone numberspeople_households- Family unitspeople_household_memberships- Links people to householdspeople_campuses- Church campus locationspeople_connected_persons- Connected person recordspeople_person_apps- App permissions per personpeople_social_profiles- Social media profilespeople_spam_email_addresses- Email filtering
Workflow System Tables (10)
people_workflows- Workflow definitionspeople_workflow_cards- Workflow instancespeople_workflow_steps- Workflow step definitionspeople_workflow_card_activities- Workflow activity logspeople_workflow_card_notes- Notes on workflow cardspeople_workflow_categories- Workflow categorizationpeople_workflow_shares- Workflow sharing settingspeople_workflow_step_assignee_summaries- Assignee summaries
Forms System Tables (8)
people_forms- Form definitionspeople_form_submissions- Submitted form datapeople_form_fields- Form field definitionspeople_form_field_options- Field option definitionspeople_form_submission_values- Submitted field valuespeople_form_categories- Form categorization
Custom Fields Tables (5)
people_field_definitions- Custom field schemaspeople_field_datum- Custom field valuespeople_field_options- Custom field optionspeople_tabs- UI tab organizationpeople_conditions- Conditional logicpeople_rules- Business rules
Lists & Segmentation Tables (7)
people_lists- Smart lists and segmentspeople_list_categories- List categorizationpeople_list_results- People in listspeople_list_shares- List sharing permissionspeople_list_stars- Favorited listspeople_mailchimpsyncstatus- Email marketing sync
Notes & Documentation Tables (4)
people_notes- Pastoral care notespeople_note_categories- Note categorizationpeople_note_category_shares- Note sharingpeople_note_category_subscriptions- Note subscriptions
Messaging System Tables (4)
people_messages- Individual messagespeople_message_groups- Message groupingspeople_custom_senders- Custom email senderspeople_carriers- Phone carriers
Import & Data Management Tables (5)
people_people_imports- Import jobspeople_people_import_conflicts- Import conflictspeople_people_import_history- Import audit trailpeople_person_mergers- Person merge records
Administrative & Reference Tables (11)
people_apps- Application integrationspeople_background_checks- Background check recordspeople_inactive_reasons- Inactivation reasonspeople_marital_statuses- Marital status optionspeople_name_prefixes- Title prefixespeople_name_suffixes- Name suffixespeople_organizations- Organization settingspeople_reports- Report definitionspeople_school_options- School affiliationspeople_service_times- Service schedules
Relationship Tables (25 total)
people_people_relationshipspeople_household_relationshipspeople_email_relationshipspeople_phonenumber_relationshipspeople_campus_relationshipspeople_backgroundcheck_relationshipspeople_fielddata_relationshipspeople_fielddefinition_relationshipspeople_form_relationshipspeople_formfield_relationshipspeople_formsubmission_relationshipspeople_list_relationshipspeople_listcategory_relationshipspeople_message_relationshipspeople_messagegroup_relationshipspeople_note_relationshipspeople_note_category_relationshipspeople_peopleimport_relationshipspeople_personmerger_relationshipspeople_report_relationshipspeople_socialprofile_relationshipspeople_workflow_relationshipspeople_workflowcard_relationshipspeople_workflowcardactivity_relationshipspeople_workflowcardnote_relationships
Complete Table Definitions
Core Person & Contact Tables
people_people
The main person table containing all individual records.people_addresses
Physical addresses for people.people_emails
Email addresses for people.people_phone_numbers
Phone numbers with carrier information.people_households
Family units for grouping related people.people_household_memberships
Links people to households with their roles.people_campuses
Church campus locations.people_connected_persons
Connected person records from external systems.people_person_apps
Application permissions per person.people_social_profiles
Social media profiles for people.people_spam_email_addresses
Email addresses marked as spam or blocked.Workflow System Tables
people_workflows
Process workflow definitions for managing people through various church processes.people_workflow_cards
Individual workflow instances tracking people through processes. Note: Workflow card relationships (assignee, current_step, person, workflow) are stored in thepeople_workflowcard_relationships table, not as direct foreign key columns. See the Relationships section below.
people_workflow_steps
Workflow step definitions.people_workflow_card_activities
Activity logs for workflow cards.people_workflow_card_notes
Notes attached to workflow cards.people_workflow_categories
Categories for organizing workflows.people_workflow_shares
Workflow sharing permissions.people_workflow_step_assignee_summaries
Summary of workflow step assignments.Forms System Tables
people_forms
Form definitions for data collection.people_form_submissions
Submitted form data.people_form_fields
Form field definitions.people_form_field_options
Options for form fields.people_form_submission_values
Values submitted for form fields.people_form_categories
Categories for organizing forms.Custom Fields Tables
people_field_definitions
Custom field schemas.people_field_datum
Custom field values for people.people_field_options
Options for custom fields.people_tabs
UI tab organization for custom fields.people_conditions
Conditional logic for fields and workflows.people_rules
Business rules for data processing.Lists & Segmentation Tables
people_lists
Smart lists for segmenting people.people_list_categories
Categories for organizing lists.people_list_results
People included in lists.people_list_shares
List sharing permissions.people_list_stars
Favorited lists per user.people_mailchimpsyncstatus
Email marketing synchronization status.Notes & Documentation Tables
people_notes
Pastoral care notes and follow-ups.people_note_categories
Categories for organizing notes.people_note_category_shares
Note category sharing permissions.people_note_category_subscriptions
Subscriptions to note categories.Messaging System Tables
people_messages
Individual messages sent through the system.people_message_groups
Groupings of related messages.people_custom_senders
Custom email sender configurations.people_carriers
Phone carrier information for SMS messaging.Import & Data Management Tables
people_people_imports
Import job definitions.people_people_import_conflicts
Conflicts detected during imports.people_people_import_history
Audit trail of import operations.people_person_mergers
Records of merged person records.Administrative & Reference Tables
people_apps
Application integrations available.people_background_checks
Background check records for volunteers and staff.people_inactive_reasons
Reasons for marking people inactive.people_marital_statuses
Marital status options.people_name_prefixes
Title prefixes (Mr., Mrs., Dr., etc.).people_name_suffixes
Name suffixes (Jr., Sr., III, etc.).people_organizations
Organization configuration and settings.people_reports
Report definitions for data analysis.people_school_options
School affiliations and options.people_service_times
Service schedule information.Relationship Tables
All relationship tables follow a similar pattern for linking entities:Standard Relationship Table Structure
Key Relationship Tables
people_people_relationships
Links people to campuses, lists, inactive reasons, marital statuses, organizations, etc.people_household_relationships
Links households to people and campuses. IMPORTANT: This table stores relationships between households and people. The primary contact for a household is NOT stored here - it is stored directly in thepeople_households table via the primary_contact_id and primary_contact_name columns.
Relationship Design Decision:
- Planning Center’s API returns both
primary_contactandpeoplerelationships for each household - The
primary_contactperson is always included in thepeoplearray - To avoid duplicate data, we only store the
peoplerelationships in this table - To find the primary contact for a household, query
people_households.primary_contact_idinstead of this table
people_email_relationships
Links emails to people.people_phonenumber_relationships
Links phone numbers to people.people_fielddata_relationships
Links custom field data to people and other entities.people_form_relationships
Links forms to campuses and categories.people_workflow_relationships
Links workflows to campuses and categories.people_workflowcard_relationships
Links workflow cards to people (assignees and subjects), workflow steps, and workflows.people_message_relationships
Links messages to people and message groups.people_note_relationships
Links notes to people and note categories.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
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: People tables that include contribution amounts store them in cents - divide by 100.0 for display
- Contact Status Flags: Use fields like
status,primary, andinactive_reason_idto interpret person records instead of relying onsystem_status - Direct ID Columns: Core tables such as
people_people,people_households, andpeople_listsexpose direct IDs for performance-sensitive joins
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM people_people - ✅
FROM planning_center.people_people
- ❌
-
Adding Redundant RLS Filters
- ❌
WHERE tenant_organization_id = 1 AND system_status = 'active' - ✅ Trust RLS to handle this automatically
- ❌
-
Joining Without Schema
- ❌
JOIN people_households h ON ... - ✅
JOIN planning_center.people_households h ON ...
- ❌
-
Skipping Currency Conversion
- ❌
SELECT amount_cents as amount - ✅
SELECT amount_cents / 100.0 as amount
- ❌
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 when querying planning center tables. - RLS handles tenant and status filtering automatically
- Filter person status or inactivity flags when relevant
- Consider CTEs for complex multi-join queries
- Use direct ID columns when available instead of relationship tables
- Always use the