> ## Documentation Index
> Fetch the complete documentation index at: https://formbricks.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Database Model

> Overview of the Formbricks database schema and relationships

Formbricks uses PostgreSQL as its primary database and [Prisma](https://www.prisma.io/) as the Object-Relational Mapping (ORM) tool. The database schema is designed to support multi-tenancy, survey management, and response collection while maintaining data isolation between organizations.

## Entity Relationship Diagram

The following diagram shows the core entities and their relationships in the Formbricks database:

```mermaid theme={null}
erDiagram
    Organization ||--o{ Workspace : "has many"
    Organization ||--o{ Membership : "has many"
    Organization ||--o{ Team : "has many"
    Organization ||--o{ Invite : "sends"

    Workspace ||--o{ Language : "supports"
    Workspace ||--o{ WorkspaceTeam : "has"

    Workspace ||--o{ Survey : "contains"
    Workspace ||--o{ Contact : "tracks"
    Workspace ||--o{ ActionClass : "defines"
    Workspace ||--o{ ApiKeyWorkspace : "has"
    Workspace ||--o{ Integration : "configures"

    Survey ||--o{ Response : "receives"
    Survey ||--o{ Display : "tracks"
    Survey ||--o{ SurveyTrigger : "configured by"
    Survey ||--o{ SurveyAttributeFilter : "filtered by"
    Survey ||--o{ SurveyLanguage : "translated to"

    Contact ||--o{ Response : "provides"
    Contact ||--o{ Display : "sees"
    Contact ||--o{ ContactAttribute : "has"

    User ||--o{ Membership : "belongs to"
    User ||--o{ Account : "has"
    User ||--o{ TeamUser : "member of"

    Team ||--o{ TeamUser : "includes"
    Team ||--o{ WorkspaceTeam : "has access to"
    ApiKey ||--o{ ApiKeyWorkspace : "scopes"


    Response ||--o{ TagsOnResponses : "tagged with"

    Tag ||--o{ TagsOnResponses : "applied to"

    ActionClass ||--o{ SurveyTrigger : "triggers"

    ContactAttributeKey ||--o{ ContactAttribute : "defines"
    ContactAttributeKey ||--o{ SurveyAttributeFilter : "used in"
```

## Core Models

### Organization & Workspace Management

1. **Organization**

   * Top-level entity for multi-tenancy
   * Contains multiple Workspaces and team members
   * Manages billing and whitelabel settings

2. **Workspace**

   * Main grouping mechanism for surveys and related configuration
   * Belongs to a single organization
   * Controls branding and display settings

3. **WorkspaceTeam**
   * Maps teams to Workspaces
   * Controls Workspace-level access permissions
   * Enables scoped collaboration across teams

### Survey Management

1. **Survey**

   * Central model for questionnaires
   * Configurable with multiple questions and display rules
   * Supports multiple languages and targeting filters

2. **Response**

   * Records user answers to surveys
   * Links to contact information when available
   * Supports tagging for analysis

3. **ActionClass**
   * Defines triggering points for surveys
   * Can be code-based or no-code configurations
   * Links surveys to specific user actions

### User Management

1. **User**

   * Represents system users (admins/team members)
   * Manages authentication and preferences
   * Can belong to multiple organizations

2. **Contact**

   * Represents survey respondents
   * Stores attributes for targeting
   * Tracks survey displays and responses

3. **Team**
   * Groups users within organizations
   * Controls Workspace access permissions
   * Facilitates collaborative survey management

## Data Isolation

The database schema ensures proper data isolation through:

1. **Organization-level isolation**

   * Each organization has its own Workspaces
   * Users can belong to multiple organizations
   * Resources are scoped to organizations

2. **Workspace-level isolation**

   * Independent surveys, contacts, action classes, and integrations
   * Isolated API key Workspace assignments
   * Workspace-specific configuration and styling defaults

3. **Team-based access isolation**

   * Teams are linked to Workspaces through `WorkspaceTeam`
   * Permissions are scoped per Workspace
   * Access can be delegated without exposing all organization resources

## Schema Management

The database schema is managed through Prisma, which provides:

* Type-safe database client
* Automatic migration generation
* Schema versioning
* Data validation
* Query optimization

For detailed information about specific models and their properties, refer to the [schema.prisma](https://github.com/formbricks/formbricks/blob/main/packages/database/schema.prisma) file in the repository.

## PostgreSQL Database Tables

Formbricks stores all data in PostgreSQL tables. Here's a comprehensive list of all database tables and their purposes:

| Table Name | Description |
| - | - |
| Account | Stores third-party authentication accounts (OAuth) and their tokens |
| ActionClass | Defines triggerable events that can launch surveys |
| ApiKey | Stores API authentication keys for organization-level access |
| ApiKeyWorkspace | Maps API keys to the Workspaces they can access |
| Contact | Records information about user that can receive and respond to surveys |
| ContactAttribute | Stores attribute values for contacts (e.g., role, company size) |
| ContactAttributeKey | Defines available attribute types for contacts |
| DataMigration | Tracks the status of database schema migrations |
| Display | Records when and to whom surveys were shown |
| Workspace | Main container for surveys, contacts, actions, integrations, and settings |
| Integration | Stores configuration for third-party service integrations |
| Invite | Manages pending invitations to join organizations |
| Language | Defines supported languages for multi-lingual surveys |
| Membership | Links users to organizations with specific roles |
| Organization | Top-level container for Workspaces and team management |
| Response | Stores survey responses and associated metadata |
| Segment | Defines groups of contacts based on attributes |
| Survey | Stores survey configurations, questions, and display rules |
| SurveyAttributeFilter | Defines targeting rules for surveys based on contact attributes |
| SurveyFollowUp | Configures automated actions based on survey responses |
| SurveyLanguage | Links surveys to their supported languages |
| SurveyTrigger | Connects surveys to their triggering actions |
| Tag | Stores labels for categorizing responses |
| TagsOnResponses | Junction table linking tags to responses |
| Team | Groups users within organizations |
| TeamUser | Links users to teams with specific roles |
| WorkspaceTeam | Manages team access permissions to Workspaces |
| User | Stores user account information and preferences |
| Webhook | Manages webhook endpoints for event notifications |

## Schema Reference

For detailed information about the database schema, including:

* Complete field definitions
* Relationships between tables
* Enums and custom types
* Field constraints and indices
* JSON field structures

Please refer to the [Prisma schema file](https://github.com/formbricks/formbricks/blob/main/packages/database/schema.prisma) in our GitHub repository.

The schema.prisma file contains extensive documentation comments for each model, making it the authoritative reference for the database structure.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.