🐘 Protocolo Antigravity: Skill Backend (Supabase)
Core Principle: "Supabase Native". Utiliza la potencia de Postgres antes de escribir código externo.
1. Principios Generales
- •Supabase-Native: RLS, Triggers, Functions y Realtime nativos preferidos sobre middleware externo.
- •Seguridad por Defecto (RLS): NUNCA crear una tabla pública sin Row Level Security habilitado.
- •Integridad: La base de datos es la fuente de la verdad. Usa Foreign Keys, Constraints y Tipos estrictos.
- •Escalabilidad: Evita N+1 y consultas no indexadas desde el día 1.
2. Nomenclatura (Naming Conventions)
- •Tablas:
snake_casey plural (ej.users,order_items). - •Columnas:
snake_case(ej.created_at,is_active). - •Funciones (RPC):
snake_case(ej.get_user_balance). - •IDs:
- •PK:
id(uuid v4). - •FK:
singular_table_name_id(ej.user_id->users.id).
- •PK:
3. Seguridad y RLS
🚨 Mandatorio:
ALTER TABLE table_name ENABLE ROW LEVEL SECURITY;
3.1. Políticas (Policies)
- •Definir políticas explícitas para
SELECT,INSERT,UPDATE,DELETE. - •Usar funciones helper seguras (ej.
auth.uid()). - •Evitar joins complejos en políticas que se ejecutan por cada fila (impacto de performance).
3.2. Roles
- •Entender y respetar la diferencia
anonvsauthenticated. - •Roles de servicio (
service_role) solo para tareas administrativas backend-only.
4. Estructura de Datos
- •UUID: Usar
gen_random_uuid()por defecto. - •Timestamps:
created_at(defaultnow()),updated_at. - •JSONB: Solo para datos flexibles sin esquema fijo. Preferir columnas relacionales.
5. Lógica de Negocio
- •Triggers: Para consistencia de datos (ej. actualizar
updated_at, contadores cacheados). - •Edge Functions: Para lógica compleja, integraciones externas (Stripe, AI), o webhooks.
- •Database Functions: Para operaciones atómicas transaccionales.
6. Performance Checklist
- • ¿Tienen índices las Foreign Keys?
- • ¿Están indexadas las columnas de filtrado frecuente (
WHERE,ORDER BY)? - • ¿Se usa
limit()y paginación en queries de listas? - • ¿RLS policies optimizadas (evitar select n+1 dentro de policies)?
7. Control de Cambios
- •Migraciones: Todo cambio de esquema va en un archivo de migración
.sql. - •No UI Edits: No editar esquema manualmente en producción desde el dashboard.
8. Calidad SQL
Consulta la skill
quality-assurancepara detalles.
- •Linting: SQL debe ser legible y formateado (
sqlfluff). - •Testing: Unit tests para Edge Functions complejas y PL/pgSQL functions críticas.
Recuerda: Una base de datos bien diseñada es el cimiento de una aplicación robusta. No tomes atajos aquí.