Volver al inicio

ArchDB: esquemas de BD modulares como código

ArchDB convierte esquemas de BD en código versionado con plantillas y módulos. La descripción declarativa elimina duplicados, genera DDL y documentación. Ejemplos: Core, Product, Order para comercio electrónico.

ArchDB en la práctica: plantillas y módulos de BD
Advertisement 728x90

Ingeniería de Esquemas Modulares con ArchDB: Plantillas, Paquetes y Modelado Declarativo

ArchDB permite describir la estructura de la base de datos de forma declarativa en archivos .adb, integrándola en un repositorio Git. Las plantillas eliminan la duplicación de campos de auditoría e identificación, mientras que los Paquetes descomponen un monolito en módulos independientes. El modelo genera DDL, documentación y diagramas. Este enfoque acelera las revisiones de cambios y la sincronización con ORMs.

// Core.adb - plantillas base
Package com.example.ecommerce.Core

Template IdentifiableUuid {
  id uuid [pk, default: `gen_random_uuid()`]
}

Template Auditable {
  created_at timestamp [not_null, default: `now()`]
  created_by uuid [ref: > User.id, nullable]
  updated_at timestamp [default: `now()`]
  updated_by uuid [ref: > User.id, nullable]
  indexes {
    idx_created_at (created_at)
  }
}

Template BusinessEntity extends IdentifiableUuid, Auditable {
  version_no integer [default: 1]
  status varchar(50) [default: 'active']
}

Plantillas para Reutilización

Las plantillas se componen mediante extends, heredando campos e índices. BusinessEntity combina identificación, auditoría y control de versiones. Aplicarlo a una tabla User añade todos los campos automáticamente:

  • UUID id con PK y un generador por defecto
  • Campos created_at/updated_at con índices
  • version_no para bloqueo optimista

Las verificaciones e índices únicos se configuran a nivel de tabla:

Google AdInline article slot
Table User extends BusinessEntity {
  email varchar(255) [unique, not_null]
  password_hash text [not_null]
  checks {
    `char_length(password_hash) >= 8`
  }
}

Los Grupos Lógicos mejoran la visualización en la documentación asignando colores y descripciones.

Descomposición Modular mediante Paquetes

Cada archivo .adb es un Paquete separado con importaciones. Product.adb importa Core.adb para extender BusinessEntity:

// Product.adb
Package com.example.ecommerce.Product
import "com.example.ecommerce.Core.adb" version 3.4.0

export Product as "com.example.ecommerce.Product" version 3.6.0

Table Product extends Core.BusinessEntity {
  sku varchar(50) [unique, not_null]
  price decimal(12, 2) [not_null]
  stock_quantity integer [default: 0]
  available_quantity integer [generated: `stock_quantity - reserved_quantity`]
  checks {
    `price >= cost_price`
    `reserved_quantity <= stock_quantity`
  }
}

Los campos generados se calculan a nivel de base de datos. Relation describe relaciones M:N:

Google AdInline article slot
Relation ProductCategory {
  Product.id <-> Category.id
}

El control de versiones (export ... version) garantiza la compatibilidad de los módulos.

| Ventaja | Descripción |

|-----------|-------------|

Google AdInline article slot

| Independencia | Desarrollo paralelo de módulos |

| Control de versiones | Git + versionado semántico para importaciones |

| Reutilización | Plantillas distribuidas mediante bibliotecas |

Entidades Avanzadas: Pedidos y Enumeraciones

Order.adb importa Core y Product, añadiendo tipos de dominio:

// Order.adb
import "com.example.ecommerce.Core.adb" version 3.4.0
import "com.example.ecommerce.Product.adb" version 3.6.0

Enum OrderStatus {
  pending [note: "Esperando pago"]
  paid
  shipped
  cancelled
}

Table Order extends Core.BusinessEntity {
  user_id uuid [ref: > Core.User.id]
  status OrderStatus [default: 'pending']
  total_amount decimal(12, 2) [not_null]
}

Enum se integra como tipo de campo. Eliminación en cascada (on_delete: cascade) en FK.

Conclusiones Clave

  • Declarativo: Describe el estado deseado; los generadores crean DDL y migraciones.
  • Modularidad: Paquete + import/export para desarrollo independiente y CI/CD.
  • Plantillas: extends compone campos de auditoría, borrado lógico, lógica de negocio sin copiar-pegar.
  • Validación: Verificaciones a nivel de esquema, campos generados para cálculos.
  • Documentación: note, Group, Metadata generan diagramas y README.

Consejos para Implementación Práctica

  • Crea un Core.adb base con plantillas Identifiable, Auditable, SoftDeletable.
  • Divide el monolito en Paquetes por dominio: User, Product, Order.
  • Configura hooks de Git para validación del esquema antes de commits.
  • Integra con CI: Generación de DDL, pruebas de esquema, actualizaciones de documentación.
  • Para ORMs: Scripts para generar entidades desde .adb.

Metadata y Project establecen el contexto: database: "postgresql", version, author.

— Editorial Team

Advertisement 728x90

Leer después