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