---
title: "Database Model"
description: "Overview of the Formbricks database schema and relationships"
icon: "database"
---

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
erDiagram
    Organization ||--o{ Project : "has many"
    Organization ||--o{ Membership : "has many"
    Organization ||--o{ Team : "has many"
    Organization ||--o{ Invite : "sends"

    Project ||--o{ Environment : "has two"
    Project ||--o{ Language : "supports"
    Project ||--o{ ProjectTeam : "has"

    Environment ||--o{ Survey : "contains"
    Environment ||--o{ Contact : "tracks"
    Environment ||--o{ ActionClass : "defines"
    Environment ||--o{ ApiKey : "has"
    Environment ||--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{ ProjectTeam : "has access to"


    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 & Project Management

1. **Organization**

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

2. **Project**

   - Groups related surveys and configurations
   - Has two environments (production/development)
   - Controls branding and display settings

3. **Environment**
   - Isolates production and development resources
   - Contains surveys, contacts, and actions
   - Manages API keys and integrations

### 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 project 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 projects
   - Users can belong to multiple organizations
   - Resources are scoped to organizations

2. **Environment-level isolation**

   - Separate production and development environments
   - Independent surveys, contacts, and actions
   - Isolated API keys and integrations

3. **Project-level isolation**
   - Project-specific configurations
   - Separate language settings
   - Team-based access control

## 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 environment-specific 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                            |
| Environment           | Manages production/development environments within projects            |
| 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 projects and team management                   |
| Project               | Groups related surveys and environments                                |
| ProjectTeam           | Manages team access permissions to projects                            |
| 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                               |
| 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.
