Audits database schema naming conventions to ensure consistency and prevent engine-specific bugs.

Install

mkdir -p .claude/skills/db-naming && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/16436" && unzip -o skill.zip -d .claude/skills/db-naming && rm skill.zip

Installs to .claude/skills/db-naming

Activation

This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.

Audit naming conventions — inconsistent table/column casing and pluralization, ambiguous or reserved-word identifiers, untyped/opaque columns, inconsistent FK and boolean naming, and identifiers that fight the engine's case-folding rules. Module M7. Feeds the Design & Integrity score (Naming category, low weight).
315 charsno explicit “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Intermediate

Key capabilities

  • Audit table and column casing consistency
  • Audit table and column pluralization consistency
  • Detect SQL reserved words in identifiers
  • Identify case-folding traps in identifiers
  • Check FK column naming against `<referenced>_id` pattern
  • Flag boolean columns without `is_`/`has_`/`can_` prefixes

How it works

The skill performs a static check by parsing DDL/snapshot to tally identifier casing, pluralization, and reserved words, then verifies live identifier inventory with a query.

Inputs & outputs

You give it
Database DDL/snapshot or live schema information
You get back
Findings on naming inconsistencies, reserved word conflicts, and opaque names, with severity and fixability

When to use db-naming

  • Auditing schema consistency
  • Identifying reserved word conflicts
  • Checking casing standardization
  • Validating FK naming patterns

About this skill

db-naming (M7)

Naming is the schema's documentation: consistent, predictable identifiers make joins obvious and reduce the quoting/casing bugs that creep in across ORMs and engines. It is low-weight (Naming category, design axis) — real but never the headline. This module is design-axis and never caps.

What it checks

  • Casing / pluralization consistency: a mix of snake_case and camelCase, or singular and plural table names (user, orders, OrderItem) in one schema — pick one and hold it.
  • Reserved words & case-folding traps: identifiers that are SQL reserved words (user, order, group, select) or that rely on case ("User" quoted) — Postgres folds unquoted to lowercase, MySQL is filesystem/case-config dependent; mixed quoting causes "relation does not exist" bugs.
  • FK naming: FK columns not following a predictable <referenced>_id pattern, so joins aren't self-evident.
  • Boolean naming: booleans not prefixed is_/has_/can_, or negative names (not_active) that invert logic.
  • Opaque / ambiguous names: data, info, value, flag, temp, col1, abbreviations without a glossary, or timestamps not suffixed _at.

Axis & severity

  • Axis: design; magnitude almost always low, banded honestly.
  • Reserved-word unquoted identifier that breaks across engines: severity 2–3, warn.
  • Schema-wide casing/pluralization inconsistency: severity 2, warn, fixable: proposed (rename is high-blast-radius — never auto).
  • Opaque column name / missing _at suffix: severity 1, warn.
  • M7 never caps any score; it is the smallest-weight design category.

Tier-0 static check

Parse DDL/snapshot via scripts/parse-schema.mjs: tally identifier casing styles and table pluralization; match identifiers against a reserved-word list per engine; check FK columns against the <table>_id pattern; flag boolean columns without is_/has_/can_ and opaque names. This is fully static and directional.

Tier-1 verification query

Confirm live identifier inventory and quoting:

-- $DATABASE_URL, read-only
SELECT table_name, column_name FROM information_schema.columns
WHERE table_schema NOT IN ('pg_catalog','information_schema')
ORDER BY table_name;   -- inspect casing/plurality/reserved words across the real catalog

Findings

Emit per schema/finding.schema.json. Examples:

  • M7.schema.mixed_casing — schema mixes snake_case and camelCase identifiers (severity 2, warn, axis design, fixable: proposed).
  • M7.user.reserved_word_table — table named user requires quoting and breaks unquoted refs (severity 2, warn, axis design).
  • M7.accounts.active_boolean_unprefixed — boolean active not named is_active (severity 1, warn). Each finding: evidence.observed quotes the identifier(s) verbatim; verification.reproduce is the runnable query above (method: ddl_parse / schema_introspect); expected_impact is banded (typically low) + confidence directional with rationale.

Honesty

  • Naming findings are advisory polish — never let them dominate the report or imply a functional defect.
  • Renames are destructive and break app code/migrations; recommendations are proposed/advisory, never auto.
  • Reserved-word and case-folding behaviour is engine-specific; scope each finding to the detected engine rather than asserting a universal rule.

When not to use it

  • When functional defects are the primary concern
  • When destructive renames are acceptable without explicit approval
  • When asserting universal rules for engine-specific behaviors

Limitations

  • Naming findings are advisory polish, not functional defects.
  • Renames are destructive and break app code/migrations.
  • Reserved-word and case-folding behavior is engine-specific.

How it compares

This workflow systematically audits database naming conventions for consistency and potential issues, providing structured findings, unlike a manual, ad-hoc review.

Compared to similar skills

db-naming side by side with the closest alternatives in the catalog.

SkillInstallsUpdatedSafetyDifficulty
db-naming (this skill)02moNo flagsIntermediate
analyzing-query-performance11moReviewIntermediate
sql-optimization-patterns642moNo flagsAdvanced
drizzle-orm322moNo flagsIntermediate

Try saying

Example prompts that trigger this skill in your AI assistant.

Search skills

Search the agent skills registry