ОП.08 Основы проектирования баз данных Учебный конспект

Анализ предметной области: сущности и свойства

Концептуальное моделирование информационных систем: выделение сущностей, классификация атрибутов, спецификация доменов и выбор ключей.

1. Инфологическое моделирование: от реальности к схеме

Любая база данных создается не сама по себе, а для обслуживания процессов в некоторой предметной области (Domain Area). Предметная область — это часть реального мира, подлежащая изучению и автоматизации (например: автопарк логистической компании, библиотека колледжа, регистратура клиники или складской комплекс).

Процесс создания базы данных начинается с инфологического (концептуального) анализа. На этом этапе проектировщик взаимодействует с экспертами предметной области, изучает документооборот, регламенты и вербальные описания бизнес-процессов, абстрагируясь от технических деталей СУБД (PostgreSQL, MySQL или Oracle).

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

Сущность (Entity) и её Экземпляр (Instance)

Центральным понятием инфологической модели является сущность.

Адаптивный алгоритм выделения сущностей из текстового описания
Шаг 1. Анализ текста и поиск существительных

Выписать из технического задания все ключевые существительные (клиент, заказ, деталь, мастер, оплата, чек).

↓
Шаг 2. Проверка независимости и множественности

Существует ли данный объект независимо? Имеет ли он множество однотипных представителей в системе?

↓
Шаг 3. Проверка на наличие собственных характеристик

Обладает ли объект собственным набором атрибутов (свойств), или это просто единичное значение (цвет, статус)?

↓
Результат: Утверждение сущности или понижение до атрибута

Если объект имеет свойства и независимый жизненный цикл → фиксируем как СУЩНОСТЬ. Если это единичное значение → делаем АТРИБУТОМ.

2. Классификация атрибутов сущности

Атрибут (Attribute) — поименованное свойство сущности, отражающее качественную или количественную характеристику её экземпляров. Для грамотного реляционного проектирования атрибуты классифицируются по трем независимым осям:

Ось классификации Категория атрибута Характеристика и семантика Проектное решение в БД
По структуре Простые (атомарные) Не содержат составных частей (Возраст, Оклад). Хранятся в одном неделимом столбце.
Составные (декомпозируемые) Состоят из смысловых компонентов (ФИО, Адрес). Декомпозируются на атомарные столбцы (Фамилия, Имя, Город).
По кардинальности Однозначные Имеют ровно одно значение для одного экземпляра (Дата_рождения). Стандартный столбец таблицы.
Многозначные Могут содержать список значений (Авторы, Телефоны). Запрещено хранить через запятую! Выносятся в дочернюю связанную таблицу.
По источнику Базовые (хранимые) Вводятся пользователем и сохраняются физически (Цена, Количество). Физическое поле на диске.
Производные (вычисляемые) Рассчитываются на основе других атрибутов (Сумма = Цена * Кол-во). Не хранятся (или вычисляются в VIEW / GENERATED COLUMN) во избежание рассинхронизации.
Адаптивный алгоритм классификации атрибута при проектировании
Шаг 1. Проверка на вычисляемость

Можно ли вычислить этот атрибут математически по другим полям (например, Сумма = Кол-во * Цена)? Да → ПРОИЗВОДНЫЙ (не хранить). Нет → перейти к Шагу 2.

↓
Шаг 2. Проверка на многозначность

Может ли у одного объекта быть несколько таких значений (несколько телефонов, соавторов)? Да → МНОГОЗНАЧНЫЙ (вынести в отдельную таблицу). Нет → перейти к Шагу 3.

↓
Шаг 3. Проверка на атомарность (делимость)

Требуется ли отдельный поиск или сортировка по компонентам (например, сортировка по фамилии)? Да → СОСТАВНОЙ (разбить на части). Нет → ПРОСТОЙ АТОМАРНЫЙ.

3. Теория доменов и ограничения целостности

Домен (Domain) — это множество всех потенциально допустимых значений атрибута. Понятие домена значительно шире, чем просто тип переменной в языке программирования или тип столбца в СУБД.

Различие типа данных и домена: Тип данных INT определяет машинный формат (4 байта со знаком, от -2 млрд до +2 млрд). Домен же накладывает бизнес-ограничения предметной области: «Возраст человека» — это целое число в диапазоне от 0 до 125, но никак не -500 и не 1 000 000.

Элементы спецификации домена

  1. Тип данных: строковый, целочисленный, вещественный, дата/время, булев.
  2. Смысловой диапазон: CHECK (Скидка >= 0 AND Скидка <= 100).
  3. Формат и маска: шаблон для ИНН, СНИЛС, VIN, email-адреса.
  4. Перечисление допустимых констант: статус заказа ENUM('Новый', 'В сборке', 'Отправлен').
  5. Определенность значения: обязательность ввода NOT NULL или допустимость неизвестного значения NULL.

4. Идентификация сущностей: Ключи и их природа

Каждый экземпляр сущности должен быть однозначно различим среди всех остальных. Для этого используется аппарат ключей.

Потенциальные ключи (Candidate Keys)

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

У сущности может быть несколько потенциальных ключей. Например, у сущности Студент потенциальными ключами являются:

Выбор Первичного ключа (Primary Key)

Один из потенциальных ключей назначается первичным ключом (PK). Остальные потенциальные ключи становятся альтернативными ключами (AK) и контролируются уникальными индексами.

Естественные против Суррогатных ключей

Естественный ключ (Natural Key) берется из реального мира (VIN автомобиля, паспортные данные, ISBN). Он понятен человеку, но обладает серьезными недостатками: длинный строковый формат замедляет индексы, а при изменении документа в реальном мире требуется сложное обновление внешних ключей по всей базе.

Суррогатный ключ (Surrogate Key) — это искусственно добавленный системный идентификатор (например, целое число ID INT AUTO_INCREMENT). Он абсолютно стабилен, не несет бизнес-логики и обеспечивает максимальную производительность связей.

Инженерный вывод: В современных реляционных базах данных общепринятым стандартом является использование компактных суррогатных ключей в качестве первичных, в то время как естественные идентификаторы защищаются ограничением UNIQUE как альтернативные ключи.

5. Вопросы и практические ситуации для самопроверки

Вопрос 1: В чем фундаментальное различие между понятием «Сущность» и понятием «Экземпляр сущности»?
Эталонный ответ: Сущность — это тип/класс объектов и шаблон их описания (схема таблицы, например, «Сотрудник»), а экземпляр — конкретный объект реального мира с индивидуальными значениями атрибутов (конкретная строка таблицы, например, «Иванов И.И., таб. №105»).
Вопрос 2: Почему атрибут «Возраст» не рекомендуется хранить в реляционной базе данных как физический столбец? Каким типом атрибута он является?
Эталонный ответ: «Возраст» является производным (вычисляемым) атрибутом. Если хранить возраст физически, данные устареют уже через год. В базе данных хранят базовый атрибут «Дата рождения», а возраст рассчитывают динамически при запросе.
Вопрос 3: Заказчик просит сделать поле «Контактные телефоны» и записывать туда все номера через запятую. Почему проектировщик обязан отказать и как поступить правильно?
Эталонный ответ: Это многозначный атрибут, нарушающий требования первой нормальной формы (атомарность данных). Запись через запятую делает невозможным быстрый поиск по индексу, сортировку и проверку уникальности. Правильное решение — создать отдельную связанную сущность «Телефон» или таблицу связей.
Вопрос 4: Чем домен атрибута отличается от базового технического типа данных SQL?
Эталонный ответ: Тип данных определяет лишь машинное представление (например, INT — 4 байта со знаком). Домен включает бизнес-контекст: смысловой диапазон значений, формат маски, список допустимых констант (ENUM) и правило обязательности (NOT NULL).
Вопрос 5: В таблице «Автомобили» есть уникальный VIN-код из 17 символов. Зачем разработчики все равно вводят суррогатный числовой ID_автомобиля?
Эталонный ответ: Числовой ID (4 или 8 байт) в разы компактнее строки из 17 символов, быстрее индексируется и связывается по внешним ключам (JOIN). Кроме того, если оператор ошибся при вводе VIN и исправляет его, суррогатный ID остается неизменным, и дочерние таблицы не страдают.