From Claude DB
Scans schema and ORM files for relational and NoSQL antipatterns, categorizing findings by design and performance impact.
How this skill is triggered — by the user, by Claude, or both
Slash command
/claude-db:db-antipatternsThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
M19 is the catch-all for recognized anti-patterns that span paradigms and don't sit cleanly inside one
M19 is the catch-all for recognized anti-patterns that span paradigms and don't sit cleanly inside one
structural module. It does not own a weight of its own. Findings inherit the category of the most
natural module: an EAV smell is a modeling/normalization problem → it scores under M1 (Modelado,
design); a Mongo unbounded-array smell scores under document Crecimiento-doc (performance); polymorphic
associations without an FK score under M3 (Integridad referencial, both). The finding's module stays
M19 for provenance, but expected_impact.axis and the rule id's intent route it to the owning
category at scoring time. This avoids double-counting — a single smell contributes to exactly one
category per axis. See references/scoring-model.md for the category map per paradigm.
Relational / SQL:
(entity, attribute, value) tables replacing real columns →
re-homes to M1 (design). Defeats types, constraints, indexing.tags VARCHAR holding "a,b,c" instead of a child table/array/jsonb → M1/M4.commentable_type + commentable_id, no constraint) → M3 (both).is_* booleans that should be a state enum/lookup → M4 (design).jsonb/text blob used as schema evasion → re-homes to M4 (design).
NoSQL:Parse the schema/ORM (scripts/parse-schema.mjs, parse-orm-python.py). Flag: a table whose columns
are literally (entity_id, attribute, value); column count above a high threshold with mostly-nullable
columns; string columns named tags/roles/csv; *_type + *_id pairs with no matching FK; ≥N
is_*/has_* booleans on one table; Mongoose schemas with array-of-subdocument fields and no cap.
SELECT relname, count(*) AS cols FROM information_schema.columns JOIN pg_class ON relname=table_name GROUP BY relname ORDER BY cols DESC;db.coll.aggregate([{$project:{n:{$size:"$items"}}},{$group:{_id:null,max:{$max:"$n"},avg:{$avg:"$n"}}}])
and db.coll.stats() for avg doc size trending toward 16 MB.CONFIG GET save and CONFIG GET appendonly (needs live; else needs_api).Emit per schema/finding.schema.json. Example ids:
M19.events.eav_table — generic EAV table (warn, severity 3, axis design, confidence directional,
re-homes to Modelado/M1).M19.comments.polymorphic_no_fk — commentable_type/commentable_id with no FK (fail, severity 4,
axis both, re-homes to M3).M19.feed.unbounded_array — Mongo array trending toward 16 MB (warn, severity 4, axis performance,
re-homes to document Crecimiento-doc; sev-5 only with live size evidence).
Each finding: evidence.observed quotes the real DDL/Mongoose schema/query verbatim with secrets
redacted; verification.reproduce is one of the runnable commands above (referencing $DATABASE_URL);
verification.method is ddl_parse, schema_introspect, or manual_review;
expected_impact is {axis, confidence, magnitude (high|medium|low), rationale} — banded, never a naked %.directional structural smell (e.g. app-side fan-out inferred from ORM source) never caps a
score. Redis-undurable and unbounded-array sev-5 require live evidence; otherwise directional or
needs_api, never a silent pass.npx claudepluginhub hainrixz/claude-db --plugin claude-dbOffers UI/UX design guidance for web and mobile with 50+ styles, 161 color palettes, 57 font pairings, and 99 UX guidelines across 10 stacks. Use for designing pages, components, color systems, or reviewing UI code.
Mines projects and conversations into a searchable memory palace. Activates on queries about MemPalace, memory palace, mining, searching, palace setup, wings, rooms, drawers, or recalling past work.