database-designer
alirezarezvani/claude-skills
Разрабатывать схемы баз данных, планировать миграцию данных, оптимизировать запросы и моделировать взаимосвязи между данными с помощью экспертного анализа и автоматизированных инструментов.
...Расширить всеРазработчик баз данных — навык уровня «POWERFUL»
Обзор
Комплексный набор навыков проектирования баз данных, обеспечивающий возможности анализа, оптимизации и миграции на экспертном уровне для современных систем баз данных. Данный набор навыков сочетает теоретические принципы с практическими инструментами, помогая архитекторам и разработчикам создавать масштабируемые, высокопроизводительные и удобные в обслуживании схемы баз данных.
Основные компетенции
Проектирование и анализ схем
- Анализ нормализации: автоматическое определение уровней нормализации (от 1NF до BCNF)
- Стратегия денормализации: эффективные рекомендации по оптимизации производительности
- Оптимизация типов данных: выявление несоответствующих типов и проблем с размером
- Анализ ограничений: отсутствующие внешние ключи, ограничения уникальности и проверки на нулевые значения
- Проверка согласованности имен: соблюдение единых шаблонов именования таблиц и столбцов
- Генерация ERD: автоматическое создание диаграмм Mermaid на основе DDL
Оптимизация индексов
- Анализ пробелов в индексах: выявление отсутствующих индексов на внешних ключах и шаблонах запросов
- Стратегия создания составных индексов: оптимальный порядок столбцов для многостолбцовых индексов
- Обнаружение избыточности индексов: устранение пересекающихся и неиспользуемых индексов
- Моделирование влияния на производительность: оценка селективности и анализ стоимости запросов
- Выбор типа индекса: B-дерево, хеш-индекс, частичный индекс, покрывающий индекс и специализированные индексы
Управление миграцией
- Миграции без простоев: реализация шаблона «расширение-сжатие»
- Эволюция схемы: безопасное добавление, удаление и изменение типов столбцов
- Скрипты миграции данных: автоматическое преобразование и проверка данных
- Стратегия отката: возможности полного отката с проверкой
- Планирование выполнения: упорядоченные этапы миграции с устранением зависимостей
Рабочий процесс инструмента (запускайте эти скрипты — не анализируйте схемы вручную)
Все пути указаны относительно этой папки навыков; примеры входных данных находятся в assets/.
1. Анализ схемы
python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json
Принимает SQL DDL или схему в формате JSON (assets/sample_schema.sql / sample_schema.json). Результат включает выводы по нормализации, отсутствующие ограничения, проблемы с именованием и ERD в формате Mermaid — покажите ERD пользователю и устраните отмеченные проблемы перед оптимизацией.
2. Оптимизация индексов с учётом реальных шаблонов запросов
python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json
Сначала запишите часто используемые запросы пользователя в файл JSON с шаблонами запросов (скопируйте assets/sample_query_patterns.json). Результатом является отсортированный по приоритету список рекомендаций по созданию индексов CREATE INDEX, а также удаление избыточных индексов.
3. Сгенерируйте план миграции
python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql
--zero-downtime генерирует план расширения-сжатия; --validate-only проверяет выполнимость без генерации SQL.
4. Цикл проверки
Повторно запустить шаг 1 на целевой схеме и убедиться, что проблемы, обнаруженные при первом проходе, устранены; запустить migration_generator.py --validate-only перед передачей миграции.
Принципы проектирования баз данных
→ Подробности см. в файле references/database-design-reference.md
Рекомендации
Проектирование схемы
- Используйте понятные имена: четкие и последовательные соглашения об именовании
- Выбирайте подходящие типы данных: столбцы подходящего размера для эффективного хранения
- Определите надлежащие ограничения: внешние ключи, проверки, уникальные индексы
- Учитывайте будущий рост: планируйте масштабируемость с самого начала
- Документируйте связи: четкие связи по внешним ключам и бизнес-правила
Оптимизация производительности
- Стратегическое создание индексов: охват типичных шаблонов запросов без избыточного индексирования
- Мониторинг производительности запросов: регулярный анализ медленных запросов
- Разбивайте большие таблицы на партиции: повышайте производительность запросов и упрощайте обслуживание
- Использование подходящих уровней изоляции: обеспечение баланса между согласованностью и производительностью
- Реализация пула соединений: эффективное использование ресурсов
Соображения безопасности
- Принцип минимальных привилегий: предоставление минимально необходимых прав
- Шифруйте конфиденциальные данные: как при хранении, так и при передаче
- Аудит моделей доступа: мониторинг и регистрация доступа к базе данных
- Проверка входных данных: предотвращение атак типа «SQL-инъекция»
- Регулярные обновления безопасности: поддерживайте программное обеспечение базы данных в актуальном состоянии
Шаблоны построения запросов
SELECT с JOIN
-- INNER JOIN: only matching rows
SELECT o.id, c.name, o.total
FROM orders o
INNER JOIN customers c ON c.id = o.customer_id;
-- LEFT JOIN: all left rows, NULLs for non-matches
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Self-join: hierarchical data (employees/managers)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
Общие табличные выражения (CTE)
-- Recursive CTE for org chart
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS depth
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1
FROM employees e INNER JOIN org o ON o.id = e.manager_id
)
SELECT * FROM org ORDER BY depth, name;
Оконные функции
-- ROW_NUMBER for pagination / dedup
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
FROM orders;
-- RANK with gaps, DENSE_RANK without gaps
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;
-- LAG/LEAD for comparing adjacent rows
SELECT date, revenue,
revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
FROM daily_sales;
Шаблоны агрегации
-- FILTER clause (PostgreSQL) for conditional aggregation
SELECT
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'active') AS active,
AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
FROM accounts;
-- GROUPING SETS for multi-level rollups
SELECT region, product, SUM(revenue)
FROM sales
GROUP BY GROUPING SETS ((region, product), (region), ());
Шаблоны миграции
Скрипты миграции вверх/вниз
Каждая миграция должна иметь обратный вариант. Называйте файлы с префиксом, содержащим временную метку, для упорядочивания:
migrations/
├── 20260101_000001_create_users.up.sql
├── 20260101_000001_create_users.down.sql
├── 20260115_000002_add_users_email_index.up.sql
└── 20260115_000002_add_users_email_index.down.sql
Миграции без простоев (расширение/сжатие)
Используйте шаблон «расширение-сжатие», чтобы избежать блокировки или нарушения работы действующего кода:
- Расширение — добавление нового столбца/таблицы (с возможностью null-значений, с значением по умолчанию)
- Миграция данных — заполнение данных партиями; двойная запись из приложения
- Переход — приложение читает данные из нового столбца; прекратите запись в старый
- Сокращение — удаление старого столбца в последующей миграции
Стратегии заполнения данных
-- Batch update to avoid long-running locks
UPDATE users SET email_normalized = LOWER(email)
WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
-- Repeat in a loop until 0 rows affected
Процедуры отката
- Всегда тестируйте
down.sqlв тестовой среде перед развертываниемup.sqlв производственную среду - Сделайте окно отката коротким — если этап контракта уже выполнен, для отката потребуется новая прямая миграция
- В случае необратимых изменений (удаление столбцов с данными) сначала создавайте логическую резервную копию
Оптимизация производительности
Стратегии индексирования
| Тип индекса | Пример использования | Пример |
|---|---|---|
| B-дерево (по умолчанию) | Равенство, диапазон, ORDER BY | CREATE INDEX idx_users_email ON users(email); |
| GIN | Полнотекстовый поиск, JSONB, массивы | CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body)); |
| GiST | Геометрия, типы диапазонов, ближайший сосед | CREATE INDEX idx_locations ON places USING gist(coords); |
| Частичное | Подмножество строк (уменьшение размера) | CREATE INDEX idx_active ON users(email) WHERE active = true; |
| Покрывающий | Сканирование только по индексу | CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at); |
Чтение плана EXPLAIN
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
Ключевые сигналы, на которые следует обратить внимание:
- Последовательное сканирование больших таблиц — отсутствующий индекс
- Вложенный цикл с высокими оценками количества строк — рассмотрите возможность использования хеш-соединения или слияния, либо добавьте индекс
- Число совместных чтений из буферов значительно превышает количество попаданий — рабочий набор превышает объем памяти
Обнаружение запросов N+1
Симптомы: приложение отправляет по одному запросу на каждую строку (например, при извлечении связанных записей в цикле).
Способы устранения:
- Используйте
JOINили подзапроса для извлечения за один цикл - предварительная загрузка ORM (шаблон
select_related/includes/with) - шаблон DataLoader для резолверов GraphQL
пул соединений
| Инструмент | Протокол | Идеально подходит для |
|---|---|---|
| PgBouncer | PostgreSQL | Пул транзакций/операций, низкие накладные расходы |
| ProxySQL | MySQL | Маршрутизация запросов, разделение операций чтения и записи |
| Встроенный пул (HikariCP, пул SQLAlchemy) | Любой | Пулирование на уровне приложения |
Практическое правило: установите размер пула равным (2 * CPU cores) + disk spindles. Для облачных SSD-накопителей начните с 2 * vCPUs и настройте.
Реплики чтения и маршрутизация запросов
- Направляйте все
SELECTзапросы на реплики; записи — на первичный - Учитывайте задержку репликации (обычно <1 с для асинхронной репликации, 0 для синхронной)
- Используйте
pg_last_wal_replay_lsn()для обнаружения задержки перед чтением критически важных данных
Матрица принятия решений для нескольких баз данных
| Критерии | PostgreSQL | MySQL | SQLite | SQL Server |
|---|---|---|---|---|
| Лучше всего подходит для | Сложные запросы, JSONB, расширения | Веб-приложения, рабочие нагрузки с преобладанием операций чтения | Встраиваемые системы, разработка/тестирование, периферийные устройства | Корпоративные стеки .NET |
| Поддержка JSON | Отлично (JSONB + GIN) | Хорошая (тип JSON) | Минимальная | Хорошая (OPENJSON) |
| Репликация | Потоковая, логическая | Групповая репликация, кластер InnoDB | Не применимо | Always On AG |
| Лицензирование | Открытый исходный код (лицензия PostgreSQL) | Открытый исходный код (GPL) / коммерческое | Общественное достояние | Коммерческая |
| Максимальный практический размер | Несколько ТБ | несколько ТБ | ~1 ТБ (один записывающий модуль) | Несколько ТБ |
Когда выбирать:
- PostgreSQL — стандартный выбор для новых проектов; лучшая расширяемость и соответствие стандартам
- MySQL — существующая экосистема MySQL; простые веб-приложения с интенсивным чтением
- SQLite — мобильные приложения, инструменты командной строки, базы данных для модульных тестов, IoT/периферийные вычисления
- SQL Server — требуется в соответствии с корпоративной политикой; глубокая интеграция с .NET/Azure
Аспекты, которые следует учитывать при выборе NoSQL
| База данных | Модель | Использовать, когда |
|---|---|---|
| MongoDB | Документ | Гибкость схемы, быстрое прототипирование, управление контентом |
| Redis | «ключ-значение» / кэш | Хранение сеансов, ограничение скорости, таблицы лидеров, модель «pub/sub» |
| DynamoDB | Широкостолбцовая | Бессерверные приложения AWS, задержка в диапазоне однозначных значений в миллисекундах при любом масштабе |
По умолчанию используйте SQL. Переходите на NoSQL только в тех случаях, когда это явно выгодно с точки зрения модели доступа.
Шардирование и репликация
Горизонтальное и вертикальное разбиение
- Вертикальное разбиение: распределение столбцов по таблицам (например, разделение столбцов BLOB). Снижает нагрузку на ввод-вывод при узких запросах.
- Горизонтальное разбиение (шардинг): распределение строк по базам данных/серверам. Требуется, когда один узел не может вместить набор данных или обработать пропускную способность.
Стратегии шардинга
| Стратегия | Принцип работы | Преимущества | Недостатки |
|---|---|---|---|
| Хеширование | shard = hash(key) % N |
Равномерное распределение | Решардинг — дорогостоящий процесс |
| Диапазон | Разделение на шарды по дате или диапазону ID | Просто, подходит для временных рядов | «горячие точки» на последнем шарде |
| Географический | Разделение на шарды по региону пользователя | Локальность данных, соблюдение нормативных требований | Межрегиональные запросы — сложная задача |
Шаблоны репликации
| Шаблон | Согласованность | Задержка | Вариант использования |
|---|---|---|---|
| Синхронный | Сильная | Более высокая задержка записи | Финансовые транзакции |
| Асинхронный | В конечном итоге | Низкая задержка записи | Веб-приложения с интенсивным чтением |
| Полусинхронный | Подтверждение наличия как минимум одной реплики | Умеренная | Баланс между безопасностью и скоростью |
Ссылки
- sql-database-assistant — написание, оптимизация и отладка запросов для повседневной работы с SQL
- database-schema-designer — моделирование ERD, анализ нормализации и генерация схем
- migration-architect — планирование крупномасштабной миграции между различными движками баз данных или капитального перепроектирования схем
- senior-backend — шаблоны на уровне приложений (пул соединений, передовые практики ORM)
- senior-devops — развертывание инфраструктуры для кластеров баз данных и реплик
---
name: database-designer
description: Design database schemas, plan data migrations, optimize queries, and model data relationships using expert analysis and automated tools.
---
# Database Designer - POWERFUL Tier Skill
## Overview
A comprehensive database design skill that provides expert-level analysis, optimization, and migration capabilities for modern database systems. This skill combines theoretical principles with practical tools to help architects and developers create scalable, performant, and maintainable database schemas.
## Core Competencies
### Schema Design & Analysis
- **Normalization Analysis**: Automated detection of normalization levels (1NF through BCNF)
- **Denormalization Strategy**: Smart recommendations for performance optimization
- **Data Type Optimization**: Identification of inappropriate types and size issues
- **Constraint Analysis**: Missing foreign keys, unique constraints, and null checks
- **Naming Convention Validation**: Consistent table and column naming patterns
- **ERD Generation**: Automatic Mermaid diagram creation from DDL
### Index Optimization
- **Index Gap Analysis**: Identification of missing indexes on foreign keys and query patterns
- **Composite Index Strategy**: Optimal column ordering for multi-column indexes
- **Index Redundancy Detection**: Elimination of overlapping and unused indexes
- **Performance Impact Modeling**: Selectivity estimation and query cost analysis
- **Index Type Selection**: B-tree, hash, partial, covering, and specialized indexes
### Migration Management
- **Zero-Downtime Migrations**: Expand-contract pattern implementation
- **Schema Evolution**: Safe column additions, deletions, and type changes
- **Data Migration Scripts**: Automated data transformation and validation
- **Rollback Strategy**: Complete reversal capabilities with validation
- **Execution Planning**: Ordered migration steps with dependency resolution
## Tool Workflow (run these — do not analyze schemas by hand)
All paths relative to this skill folder; sample inputs in `assets/`.
### 1. Analyze the schema
```bash
python3 schema_analyzer.py --input schema.sql --generate-erd --output-format json -o analysis.json
```
Accepts SQL DDL or JSON schema (`assets/sample_schema.sql` / `sample_schema.json`). Output includes normalization findings, missing constraints, naming issues, and a Mermaid ERD — show the ERD to the user and fix flagged issues before optimizing.
### 2. Optimize indexes against real query patterns
```bash
python3 index_optimizer.py --schema assets/sample_schema.json --queries assets/sample_query_patterns.json --analyze-existing --format json -o indexes.json
```
Write the user's hot queries into a query-patterns JSON first (copy `assets/sample_query_patterns.json`). Output is a priority-ordered list of CREATE INDEX recommendations plus redundant-index removals.
### 3. Generate the migration
```bash
python3 migration_generator.py --current current_schema.json --target target_schema.json --zero-downtime --format sql -o migration.sql
```
`--zero-downtime` emits an expand-contract plan; `--validate-only` checks feasibility without generating SQL.
### 4. Verification loop
Re-run step 1 on the *target* schema and assert the issues found in the first pass are gone; run `migration_generator.py --validate-only` before handing over the migration.
## Database Design Principles
→ See references/database-design-reference.md for details
## Best Practices
### Schema Design
1. **Use meaningful names**: Clear, consistent naming conventions
2. **Choose appropriate data types**: Right-sized columns for storage efficiency
3. **Define proper constraints**: Foreign keys, check constraints, unique indexes
4. **Consider future growth**: Plan for scale from the beginning
5. **Document relationships**: Clear foreign key relationships and business rules
### Performance Optimization
1. **Index strategically**: Cover common query patterns without over-indexing
2. **Monitor query performance**: Regular analysis of slow queries
3. **Partition large tables**: Improve query performance and maintenance
4. **Use appropriate isolation levels**: Balance consistency with performance
5. **Implement connection pooling**: Efficient resource utilization
### Security Considerations
1. **Principle of least privilege**: Grant minimal necessary permissions
2. **Encrypt sensitive data**: At rest and in transit
3. **Audit access patterns**: Monitor and log database access
4. **Validate inputs**: Prevent SQL injection attacks
5. **Regular security updates**: Keep database software current
## Query Generation Patterns
### SELECT with JOINs
```sql
-- INNER JOIN: only matching rows
SELECT o.id, c.name, o.total
FROM orders o
INNER JOIN customers c ON c.id = o.customer_id;
-- LEFT JOIN: all left rows, NULLs for non-matches
SELECT c.name, COUNT(o.id) AS order_count
FROM customers c
LEFT JOIN orders o ON o.customer_id = c.id
GROUP BY c.name;
-- Self-join: hierarchical data (employees/managers)
SELECT e.name AS employee, m.name AS manager
FROM employees e
LEFT JOIN employees m ON m.id = e.manager_id;
```
### Common Table Expressions (CTEs)
```sql
-- Recursive CTE for org chart
WITH RECURSIVE org AS (
SELECT id, name, manager_id, 1 AS depth
FROM employees WHERE manager_id IS NULL
UNION ALL
SELECT e.id, e.name, e.manager_id, o.depth + 1
FROM employees e INNER JOIN org o ON o.id = e.manager_id
)
SELECT * FROM org ORDER BY depth, name;
```
### Window Functions
```sql
-- ROW_NUMBER for pagination / dedup
SELECT *, ROW_NUMBER() OVER (PARTITION BY customer_id ORDER BY created_at DESC) AS rn
FROM orders;
-- RANK with gaps, DENSE_RANK without gaps
SELECT name, score, RANK() OVER (ORDER BY score DESC) AS rank FROM leaderboard;
-- LAG/LEAD for comparing adjacent rows
SELECT date, revenue,
revenue - LAG(revenue) OVER (ORDER BY date) AS daily_change
FROM daily_sales;
```
### Aggregation Patterns
```sql
-- FILTER clause (PostgreSQL) for conditional aggregation
SELECT
COUNT(*) AS total,
COUNT(*) FILTER (WHERE status = 'active') AS active,
AVG(amount) FILTER (WHERE amount > 0) AS avg_positive
FROM accounts;
-- GROUPING SETS for multi-level rollups
SELECT region, product, SUM(revenue)
FROM sales
GROUP BY GROUPING SETS ((region, product), (region), ());
```
---
## Migration Patterns
### Up/Down Migration Scripts
Every migration must have a reversible counterpart. Name files with a timestamp prefix for ordering:
```
migrations/
├── 20260101_000001_create_users.up.sql
├── 20260101_000001_create_users.down.sql
├── 20260115_000002_add_users_email_index.up.sql
└── 20260115_000002_add_users_email_index.down.sql
```
### Zero-Downtime Migrations (Expand/Contract)
Use the expand-contract pattern to avoid locking or breaking running code:
1. **Expand** — add the new column/table (nullable, with default)
2. **Migrate data** — backfill in batches; dual-write from application
3. **Transition** — application reads from new column; stop writing to old
4. **Contract** — drop old column in a follow-up migration
### Data Backfill Strategies
```sql
-- Batch update to avoid long-running locks
UPDATE users SET email_normalized = LOWER(email)
WHERE id IN (SELECT id FROM users WHERE email_normalized IS NULL LIMIT 5000);
-- Repeat in a loop until 0 rows affected
```
### Rollback Procedures
- Always test the `down.sql` in staging before deploying `up.sql` to production
- Keep rollback window short — if the contract step has run, rollback requires a new forward migration
- For irreversible changes (dropping columns with data), take a logical backup first
---
## Performance Optimization
### Indexing Strategies
| Index Type | Use Case | Example |
|------------|----------|---------|
| **B-tree** (default) | Equality, range, ORDER BY | `CREATE INDEX idx_users_email ON users(email);` |
| **GIN** | Full-text search, JSONB, arrays | `CREATE INDEX idx_docs_body ON docs USING gin(to_tsvector('english', body));` |
| **GiST** | Geometry, range types, nearest-neighbor | `CREATE INDEX idx_locations ON places USING gist(coords);` |
| **Partial** | Subset of rows (reduce size) | `CREATE INDEX idx_active ON users(email) WHERE active = true;` |
| **Covering** | Index-only scans | `CREATE INDEX idx_cov ON orders(customer_id) INCLUDE (total, created_at);` |
### EXPLAIN Plan Reading
```sql
EXPLAIN (ANALYZE, BUFFERS, FORMAT TEXT) SELECT ...;
```
Key signals to watch:
- **Seq Scan** on large tables — missing index
- **Nested Loop** with high row estimates — consider hash/merge join or add index
- **Buffers shared read** much higher than **hit** — working set exceeds memory
### N+1 Query Detection
Symptoms: application issues one query per row (e.g., fetching related records in a loop).
Fixes:
- Use `JOIN` or subquery to fetch in one round-trip
- ORM eager loading (`select_related` / `includes` / `with`)
- DataLoader pattern for GraphQL resolvers
### Connection Pooling
| Tool | Protocol | Best For |
|------|----------|----------|
| **PgBouncer** | PostgreSQL | Transaction/statement pooling, low overhead |
| **ProxySQL** | MySQL | Query routing, read/write splitting |
| **Built-in pool** (HikariCP, SQLAlchemy pool) | Any | Application-level pooling |
**Rule of thumb:** Set pool size to `(2 * CPU cores) + disk spindles`. For cloud SSDs, start with `2 * vCPUs` and tune.
### Read Replicas and Query Routing
- Route all `SELECT` queries to replicas; writes to primary
- Account for replication lag (typically <1s for async, 0 for sync)
- Use `pg_last_wal_replay_lsn()` to detect lag before reading critical data
---
## Multi-Database Decision Matrix
| Criteria | PostgreSQL | MySQL | SQLite | SQL Server |
|----------|-----------|-------|--------|------------|
| **Best for** | Complex queries, JSONB, extensions | Web apps, read-heavy workloads | Embedded, dev/test, edge | Enterprise .NET stacks |
| **JSON support** | Excellent (JSONB + GIN) | Good (JSON type) | Minimal | Good (OPENJSON) |
| **Replication** | Streaming, logical | Group replication, InnoDB cluster | N/A | Always On AG |
| **Licensing** | Open source (PostgreSQL License) | Open source (GPL) / commercial | Public domain | Commercial |
| **Max practical size** | Multi-TB | Multi-TB | ~1 TB (single-writer) | Multi-TB |
**When to choose:**
- **PostgreSQL** — default choice for new projects; best extensibility and standards compliance
- **MySQL** — existing MySQL ecosystem; simple read-heavy web applications
- **SQLite** — mobile apps, CLI tools, unit test databases, IoT/edge
- **SQL Server** — mandated by enterprise policy; deep .NET/Azure integration
### NoSQL Considerations
| Database | Model | Use When |
|----------|-------|----------|
| **MongoDB** | Document | Schema flexibility, rapid prototyping, content management |
| **Redis** | Key-value / cache | Session store, rate limiting, leaderboards, pub/sub |
| **DynamoDB** | Wide-column | Serverless AWS apps, single-digit-ms latency at any scale |
> Use SQL as default. Reach for NoSQL only when the access pattern clearly benefits from it.
---
## Sharding & Replication
### Horizontal vs Vertical Partitioning
- **Vertical partitioning**: Split columns across tables (e.g., separate BLOB columns). Reduces I/O for narrow queries.
- **Horizontal partitioning (sharding)**: Split rows across databases/servers. Required when a single node cannot hold the dataset or handle the throughput.
### Sharding Strategies
| Strategy | How It Works | Pros | Cons |
|----------|-------------|------|------|
| **Hash** | `shard = hash(key) % N` | Even distribution | Resharding is expensive |
| **Range** | Shard by date or ID range | Simple, good for time-series | Hot spots on latest shard |
| **Geographic** | Shard by user region | Data locality, compliance | Cross-region queries are hard |
### Replication Patterns
| Pattern | Consistency | Latency | Use Case |
|---------|------------|---------|----------|
| **Synchronous** | Strong | Higher write latency | Financial transactions |
| **Asynchronous** | Eventual | Low write latency | Read-heavy web apps |
| **Semi-synchronous** | At-least-one replica confirmed | Moderate | Balance of safety and speed |
---
## Cross-References
- **sql-database-assistant** — query writing, optimization, and debugging for day-to-day SQL work
- **database-schema-designer** — ERD modeling, normalization analysis, and schema generation
- **migration-architect** — large-scale migration planning across database engines or major schema overhauls
- **senior-backend** — application-layer patterns (connection pooling, ORM best practices)
- **senior-devops** — infrastructure provisioning for database clusters and replicas
Все файлы
0 файловУстановить database-designer
Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.
Скачать ZIPКлонируйте репозиторий и скопируйте файлы навыка в свой проект.
git clone https://github.com/alirezarezvani/claude-skills/tree/main/engineering/skills/database-designer # Copy SKILL.md to your .claude/skills/ directory
Копировать





Дом
