Planning Center Groups Data Model
This document provides complete documentation of the Planning Center Groups data model in Parable, including all tables, fields, and relationships.Overview
The Groups module contains 18 entity tables and 7 relationship tables supporting small groups, classes, teams, group events, attendance tracking, enrollment management, and event RSVPs.Visual Data Model
Core Entity Relationships
Key Relationships Explained
Group Structure:GROUP_TYPEcategorizes groups (small groups, classes, teams, etc.)GROUPs are organized by type with flexible hierarchiesMEMBERSHIPs link people to groups with roles (member, leader, owner)
ENROLLMENTtracks join requests and approvals- Separate from
MEMBERSHIPto handle pending/requested states - Once approved, becomes an active
MEMBERSHIP
- Groups host
EVENTs (meetings, activities, gatherings) ATTENDANCEtracks who actually attendedRSVPs track who plans to attendEVENT_NOTEs provide additional context
- Location association via
groups_group_relationships(relationship_type:location) - Campus linkage via
groups_group_relationships(relationship_type:campus) - Resource assignments via
groups_group_relationships
TAG_GROUPs organize related tagsTAGs enable flexible categorization across groups- Applied via relationship tables
Query Requirements
Schema Prefix
IMPORTANT: All tables in the Planning Center Groups module are in theplanning_center schema. You MUST prefix all table names with planning_center. in your queries.
✅ CORRECT: SELECT * FROM planning_center.groups_groups
❌ INCORRECT: SELECT * FROM groups_groups
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
groups_groups- Small groups, classes, and teamsgroups_people- People who can join groupsgroups_memberships- Connections between people and groupsgroups_events- Group meetings and gatheringsgroups_attendances- Event attendance recordsgroups_rsvps- Event RSVP responses from group membersgroups_group_types- Categories for organizing groupsgroups_locations- Physical meeting placesgroups_enrollments- Sign-up and registration management
Supporting Entity Tables
groups_campuses- Campus locationsgroups_campus_groups- Links between campuses and groupsgroups_event_notes- Notes for eventsgroups_group_applications- Applications to join groupsgroups_organizations- Organization settingsgroups_owners- Group ownership informationgroups_resources- Group resourcesgroups_tags- Labels for group characteristicsgroups_tag_groups- Tag groupings
Relationship Tables
groups_group_relationships- Links groups to other entitiesgroups_membership_relationships- Links memberships to related entitiesgroups_event_relationships- Links events to related entitiesgroups_attendance_relationships- Links attendances to related entitiesgroups_rsvp_relationships- Links RSVPs to events, groups, and peoplegroups_enrollment_relationships- Links enrollments to related entitiesgroups_group_application_relationships- Links applications to related entities
Table Definitions
groups_groups
Small groups, classes, teams, and other group entities.groups_people
People who can participate in groups.groups_memberships
Connections between people and groups with roles.
Note: This table uses direct ID columns for performance optimization.
groups_events
Group meetings, gatherings, and activities.groups_attendances
Records of who attended which events.groups_rsvps
RSVP responses for group events, tracking whether people plan to attend.
Note: RSVPs are linked to Events, Groups, and People through the
groups_rsvp_relationships table. Use relationship joins to access the event, group, or person associated with each RSVP.
groups_group_types
Categories for organizing and configuring groups.groups_locations
Physical locations where groups meet.groups_enrollments
Group enrollment and registration management.groups_tags
Labels for categorizing and filtering groups.groups_tag_groups
Groupings for organizing tags.groups_campuses
Campus locations for multi-site organizations.groups_group_applications
Applications to join groups requiring approval.groups_event_notes
Notes and annotations for events.groups_organizations
Organization configuration and settings.groups_owners
Group ownership and management information.groups_resources
Resources associated with group types.groups_campus_groups
Links between campuses and groups.Relationship Tables
groups_group_relationships
Links groups to related entities like types, locations, and tags.
Common relationship types:
GroupType- Links to groups_group_typesLocation- Links to groups_locationsTag- Links to groups_tagsEnrollment- Links to groups_enrollmentsCampus- Links to groups_campuses
groups_membership_relationships
Links memberships to additional related entities.groups_event_relationships
Links events to groups and locations.
Common relationship types:
Group- Links to groups_groupsLocation- Links to groups_locations
groups_attendance_relationships
Links attendance records to events and people.
Common relationship types:
Event- Links to groups_eventsPerson- Links to groups_people
groups_rsvp_relationships
Links RSVPs to their associated events, groups, and people.
Common relationship types:
Event- Links to groups_eventsGroup- Links to groups_groupsPerson- Links to groups_people
groups_enrollment_relationships
Links enrollments to related entities.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
Common Query Patterns
Finding a Person’s Groups
Getting Group Members with Roles
Finding Events for a Group
Tracking Event Attendance
Event RSVPs Summary
Finding RSVPs for a Person
Groups by Type
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: Group event fees or donations stored in cents should be divided by 100.0 for display
- Archived Groups: Use
archived_at IS NULLorarchived_atcomparisons to control visibility instead of checkingsystem_status - Direct ID Columns: Core tables such as
groups_groupsandgroups_membershipsexpose direct IDs for performance-sensitive joins
Common Mistakes to Avoid
-
Missing Schema Prefix
- ❌
FROM groups_groups - ✅
FROM planning_center.groups_groups
- ❌
-
Adding Redundant RLS Filters
- ❌
WHERE tenant_organization_id = 1 AND system_status = 'active' - ✅ Trust RLS to handle this automatically
- ❌
-
Joining Without Schema
- ❌
JOIN groups_memberships m ON ... - ✅
JOIN planning_center.groups_memberships m ON ...
- ❌
-
Skipping Currency Conversion
- ❌
SELECT suggested_donation_cents as suggested_donation - ✅
SELECT suggested_donation_cents / 100.0 as suggested_donation
- ❌
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 archived groups or attendance flags when relevant
- Consider CTEs for complex multi-join queries
- Use direct ID columns when available instead of relationship tables
- Always use the
Data Types and Conventions
Location Preferences
physical- In-person meetingsvirtual- Online meetingshybrid- Both in-person and online
Roles
member- Regular group memberleader- Group leader with additional permissions
RSVP Responses
yes- Person plans to attendno- Person will not attendmaybe- Person is undecided
Application Status
pending- Awaiting reviewapproved- Accepted into grouprejected- Not accepted
Next Steps
- Return to Overview for high-level understanding
- Review Basic Queries for simple examples
- Check Advanced Queries for complex analysis
- See Reporting Examples for production-ready reports