Overview
Tambo360 uses PostgreSQL 15 as its primary database and Prisma as the ORM (Object-Relational Mapping) tool. This guide covers database installation, configuration, schema management, and migrations.Prisma provides type-safe database access with automatic migration generation and a powerful query builder.
Database Technology Stack
PostgreSQL
Version 15
Prisma ORM
Version 5.22.0
Prisma Client
Version 5.22.0
Install PostgreSQL
- Docker (Recommended)
- Ubuntu/Debian
- macOS
- Windows
The easiest way to run PostgreSQL is using Docker:
This command uses port 5433 on the host to avoid conflicts with existing PostgreSQL installations.
Verify Installation
Database Configuration
Create Database
Create the Tambo360 database:Database Connection String
Set theDATABASE_URL environment variable:
Prisma Schema
The Prisma schema defines the database structure. Located atapps/backend/prisma/schema.prisma:
schema.prisma
Database Schema Overview
Core Models
Usuario (User)
Usuario (User)
Stores user authentication and account information.Fields:
idUsuario: Unique UUID identifiercorreo: Email address (unique)contrasena: Hashed passwordnombre: User’s name (max 50 characters)verificado: Email verification statusfechaCreacion: Account creation timestamp
- Has many
Establecimiento(establishments) - Has many
VerificarToken(verification tokens)
Establecimiento (Establishment)
Establecimiento (Establishment)
Represents dairy farm establishments owned by users.Fields:
idEstablecimiento: Unique UUID identifiernombre: Establishment namelocalidad: City/localityprovincia: Province/statefechaCreacion: Creation timestampidUsuario: Owner’s user ID
- Belongs to one
Usuario - Has many
LoteProduccion(production batches)
Producto (Product)
Producto (Product)
Catalog of dairy products that can be produced.Fields:
idProducto: Unique UUID identifiernombre: Product namecategoria: Category (quesos/leches)
- Has many
LoteProduccion
LoteProduccion (Production Batch)
LoteProduccion (Production Batch)
Tracks individual production batches with costs and waste.Fields:
idLote: Unique UUID identifiernumeroLote: Auto-incrementing batch numberfechaProduccion: Production datecantidad: Quantity producedunidad: Unit of measurement (kg/litros)estado: Status flag
- Belongs to
ProductoandEstablecimiento - Has many
Merma(waste records) - Has many
CostosDirecto(direct costs)
Merma (Waste/Loss)
Merma (Waste/Loss)
Records production waste and losses.Fields:
idMerma: Unique UUID identifiertipo: Type of waste (Natural/Tecnica/Administrativa/Danio)cantidad: Quantity lostobservacion: Optional notesfechaCreacion: Timestamp
- Belongs to one
LoteProduccion
CostosDirecto (Direct Costs)
CostosDirecto (Direct Costs)
Tracks direct costs associated with production batches.Fields:
idCostoDirecto: Unique UUID identifierconcepto: Cost concept/categorymonto: Amount (decimal with 13 digits, 2 decimal places)observaciones: Optional notesfechaCreacion: Timestamp
- Belongs to one
LoteProduccion
VerificarToken (Verification Token)
VerificarToken (Verification Token)
Stores tokens for email verification and password recovery.Fields:
tokenid: Unique UUID identifieridUsuario: Associated user IDtipo: Token type (verificacion/recuperacion)tokenHash: Hashed token valueexpiraEn: Expiration timestampusadoEn: Usage timestamp (nullable)creadoEn: Creation timestamp
- Composite index on
(idUsuario, tipo)for fast lookups
Running Migrations
Create initial migration
- Creates a new migration file in
prisma/migrations/ - Applies the migration to your development database
- Generates Prisma Client
Prisma Commands Reference
Schema Management
Migration Management
Database Introspection
Prisma Studio
Open a visual database editor:Prisma Studio provides a user-friendly GUI for browsing and editing database records.
Database Seeding
The seed script populates initial product data:src/lib/seedProductos.ts
Backup and Restore
Backup Database
Restore Database
Performance Optimization
Database Indexes
The schema includes an index onVerificarToken(idUsuario, tipo) for fast token lookups:
Connection Pooling
For production, configure connection pooling in the DATABASE_URL:Query Optimization
Use Prisma’sselect and include for efficient queries:
Troubleshooting
Cannot connect to database
Cannot connect to database
Check if PostgreSQL is running:
Migration failed
Migration failed
Check migration status and resolve:
Prisma Client out of sync
Prisma Client out of sync
Regenerate Prisma Client:
Permission denied errors
Permission denied errors
Grant proper permissions to database user:
Best Practices
Use Migrations
Always use Prisma migrations instead of manual schema changes.
Version Control
Commit migration files to version control.
Backup Regularly
Schedule automated backups of production databases.
Test Migrations
Test all migrations in staging before production deployment.
Next Steps
Environment Variables
Configure DATABASE_URL and other settings
API Reference
Learn how to query the database via API
Deployment
Deploy your database to production
