Saltar al contenido principal

Convención de Nombres para Base de Datos

Esta guía establece las convenciones de nomenclatura para instancias de Cloud SQL, bases de datos, esquemas, tablas y columnas.


Principios​

  1. Consistencia: Todas las instancias y objetos siguen el mismo patrón.
  2. Descubribilidad: El nombre debe indicar el proyecto, módulo y ambiente.
  3. Inmutabilidad: Los nombres no cambian después de la creación.

Instancias de Cloud SQL​

Formato​

<proyecto>-<modulo>db-<ambiente>

Componentes​

ComponenteDescripciónEjemplo
<proyecto>Prefijo del proyectomyapp
<modulo>Nombre del microservicio o módulousers, orders
dbSufijo fijo para identificar base de datosdb
<ambiente>Ambiente de desplieguedev, qa, prod

Ejemplos​

✅ Correcto❌ Incorrecto
myapp-usersdb-devusers-database-dev
myapp-ordersdb-prodmyapp-orders
myapp-inventorydb-qainventory_db_qa

Bases de Datos​

Formato​

<proyecto>_<modulo>_<ambiente>

Nota: Se usa snake_case con guiones bajos porque PostgreSQL convierte nombres a minúsculas.

Ejemplos​

  • myapp_users_dev
  • myapp_orders_prod
  • myapp_inventory_qa

Esquemas​

Formato​

<modulo>_schema  o  <Prefijo>Sch

Ejemplos​

  • users_schema
  • AppSch
  • OrdersSch
Esquema por Defecto

Si el proyecto usa un único esquema, utilizar un nombre genérico como app_schema o AppSch.


Tablas​

Formato por Tipo​

Tipo de TablaFormatoEjemplo
Catálogo (maestros)[Entidad]CatalogProductCatalog
Historial (logs)[Entidad]HistoryOrderHistory
Relación (N:M)[Entidad1][Entidad2]RelationProductCategoryRelation
Transaccional[Entidad]Order, Invoice

Reglas​

  • PascalCase: Usar mayúscula inicial en cada palabra.
  • Singular: Nombres en singular (Product, no Products).
  • Sin prefijos: No usar tbl_, tb_ o similares.

Ejemplos​

✅ Correcto❌ Incorrecto
UserCatalogtbl_users
OrderHistoryorders_history
ProductCategoryRelationproduct_category

Columnas​

Formato​

PascalCase

Campos Estándar​

Todas las tablas deben incluir estos campos de control:

CampoTipoDescripción
[Entidad]IdSERIAL / INTLlave primaria auto-incremental.
IsActiveBOOLEANEstado activo/inactivo (soft delete).
InsDatetimeTIMESTAMPFecha de creación del registro.
UpDatetimeTIMESTAMPFecha de última actualización.
UserEmailVARCHAR(100)Email del usuario que realizó la acción.

Ejemplos de Columnas​

✅ Correcto❌ Incorrecto
ProductIdproduct_id
IsActiveis_active
InsDatetimecreated_at
UserEmailuser_email

Índices​

Formato​

idx_<tabla>_<columna(s)>

Ejemplos​

  • idx_product_name
  • idx_order_customer_date
  • idx_user_email

Constraints​

Formato por Tipo​

TipoFormatoEjemplo
Primary Keypk_<tabla>pk_product
Foreign Keyfk_<tabla>_<tabla_ref>fk_order_customer
Uniqueuq_<tabla>_<columna>uq_user_email
Checkck_<tabla>_<condicion>ck_order_amount_positive

Secuencias​

Formato​

seq_<tabla>_<columna>

Ejemplos​

  • seq_product_id
  • seq_order_number

Script de Ejemplo​

-- Crear esquema
CREATE SCHEMA IF NOT EXISTS "AppSch";

-- Crear tabla de catálogo
CREATE TABLE "AppSch"."ProductCatalog" (
"ProductId" SERIAL PRIMARY KEY,
"ProductCode" VARCHAR(50) UNIQUE,
"ProductName" VARCHAR(100) NOT NULL,
"ProductDescription" TEXT,
"CategoryId" INT REFERENCES "AppSch"."CategoryCatalog"("CategoryId"),
"IsActive" BOOLEAN DEFAULT TRUE,
"InsDatetime" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
"UpDatetime" TIMESTAMP,
"UserEmail" VARCHAR(100) NOT NULL,

CONSTRAINT "pk_product" PRIMARY KEY ("ProductId"),
CONSTRAINT "uq_product_code" UNIQUE ("ProductCode")
);

-- Crear índice
CREATE INDEX "idx_product_name" ON "AppSch"."ProductCatalog"("ProductName");

Checklist de Verificación​

Antes de crear objetos en la base de datos:

  • El nombre de la instancia sigue el formato <proyecto>-<modulo>db-<ambiente>.
  • Las tablas usan PascalCase y sufijos de tipo (Catalog, History).
  • Las columnas usan PascalCase.
  • Los campos estándar (IsActive, InsDatetime, etc.) están presentes.
  • Los índices y constraints siguen la convención.

Temas Relacionados​