Разработка ПО · 14 октября 2026 · 3 мин чтения

Проектирование базы данных: таблицы, связи и индексы

Эта страница на узбекском: /uz/blog/sql-malumotlar-bazasini-loyihalash

База данных — фундамент информационной системы. Интерфейс перерисовать сравнительно просто, а изменить структуру базы, в которой накоплены годы записей и на которую завязаны отчёты, — долгая и рискованная работа. Поэтому проектированию базы стоит уделить время до начала программирования.

Реляционная модель простыми словами

Данные хранятся в таблицах: строки — записи, столбцы — атрибуты. Клиенты в одной таблице, заказы в другой, товары в третьей. Таблицы связаны ключами: в каждом заказе хранится идентификатор клиента, а не его имя и телефон. Язык SQL позволяет собирать данные из связанных таблиц одним запросом. Распространённые СУБД — PostgreSQL, MySQL, Microsoft SQL Server.

Шаги проектирования

  1. Выделить сущности предметной области: клиент, заказ, позиция заказа, товар, склад, сотрудник, оплата.
  2. Определить атрибуты каждой сущности и их типы: текст, число, дата, деньги, флаг.
  3. Определить связи: один клиент — много заказов; один заказ — много позиций; товар может лежать на многих складах.
  4. Нормализовать: убрать дублирование данных.
  5. Добавить ограничения и индексы.
  6. Проверить модель на реальных сценариях и отчётах.

Ключи и связи

Первичный ключ — уникальный идентификатор записи. Внешний ключ — ссылка на запись другой таблицы. Связь «многие ко многим», например товары и категории, реализуется через промежуточную таблицу. Внешние ключи с ограничениями не позволят, например, создать заказ несуществующего клиента или удалить товар, по которому есть продажи.

Нормализация

Каждый факт хранится в одном месте. Если адрес клиента записан в каждом заказе, при его изменении придётся обновлять сотни строк, а часть обязательно забудут. Но есть важное исключение: цена товара в заказе должна сохраняться в позиции заказа, а не браться из справочника. Иначе после изменения цены старые заказы «пересчитаются». Это сознательное хранение исторического значения, а не ошибка нормализации.

Индексы

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

Ограничения целостности

  • Обязательные поля не могут быть пустыми
  • Уникальность там, где дубли недопустимы: номер документа, логин, ИНН контрагента
  • Проверки значений: количество не отрицательное, дата окончания позже даты начала
  • Деньги хранятся в точном числовом типе, а не в типе с плавающей точкой, чтобы не терять тийины при расчётах

История и аудит

Бизнесу часто нужно знать, кто и когда изменил запись: цену, статус заказа, лимит клиента. Это закладывается сразу: поля «создано/изменено кем и когда», отдельные таблицы истории для важных сущностей. Удаление нередко заменяют пометкой «удалено», чтобы не терять связанные данные.

Типичные ошибки

  • Всё в одной большой таблице со столбцами «товар1», «товар2», «товар3»
  • Статусы и типы хранятся свободным текстом с разным написанием
  • Нет внешних ключей, и через год в базе полно «висящих» записей
  • Телефоны в разных форматах, из-за чего поиск клиента не находит дубликаты
  • Отчёты строятся по рабочей базе тяжёлыми запросами в часы пик
  • Нет резервного копирования и проверки восстановления

Что спросить у разработчика

Попросите схему базы — диаграмму таблиц и связей — и пройдите по ней с ключевыми сценариями: как оформляется заказ, как считается остаток, как строится отчёт по продажам. Уточните, как устроено резервное копирование и как часто проверяется восстановление. Убедитесь, что схема и скрипты изменений базы хранятся вместе с кодом.

Обсудим задачу

Оставьте имя и телефон — перезвоним, расспросим о процессе и предложим, с чего начать.

Обсудить проект

Статьи по теме

Разработка ПО

ТЗ и бриф: в чём разница и что готовить первым

Бриф и техническое задание часто путают, хотя они решают разные задачи на разных этапах. Разбираем разницу и порядок работы с этими документами.

14 октября 2026

Разработка ПО

ТЗ по ГОСТ 34: когда нужен и как выглядит

ГОСТ 34 задаёт строгую структуру ТЗ на автоматизированные системы. Разбираем, из каких разделов оно состоит, когда без него не обойтись и как использовать стандарт разумно.

14 октября 2026

Разработка ПО

ТЗ как приложение к договору: что зафиксировать

Когда ТЗ становится приложением к договору, каждая формулировка превращается в обязательство. Разбираем, что обязательно зафиксировать, чтобы избежать споров при приёмке.

14 октября 2026

Разработка ПО

Системный аналитик и ТЗ: кто и как пишет требования

Техническое задание пишет не программист и не менеджер, а системный аналитик. Разбираем, что он делает, какие артефакты выдаёт и как понять, что требования готовы к разработке.

14 октября 2026

Разработка ПО

ТЗ и спецификация: в чём разница между документами

Слова «ТЗ» и «спецификация» часто используют как синонимы, но в проектах это разные документы. Разбираем, чем они отличаются и какой из них нужен вашему проекту.

14 октября 2026

Разработка ПО

ТЗ и технический проект: что описывает каждый документ

ТЗ говорит, что должна делать система, технический проект — как она будет устроена. Разбираем содержание обоих документов и когда без технического проекта не обойтись.

14 октября 2026

Заявка

Обсудим задачу

Оставьте имя и телефон — перезвоним, расспросим о процессе и предложим, с чего начать.

Или позвоните

+998 94 444 48 85

Нажимая кнопку, вы соглашаетесь на обработку контактных данных.