Skip to main content

ADR-004: Use PostgreSQL

Status

Accepted

Date

2026-07-20

Context

Chilarai requires a primary data store capable of supporting:

  • Multi-tenant architecture
  • School administration
  • Student records
  • Admissions workflows
  • Attendance management
  • Fee management
  • Academic structures
  • Reporting and analytics
  • Future integrations

The data model is expected to contain highly relational business entities with strong consistency requirements.

The database platform must support long-term growth while remaining affordable and operationally simple during the startup phase.

Decision Drivers

The selected database should:

  • Support transactional consistency
  • Handle highly relational data models
  • Be open source
  • Have strong community adoption
  • Support cloud-native deployments
  • Scale from small to large workloads
  • Integrate well with NestJS and TypeScript tooling
  • Support reporting and analytical workloads
  • Minimize operational complexity
  • Avoid vendor lock-in

Alternatives Considered

Option 1: MySQL

Advantages

  • Mature ecosystem
  • Broad hosting support
  • Strong community adoption
  • Familiar to many developers

Disadvantages

  • Less sophisticated feature set compared to PostgreSQL
  • Weaker support for advanced data types
  • Less flexibility for future analytical requirements

Assessment

A viable option but provides fewer capabilities than PostgreSQL without offering significant advantages for the project.


Option 2: Microsoft SQL Server

Advantages

  • Enterprise-grade capabilities
  • Strong tooling
  • Excellent reporting ecosystem
  • Mature operational model

Disadvantages

  • Licensing costs
  • Increased operational overhead
  • Greater dependency on Microsoft-specific infrastructure

Assessment

An excellent enterprise platform, but unnecessary for the current stage of the product.


Option 3: MongoDB

Advantages

  • Flexible document model
  • Rapid schema evolution
  • Good developer experience

Disadvantages

  • Less suitable for highly relational data
  • Increased complexity when implementing relational business rules
  • More difficult reporting and transactional workflows

Assessment

The Chilarai domain is fundamentally relational and therefore does not naturally align with a document-oriented database.


Option 4: PostgreSQL

Advantages

  • Open source
  • Strong ACID compliance
  • Excellent relational capabilities
  • Mature ecosystem
  • Cloud provider support
  • JSON support when needed
  • Strong reporting capabilities
  • Proven scalability

Disadvantages

  • Requires schema design discipline
  • Slightly steeper learning curve than some alternatives
  • Database tuning becomes important as scale increases

Assessment

Provides the strongest overall combination of capabilities, flexibility, maturity, and cost effectiveness.

Decision

Use PostgreSQL as the primary database platform for Chilarai.

All business-critical transactional data will be stored in PostgreSQL.

Rationale

The Chilarai domain is highly relational.

Examples include:

  • School -> Academic Year
  • School -> Classes
  • Student -> Admissions
  • Student -> Attendance
  • Student -> Fees
  • User -> Roles
  • Tenant -> Schools

These relationships benefit from:

  • Referential integrity
  • Transactions
  • Foreign keys
  • Strong consistency guarantees

PostgreSQL provides these capabilities while remaining open source and cloud portable.

The platform also supports JSON data when flexibility is required, allowing relational and semi-structured data to coexist within the same system.

Compared to SQL Server, PostgreSQL provides lower cost and reduced vendor dependency.

Compared to MongoDB, PostgreSQL provides a more natural fit for the business domain.

Consequences

Positive Consequences

  • Strong data integrity
  • Excellent support for relational models
  • Lower infrastructure costs
  • Cloud portability
  • Mature tooling ecosystem
  • Large talent pool
  • Long-term scalability

Negative Consequences

  • Requires careful schema design
  • Future migrations must be managed carefully
  • Query optimization becomes important as data volume increases

Follow-up Actions

  • Define tenant isolation strategy
  • Establish migration strategy
  • Evaluate ORM options
  • Define backup and recovery procedures
  • Create initial domain schema