~/VibeHandbook

Базы данных

sqlite.org

SQLite

Что это такое

SQLite — это автономная, бессерверная реляционная база данных, которая хранит всю базу данных в одном файле. Нет отдельного процесса, который нужно запускать или администрировать; ваше приложение напрямую подключает библиотеку и читает и записывает этот файл. Это самая широко используемая база данных в мире — она встроена в телефоны, браузеры и бесчисленное множество приложений.

Сильные стороны

  • Нулевая конфигурация и отсутствие сервера, который нужно обслуживать.
  • Вся база данных — это один переносимый файл, который легко скопировать или сохранить в резервную копию.
  • Высокая скорость локального чтения и умеренных нагрузок на запись.
  • Полная поддержка SQL с транзакциями и внешними ключами.
  • Отлично подходит для тестов, прототипов, edge-сред выполнения и встраиваемого использования.

Компромиссы

  • Ограниченная конкурентная запись (один писатель за раз; режим WAL помогает).
  • Не предназначена для большого числа сетевых клиентов или высокой пропускной способности записи.
  • Меньше продвинутых типов и нет встроенной системы пользователей и прав.
  • Масштабирование за пределы одного хоста требует другого хранилища или слоя вроде Turso/LiteFS.

Когда использовать

Используйте SQLite для локальных приложений, инструментов командной строки, десктопного и мобильного ПО, наборов тестов и небольших и средних сайтов, где преобладает чтение. Она также всё чаще оказывается жизнеспособной на edge благодаря размещённым репликам.

Подходит для вайб-кодинга

Направляя ИИ, попросите его сначала включить безопасные настройки по умолчанию: включить PRAGMA foreign_keys = ON и журналирование WAL, поскольку SQLite по умолчанию оставляет внешние ключи выключенными. Пусть он использует параметризованные запросы и хранит миграции схемы в версионируемых файлах .sql. Полезный совет: скажите ИИ, что записи сериализуются, поэтому ему следует группировать вставки в одной транзакции и избегать долгих блокировок записи. Поскольку база данных — это просто файл, попросите ИИ добавить в ваш инструментарий простой шаг резервного копирования (копирование файла или команда .backup).

PRAGMA journal_mode = WAL;
PRAGMA foreign_keys = ON;

CREATE TABLE notes (
  id         INTEGER PRIMARY KEY AUTOINCREMENT,
  title      TEXT NOT NULL,
  body       TEXT,
  created_at TEXT NOT NULL DEFAULT (datetime('now'))
);

-- Группируйте множество вставок в одной транзакции для скорости
BEGIN;
INSERT INTO notes (title, body) VALUES (?, ?);
INSERT INTO notes (title, body) VALUES (?, ?);
COMMIT;