Skip to main content

Schema Overview

VIP2CARS uses a relational database schema with 10 tables divided into three categories:
  1. Core Business Tables - Client and vehicle management
  2. Authentication Tables - User management and sessions
  3. System Tables - Cache, jobs, and queue management

Core Business Tables

Clientes (Clients)

The clientes table stores client/customer information.
id_cliente
bigint unsigned
required
Primary key - Auto-incrementing client identifier
nombres
varchar(255)
required
Client’s first name(s)
apellidos
varchar(255)
required
Client’s last name(s)
nro_documento
varchar(255)
required
Document/ID number - Unique constraint
correo
varchar(255)
required
Email address - Unique constraint
telefono
varchar(255)
required
Phone number
created_at
timestamp
default:"null"
Record creation timestamp
updated_at
timestamp
default:"null"
Record last update timestamp
Migration File: 2026_03_04_001541_create_clientes_table.php Indexes:
  • Primary Key: id_cliente
  • Unique: nro_documento
  • Unique: correo
Relationships:
  • Has many vehiculos (one-to-many)

Vehiculos (Vehicles)

The vehiculos table stores vehicle information linked to clients.
id_vehiculo
bigint unsigned
required
Primary key - Auto-incrementing vehicle identifier
placa
varchar(255)
required
License plate number - Unique constraint
marca
varchar(255)
required
Vehicle brand/manufacturer
modelo
varchar(255)
required
Vehicle model
anio_fabricacion
integer
required
Manufacturing year (4 digits)
id_cliente
bigint unsigned
required
Foreign key referencing clientes.id_cliente
created_at
timestamp
default:"null"
Record creation timestamp
updated_at
timestamp
default:"null"
Record last update timestamp
Migration File: 2026_03_04_001547_create_vehiculos_table.php Indexes:
  • Primary Key: id_vehiculo
  • Unique: placa
  • Foreign Key: id_cliente
Foreign Key Constraint:
$table->foreign('id_cliente')
      ->references('id_cliente')
      ->on('clientes')
      ->onDelete('cascade');
Cascade deletion is enabled: when a client is deleted, all associated vehicles are automatically removed.
Relationships:
  • Belongs to clientes (many-to-one)

Authentication Tables

Users

The users table stores authenticated system users.
id
bigint unsigned
required
Primary key - Auto-incrementing user identifier
name
varchar(255)
required
User’s full name
email
varchar(255)
required
Email address - Unique constraint
email_verified_at
timestamp
default:"null"
Email verification timestamp
password
varchar(255)
required
Hashed password
remember_token
varchar(100)
default:"null"
Remember me token for persistent login
two_factor_secret
text
default:"null"
Encrypted two-factor authentication secret
two_factor_recovery_codes
text
default:"null"
Encrypted 2FA recovery codes
two_factor_confirmed_at
timestamp
default:"null"
Timestamp when 2FA was confirmed
created_at
timestamp
default:"null"
Account creation timestamp
updated_at
timestamp
default:"null"
Account last update timestamp
Migration Files:
  • 0001_01_01_000000_create_users_table.php
  • 2025_08_14_170933_add_two_factor_columns_to_users_table.php
Indexes:
  • Primary Key: id
  • Unique: email

Password Reset Tokens

The password_reset_tokens table stores password reset tokens.
email
varchar(255)
required
Primary key - User’s email address
token
varchar(255)
required
Password reset token
created_at
timestamp
default:"null"
Token creation timestamp
Migration File: 0001_01_01_000000_create_users_table.php Indexes:
  • Primary Key: email

Sessions

The sessions table stores active user sessions.
id
varchar(255)
required
Primary key - Session identifier
user_id
bigint unsigned
default:"null"
Foreign key referencing users.id - Indexed
ip_address
varchar(45)
default:"null"
IP address of the session (supports IPv6)
user_agent
text
default:"null"
Browser user agent string
payload
longtext
required
Serialized session data
last_activity
integer
required
Unix timestamp of last activity - Indexed
Migration File: 0001_01_01_000000_create_users_table.php Indexes:
  • Primary Key: id
  • Index: user_id
  • Index: last_activity

System Tables

Cache

The cache table stores application cache data.
key
varchar(255)
required
Primary key - Cache key identifier
value
mediumtext
required
Cached value
expiration
integer
required
Unix timestamp for cache expiration - Indexed
Migration File: 0001_01_01_000001_create_cache_table.php Indexes:
  • Primary Key: key
  • Index: expiration

Cache Locks

The cache_locks table manages cache lock mechanisms.
key
varchar(255)
required
Primary key - Lock key identifier
owner
varchar(255)
required
Lock owner identifier
expiration
integer
required
Unix timestamp for lock expiration - Indexed
Migration File: 0001_01_01_000001_create_cache_table.php Indexes:
  • Primary Key: key
  • Index: expiration

Jobs

The jobs table stores queued jobs for background processing.
id
bigint unsigned
required
Primary key - Auto-incrementing job identifier
queue
varchar(255)
required
Queue name - Indexed
payload
longtext
required
Serialized job data
attempts
tinyint unsigned
required
Number of processing attempts
reserved_at
integer unsigned
default:"null"
Unix timestamp when job was reserved
available_at
integer unsigned
required
Unix timestamp when job becomes available
created_at
integer unsigned
required
Unix timestamp of job creation
Migration File: 0001_01_01_000002_create_jobs_table.php Indexes:
  • Primary Key: id
  • Index: queue

Job Batches

The job_batches table tracks batched job execution.
id
varchar(255)
required
Primary key - Batch identifier
name
varchar(255)
required
Batch name
total_jobs
integer
required
Total number of jobs in batch
pending_jobs
integer
required
Number of pending jobs
failed_jobs
integer
required
Number of failed jobs
failed_job_ids
longtext
required
Serialized list of failed job IDs
options
mediumtext
default:"null"
Batch options
cancelled_at
integer
default:"null"
Unix timestamp when batch was cancelled
created_at
integer
required
Unix timestamp of batch creation
finished_at
integer
default:"null"
Unix timestamp when batch finished
Migration File: 0001_01_01_000002_create_jobs_table.php Indexes:
  • Primary Key: id

Failed Jobs

The failed_jobs table stores jobs that failed processing.
id
bigint unsigned
required
Primary key - Auto-incrementing identifier
uuid
varchar(255)
required
Unique identifier - Unique constraint
connection
text
required
Database connection name
queue
text
required
Queue name
payload
longtext
required
Serialized job data
exception
longtext
required
Exception stack trace
failed_at
timestamp
default:"CURRENT_TIMESTAMP"
Timestamp when job failed
Migration File: 0001_01_01_000002_create_jobs_table.php Indexes:
  • Primary Key: id
  • Unique: uuid

Entity Relationship Diagram

┌─────────────┐         ┌──────────────┐
│  clientes   │         │  vehiculos   │
├─────────────┤         ├──────────────┤
│ id_cliente  │───┐     │ id_vehiculo  │
│ nombres     │   │     │ placa        │
│ apellidos   │   │     │ marca        │
│ nro_documento│  └────>│ id_cliente   │ (FK)
│ correo      │         │ modelo       │
│ telefono    │         │ anio_fabricacion│
│ created_at  │         │ created_at   │
│ updated_at  │         │ updated_at   │
└─────────────┘         └──────────────┘
     1                         *
  (One Client)         (Many Vehicles)
The relationship between clientes and vehiculos is one-to-many with cascade deletion.

Eloquent Model Relationships

Cliente Model

public function vehiculos()
{
    return $this->hasMany(Vehiculo::class, 'id_cliente', 'id_cliente');
}

Vehiculo Model

public function cliente()
{
    return $this->belongsTo(Cliente::class, 'id_cliente', 'id_cliente');
}

Database Conventions

  1. Primary Keys: Custom primary keys (id_cliente, id_vehiculo) for business tables
  2. Foreign Keys: Explicit foreign key constraints with cascade deletion
  3. Timestamps: Standard Laravel created_at and updated_at columns
  4. Unique Constraints: Applied to business-critical fields (email, document number, license plate)
  5. Indexing: Strategic indexes on foreign keys and frequently queried fields
  6. Naming: Spanish naming for business tables, English for system tables

Migration Execution Order

  1. 0001_01_01_000000_create_users_table.php
  2. 0001_01_01_000001_create_cache_table.php
  3. 0001_01_01_000002_create_jobs_table.php
  4. 2025_08_14_170933_add_two_factor_columns_to_users_table.php
  5. 2026_03_04_001541_create_clientes_table.php
  6. 2026_03_04_001547_create_vehiculos_table.php
Migrations must be run in order due to foreign key dependencies. The clientes table must exist before vehiculos.

Data Integrity

Validation Rules

Cliente:
  • nombres: Required, string, max 255 characters
  • apellidos: Required, string, max 255 characters
  • nro_documento: Required, string, unique
  • correo: Required, email format, unique
  • telefono: Required, string, max 20 characters
Vehiculo:
  • placa: Required, string, unique
  • marca: Required, string, max 255 characters
  • modelo: Required, string, max 255 characters
  • anio_fabricacion: Required, numeric, 4 digits
  • id_cliente: Required, must exist in clientes table

Cascade Operations

  • Delete Cliente → All associated vehiculos are deleted automatically
  • Update id_cliente → Not allowed (no cascade update defined)

Build docs developers (and LLMs) love