Ответ
Да, проектировал схемы как для реляционных (SQL), так и для нереляционных (NoSQL) баз данных.
Для SQL (PostgreSQL/MySQL):
- Нормализация: Доведение схемы до 3NF для минимизации дублирования и обеспечения целостности.
- Типы данных: Выбор оптимальных типов (
INT,VARCHAR(n),TIMESTAMPTZ,JSONB). - Ограничения: Использование
PRIMARY KEY,FOREIGN KEY,UNIQUE,CHECKиNOT NULL. - Индексы: Создание B-tree индексов для полей в условиях
WHERE,JOIN,ORDER BY. Для полнотекстового поиска — GIN индексы.
Пример SQL-схемы:
CREATE TABLE authors (
id SERIAL PRIMARY KEY,
name VARCHAR(200) NOT NULL
);
CREATE TABLE books (
id SERIAL PRIMARY KEY,
author_id INTEGER NOT NULL REFERENCES authors(id) ON DELETE CASCADE,
title VARCHAR(500) NOT NULL,
published_date DATE,
metadata JSONB -- Использование JSONB для гибких данных
);
CREATE INDEX idx_books_author_id ON books(author_id);
CREATE INDEX idx_books_title ON books(title);
Для NoSQL (MongoDB):
- Денормализация: Проектирование схемы, ориентированной на паттерны чтения, часто с вложенными документами для уменьшения количества запросов.
- Embedding vs Referencing: Решение, когда встраивать дочерние документы, а когда ссылаться на отдельные коллекции.
- Индексы: Создание индексов для полей запросов, включая составные и текстовые индексы.
Пример MongoDB-документа:
{
"_id": ObjectId("..."),
"order_id": "ORD-12345",
"customer": {
"name": "John Doe",
"email": "john@example.com"
},
"items": [
{ "product_id": 101, "quantity": 2, "price": 29.99 },
{ "product_id": 205, "quantity": 1, "price": 15.50 }
],
"total": 75.48
}