database

Naming Conventions (REQUIRED)

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "database" with this command: npx skills add poletron/custom-rules/poletron-custom-rules-database

Critical Patterns

Naming Conventions (REQUIRED)

-- ✅ ALWAYS: snake_case for tables and columns CREATE TABLE user_accounts ( user_id UUID PRIMARY KEY, first_name VARCHAR(100), created_at TIMESTAMP DEFAULT NOW() );

-- ❌ NEVER: Mixed case or camelCase CREATE TABLE UserAccounts ( userId UUID, firstName VARCHAR(100) );

Soft Deletes (RECOMMENDED)

-- ✅ ALWAYS: Use soft deletes for audit trail ALTER TABLE orders ADD COLUMN deleted_at TIMESTAMP NULL;

-- Query active records SELECT * FROM orders WHERE deleted_at IS NULL;

Audit Columns (REQUIRED)

-- ✅ ALWAYS: Include audit columns CREATE TABLE products ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), name VARCHAR(255) NOT NULL, -- Audit columns created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW(), created_by UUID REFERENCES users(id), updated_by UUID REFERENCES users(id) );

Decision Tree

Need unique identifier? → Use UUID over serial Need audit trail? → Add created_at, updated_at, *_by columns Need to delete records? → Use soft delete (deleted_at) Need fast lookups? → Add appropriate indexes Need data integrity? → Use foreign keys + constraints Need row-level security? → Implement RLS policies

Code Examples

Index Strategy

-- ✅ Good: Composite index for common query patterns CREATE INDEX idx_orders_user_status ON orders(user_id, status) WHERE deleted_at IS NULL;

-- Use EXPLAIN ANALYZE to verify EXPLAIN ANALYZE SELECT * FROM orders WHERE user_id = '...' AND status = 'pending';

Row-Level Security

-- Enable RLS ALTER TABLE documents ENABLE ROW LEVEL SECURITY;

-- Policy: Users see only their documents CREATE POLICY user_documents ON documents FOR ALL USING (owner_id = current_user_id());

Commands

-- Check table size SELECT pg_size_pretty(pg_total_relation_size('table_name'));

-- Analyze query performance EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;

-- View index usage SELECT * FROM pg_stat_user_indexes WHERE idx_scan = 0;

Resources

Specialized database documentation:

  • Design Patterns: design-patterns.md

  • Logic & Procedures: logic-procedures.md

  • Reporting Optimization: reporting-optimization.md

  • Security & RBAC: security-rbac.md

  • Style Guide: style-guide.md

Database Design Principles

Learn to THINK, not copy SQL patterns.

⚠️ Core Principle

  • ASK user for database preferences when unclear

  • Choose database/ORM based on CONTEXT

  • Don't default to PostgreSQL for everything

Decision Checklist

Before designing schema:

  • Asked user about database preference?

  • Chosen database for THIS context?

  • Considered deployment environment?

  • Planned index strategy?

  • Defined relationship types?

Anti-Patterns

❌ Default to PostgreSQL for simple apps (SQLite may suffice) ❌ Skip indexing ❌ Use SELECT * in production ❌ Store JSON when structured data is better ❌ Ignore N+1 queries

Specialized Extensions

For specific technologies, use these skills if available:

  • Vector DB: lancedb

  • Supabase: supabase-postgres-best-practices , supabase-auth

  • NoSQL: nosql-expert

  • Prisma: backend-dev-guidelines (includes Prisma patterns)

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

lancedb

No summary provided by upstream source.

Repository SourceNeeds Review
General

trpc

No summary provided by upstream source.

Repository SourceNeeds Review
General

javascript-mastery

No summary provided by upstream source.

Repository SourceNeeds Review
General

coding-standards

No summary provided by upstream source.

Repository SourceNeeds Review