Database Architecture
The sistema uses SQL Server as the relational database, accessed through Entity Framework Core 9.0 using a code-first approach.Database Overview
Database Name:SistemaSolicitudes
Connection String:
Entity Framework Core Context
TheSistemaSolicitudesContext class serves as the main data access layer:
Location: SolicitudesAPI/Models/SistemaSolicitudesContext.cs
Database Tables
Expedientes Table
Purpose: Stores all requests/cases (expedientes) in the system. Table Name:Expedientes (default from DbSet name)
Schema Definition
| Column Name | Data Type | Constraints | Description |
|---|---|---|---|
ID | int | PRIMARY KEY | Auto-generated unique identifier |
Folio | varchar(50) | Unique case/file number | |
NombreSolicitante | varchar(50) | Name of the person making the request | |
ContenidoSolicitud | nvarchar(max) | Full content/details of the request | |
Estado | varchar(50) | Current status of the expediente | |
FechaInicio | datetime | Date when the expediente was initiated | |
SubsanaPrevencion_ReinicoTramite | bit | Flag indicating if process needs to be restarted |
Entity Configuration
C# Entity Model
Location:SolicitudesAPI/Models/Expediente.cs
Business Logic
Status Values (Estado): Common values might include:- āPendienteā - Pending
- āEn Procesoā - In Progress
- āCompletadoā - Completed
- āRechazadoā - Rejected
- āSuspendidoā - Suspended
- Track all information requests
- Monitor request status and progression
- Calculate deadlines based on FechaInicio
- Handle process restarts via SubsanaPrevencion flag
Usuarios Table
Purpose: Stores system users for authentication and authorization. Table Name:Usuarios
Schema Definition
| Column Name | Data Type | Constraints | Description |
|---|---|---|---|
ID | int | PRIMARY KEY | Auto-generated user identifier |
NombreUsuario | varchar(50) | Username for login | |
password | varchar(4000) | Hashed password | |
Rol | varchar(50) | User role (admin, user, etc.) |
Entity Configuration
C# Entity Model
Location:SolicitudesAPI/Models/Usuario.cs
Security Considerations
Password Storage:- Should use hashing algorithms (BCrypt, Argon2, PBKDF2)
- Never store plaintext passwords
- Consider using ASP.NET Core Identity for robust user management
- āAdminā - Full system access
- āUsuarioā - Standard user access
- āSupervisorā - Management access
Calendario Table
Purpose: Tracks calendar entries for deadline calculation and event management. Table Name:Calendario
Schema Definition
| Column Name | Data Type | Constraints | Description |
|---|---|---|---|
ID | int | PRIMARY KEY, NOT AUTO-INCREMENT | Manual ID assignment |
| Additional fields | Calendar-specific data |
Entity Configuration
C# Entity Model
Location:SolicitudesAPI/Models/Calendario.cs
Use Cases
- Track working days vs non-working days
- Calculate deadline dates
- Manage official holidays
- Support business day calculations
DiaInhabilManual Table
Purpose: Stores manually defined non-working days (holidays, special closures). Table Name:DiaInhabilManual
C# Entity Model
Location:SolicitudesAPI/Models/DiaInhabilManual.cs
Use Cases
- Define custom non-working days
- Override default calendar
- Add special closure dates
- Support flexible deadline calculations
Database Relationships
Current Implementation
The current schema uses a simple, denormalized structure with no explicit foreign key relationships between tables:- Expedientes - Standalone table
- Usuarios - Standalone table
- Calendario - Standalone table
- DiaInhabilManual - Standalone table
Potential Enhancements
Future improvements could include:- User-Expediente Relationship:
- Audit Trail:
- Status History:
Data Access Patterns
Async Operations
All database operations use async/await:Query Optimization
Read-Only Queries:Database Migrations
Migration Workflow
Create Migration:Migration Best Practices
- Descriptive Names: Use clear migration names (e.g.,
AddExpedienteStatusColumn) - Review Generated Code: Always review the migration before applying
- Test First: Test migrations in development before production
- Backup: Always backup production database before migrations
- Source Control: Commit migrations to version control
Database Configuration
Connection String
Development (appsettings.json):- Azure Key Vault
- Environment variables
- User secrets (development)
DbContext Registration
Program.cs:Performance Considerations
Indexing Strategy
Recommended indexes:Query Optimization
- Use
AsNoTracking()for read-only queries - Avoid loading unnecessary data with
Select() - Use pagination for large result sets
- Consider compiled queries for frequently used queries
Connection Pooling
EF Core and ADO.NET automatically handle connection pooling. Default settings are usually sufficient.Backup and Recovery
Backup Strategy
SQL Server Backup:- Full backup: Daily
- Differential backup: Every 6 hours
- Transaction log backup: Every hour
Data Validation
Entity Validation
Use Data Annotations or Fluent API:Business Rules
Implement in services or repository layer:- Validate state transitions
- Ensure data integrity
- Enforce business constraints
Next Steps
- Backend Architecture - How the API interacts with the database
- Development Setup - Setting up the database locally
- Project Structure - Understanding the codebase organization