mcpField
D
db-engine-selection

db-engine-selection

github.com/hainrixzData & databases2170 installsUpdated 3d ago
Repository

About db-engine-selection

db-engine-selection is a design-stage skill that recommends database paradigms and engines based on workload, consistency, scale, and operational needs. It gives a rationale, runner-up and trade-off, while recording assumptions and confidence; recommendations do not affect scoring.

Key features

  1. 01Maps access patterns to database paradigms
  2. 02Considers consistency, scale, and operations
  3. 03Provides a recommendation, alternative, and trade-off
  4. 04Records assumptions, confidence, and caveats
  5. 05Avoids forced choices when information is missing

Use cases

  1. 01Planning a database from a workload description
  2. 02Comparing relational, document, or key-value options
  3. 03Assessing whether to use multiple databases
  4. 04Identifying unknowns and risks in a database choice

Install

Copy the command and run it in a terminal.

$npx skills add https://github.com/hainrixz/claude-db --skill db-engine-selection

After installing, type/db-engine-selectionin Claude Code to confirm it loaded.

Details

From the project README

db-engine-selection (M0) — recommend, don't score

M0 runs at design / /claude-db:start time, when there may be no schema yet — only a described workload. It answers "which database should this be?" It is not a scored module: it emits no findings, has no axis, no severity, and never enters score.mjs or either of the two scores. Its output is a separate recommendation contract (below). It walks the decision tree in references/engine-selection-tree.md.

Inputs it gathers

From the user's description (or detected stack via references/detection-signals.md):

  • Access patterns — point lookups by key, range scans, complex multi-entity joins, full-text / semantic search, time-ordered analytics, graph traversal, fan-out reads/writes.
  • Consistency & integrity needs — strong/transactional vs eventual; multi-row invariants; need for DB-enforced referential integrity.
  • Scale & shape — expected size, write rate, read/write ratio, cardinality, whether data is append-only/time-series, vector/embedding workloads.
  • Operability & team — managed vs self-hosted, serverless/edge, existing expertise, platform constraints (cross-checks db-platform-fit M21).

How it decides (tree summary; full tree in the reference)

  1. Relational by default for transactional, multi-entity, integrity-heavy workloads (Postgres as the safe default; MySQL/MariaDB where the ecosystem dictates).
  2. Document (Mongo/Firestore) when the data is aggregate-oriented, read by one access pattern, and embedding beats joining — and the team accepts app-enforced integrity.
  3. Key-value (Redis/DynamoDB) for known-key point access, caching, sessions, high-throughput simple ops.
  4. Wide-column (Cassandra/Scylla) for massive write-heavy, table-per-query, partition-first workloads.
  5. Vector (pgvector/Qdrant/etc.) for semantic search / RAG — often alongside a primary store, not instead of one.
  6. Time-series (Timescale/ClickHouse/Influx) for append-only metrics/events with time-range analytics.
  7. Graph (Neo4j) when traversal depth/relationship queries are the core workload, not an afterthought. Polyglot is a valid answer: name each store and its job. Prefer "Postgres + an extension" (pgvector, JSONB, partitioning, FTS) before adding a second engine, when one engine credibly covers the workload.

Recommendation contract (what M0 emits — NOT a finding)

A structured recommendation object, rendered by /claude-db:start, with fields:

  • recommended — { paradigm, engine, platform? }.
  • rationale — which access patterns / consistency / scale facts drove it, tied to the tree branch.
  • runner_up — { paradigm, engine } and the explicit trade-off of choosing the recommendation over it (what you give up).
  • assumptions — the workload facts assumed; if a fact is unknown, it is listed here, not invented.
  • confidence — established | directional | speculative (a description-only input is at most directional); speculative when key facts are missing.
  • caveats — lock-in, operability, and platform notes (defers exact prices/limits to M21 / vendor page). This object is rendered as guidance; it does not conform to schema/finding.schema.json and is absent from audit-report.schema.json.

Verification / honesty

  • Never fabricate benchmarks, latency, throughput, prices, or row-count ceilings to justify a pick. Compare on documented properties (consistency model, FK support, index types, operability, lock-in) and band any magnitude high|medium|low. Cite a vendor page via WebFetch only by quoting it.
  • Always name the runner-up and the trade-off — a recommendation without an alternative is a red flag.
  • If the workload is under-specified, say so and ask (or mark confidence: speculative); do not force a pick from thin air.
  • M0 produces no score and never caps anything — it is advisory by construction. When an existing schema is present, defer correctness judgments to the scored modules (M1..M22) and the auditors.

Comments

Markdown supported