Database guidance for schema naming, safe migrations, indexing, N+1 detection, transaction scope, and soft-delete versus hard-delete tradeoffs. Use when designing schemas, writing migrations, or tuning persistence behavior.
Scanned 9/9/2026
Install to Claude Code
npx -y skills add kid-sid/codex-spellbook --skill database --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Database?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/kid-sid-database)More formats (shields.io, HTML) on the badges page.
---
name: database
description: Database guidance for schema naming, safe migrations, indexing, N+1 detection, transaction scope, and soft-delete versus hard-delete tradeoffs. Use when designing schemas, writing migrations, or tuning persistence behavior.
---
# Database
Model schemas for clarity, migrate in safe increments, and optimize queries around real access patterns rather than guesswork.
## When to Activate
- Design a new schema or table
- Add or review a migration
- Diagnose slow queries or query explosions
- Decide whether an index is warranted
- Refactor a transaction boundary
- Choose data deletion semantics
- Review ORM usage for N+1 issues
## Naming and Migrations
| Object | Convention |
| --- | --- |
| Tables | plural `snake_case` |
| Columns | singular `snake_case` |
| Primary keys | `id` |
| Foreign keys | `<table>_id` |
| Join tables | alphabetical plural pair, e.g. `roles_users` |
| Change | Safe Pattern | Avoid |
| --- | --- | --- |
| Drop column | add replacement, backfill, dual-read, dual-write, drop later | destructive one-step drop |
| Rename column | add new column and migrate gradually | instant rename in hot path |
| Add constraint | backfill invalid rows first | applying constraint to dirty data |
BAD
```sql
ALTER TABLE users DROP COLUMN full_name;
```
GOOD
```sql
ALTER TABLE users ADD COLUMN display_name text;
UPDATE users SET display_name = full_name WHERE display_name IS NULL;
```
## Indexing and Query Shape
| Query Pattern | Index |
| --- | --- |
| Equality on foreign key | single-column btree |
| Filter + sort | composite index ordered by filter then sort |
| Case-insensitive search | functional index matching query function |
| Signal | Fix |
| --- | --- |
| One query per row in a list view | eager load or batch fetch |
| Repeated lookup in serializer loop | prefetch related data |
| ORM debug logs showing repeated shapes | consolidate access path |
## Transactions and Deletion
| Preferred | Avoid |
| --- | --- |
| Short transaction around consistent write set | Holding transaction open across network calls |
| Retry on known transient conflicts | Blind retries on all DB errors |
| Use Soft Delete When | Use Hard Delete When |
| --- | --- |
| Audit or recovery matters | Regulation or retention requires full erasure |
| References must remain historically intact | Data is ephemeral and unreferenced |
## Checklist
- [ ] Tables and columns use consistent `snake_case` naming
- [ ] Migrations are additive before destructive cleanup
- [ ] New indexes match real query patterns
- [ ] N+1 risks were checked on list and detail endpoints
- [ ] Transactions exclude network calls and long-running work
- [ ] Delete strategy is chosen intentionally per dataset
- [ ] Rollout works across mixed old and new application versions

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!