September 24, 2024

ERD-диаграммы. Нормализация.

ERD-диаграммы

ERD (Entity-Relationship Diagram) — это мощный инструмент моделирования баз данных, который позволяет графически изображать сущности, их атрибуты и связи между ними. Для студентов важно не только понимать базовые элементы, но и уметь применять ERD на практике для сложных систем, а также знать концепции нормализации и кардинальности.

Основные элементы ERD-диаграммы

  1. Сущности (Entities) — это объекты, для которых вы будете создавать таблицы в базе данных. Сущности — это, по сути, таблицы базы данных, каждая из которых содержит информацию об объектах.Примеры сущностей:
    • Пользователь
    • Продукт
    • Заказ
  2. Атрибуты (Attributes) — свойства сущностей, которые будут колонками в таблицах базы данных. Существуют несколько типов атрибутов:
    • Простые атрибуты — атрибуты, которые нельзя разделить на более мелкие элементы (например, имя).
    • Составные атрибуты — атрибуты, которые можно разделить на составляющие (например, "Полное имя" можно разделить на "Имя" и "Фамилия").
    • Многозначные атрибуты — атрибуты, у которых может быть несколько значений для одной сущности (например, у студента может быть несколько номеров телефонов).
    • Производные атрибуты — это атрибуты, которые вычисляются на основе других данных. Например, "Возраст" может быть вычислен на основе даты рождения.
  3. Ключевые атрибуты (Keys) — специальные атрибуты, которые обеспечивают уникальную идентификацию записей в таблице.
    • Первичный ключ (Primary Key) — уникальный атрибут, который идентифицирует каждую запись. Он всегда должен быть уникальным и не может быть пустым (NULL).
    • Внешний ключ (Foreign Key) — атрибут, который связывает одну сущность с другой. Он указывает на первичный ключ в другой таблице.
  4. Связи (Relationships) — они определяют, как сущности взаимодействуют друг с другом. Например, один клиент может сделать много заказов, а каждый заказ связан с одним или несколькими продуктами.

Типы связей

  1. Один к одному (1:1) — когда одному объекту из одной сущности соответствует ровно один объект другой сущности. Это довольно редкий тип связи.Пример: Один человек — один паспорт.
  2. Один ко многим (1) — одна сущность может быть связана с несколькими объектами другой сущности, но объекты другой сущности могут быть связаны только с одним объектом первой.Пример: Один автор может написать много книг, но каждая книга имеет только одного автора.
  3. Многие ко многим (M) — каждая сущность может быть связана с множеством объектов другой сущности, и наоборот.Пример: Много студентов могут посещать много курсов, и каждый курс может посещать несколько студентов.

Для связи Mв реляционных базах данных обычно создают промежуточную таблицу (junction table), которая разбивает связь на две связи "Один ко многим" и содержит внешние ключи двух связанных сущностей.

Кардинальность и обязательность (Cardinality and Participation)

  • Кардинальность показывает, сколько экземпляров одной сущности могут быть связаны с экземплярами другой. Она включает:Пример: В связи "1" один заказчик может сделать много заказов.
    • Один (1)
    • Много (N)
  • Обязательность (Participation) описывает, является ли участие сущности в связи обязательным или нет.
    • Полное участие — все экземпляры сущности обязаны участвовать в связи.
    • Частичное участие — некоторые экземпляры сущности могут не участвовать в связи.

Дополнительные концепции

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

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

Основные формы нормализации:

  • 1NF (Первая нормальная форма) — данные в каждой колонке должны быть атомарными (неделимыми).
  • 2NF (Вторая нормальная форма) — все атрибуты должны зависеть от первичного ключа целиком.
  • 3NF (Третья нормальная форма) — данные не должны зависеть от неключевых атрибутов.

2. Слабые сущности (Weak Entities)

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

Пример: Сущность "Заказ" может быть слабой по отношению к сущности "Клиент", так как заказ не может существовать без клиента.

3. Генерализация и специализация

Это концепция, которая используется для описания иерархических отношений между сущностями.

  • Генерализация — объединение нескольких схожих сущностей в одну более общую сущность. Например, сущности "Сотрудник" и "Клиент" можно обобщить в сущность "Человек".
  • Специализация — наоборот, это процесс разделения общей сущности на более специфические. Например, сущность "Человек" можно разделить на "Учитель" и "Студент".

Пример сложной ERD-диаграммы

Представим пример для онлайн-магазина:

  1. Сущности:
    • Покупатель (Customer)
    • Заказ (Order)
    • Продукт (Product)
    • Категория (Category)
  2. Связи:
    • Покупатель делает заказы (1)
    • Заказ содержит продукты (M через промежуточную сущность "OrderProduct")
    • Продукт принадлежит к одной категории (N:1)

Этот пример показывает, как несколько сущностей взаимодействуют друг с другом через связи "Один ко многим" и "Многие ко многим".

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

Основные концепции нормализации

1. Аномалии данных

Аномалии возникают, когда структура базы данных недостаточно оптимизирована. Вот основные типы аномалий:

  • Аномалия обновления: Из-за дублирования данных при изменении одного из экземпляров может потребоваться обновление всех копий. Если какая-то копия не обновлена, данные становятся несогласованными.
  • Аномалия вставки: Когда нельзя вставить данные в базу, не добавив при этом избыточную информацию.
  • Аномалия удаления: Удаление данных может привести к утрате полезной информации, которую не планировалось удалять.

2. Первичный ключ

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

Нормальные формы

Первая нормальная форма (1NF)

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

Пример:

Ненормализованная таблица:

Здесь в колонке "Предметы" хранится несколько значений. Это нарушает 1NF.

Таблица в 1NF:

Теперь каждое значение атомарно, и таблица находится в 1NF.

Вторая нормальная форма (2NF)

2NF требует, чтобы таблица соответствовала 1NF и не имела частичных зависимостей. Это значит, что все атрибуты должны зависеть от всего первичного ключа, а не только от его части.

Частичная зависимость возникает, когда таблица имеет составной первичный ключ, и не все атрибуты зависят от всего ключа.

Пример:

Таблица в 1NF, но не в 2NF:

Здесь первичный ключ — это комбинация "Студент" и "Курс", но атрибут "Преподаватель" зависит только от "Курс". Это нарушает 2NF.

Для приведения таблицы к 2NF нужно разделить её на две таблицы:

Таблица 1: Студенты-Курсы

Таблица 2: Курсы-Преподаватели

Теперь каждая таблица находится в 2NF: все атрибуты зависят от полного первичного ключа.

Третья нормальная форма (3NF)

Третья нормальная форма требует, чтобы таблица находилась в 2NF и не содержала транзитивных зависимостей. Это значит, что не должно быть зависимостей между неключевыми атрибутами. То есть, если есть зависимость "Атрибут А → Атрибут Б → Атрибут В", то необходимо разделить данные на отдельные таблицы.

Пример:

Таблица в 2NF, но не в 3NF:

Таблица 1: Студенты

Таблица 2: Группы

Теперь каждая зависимость проходит через первичный ключ, и таблицы находятся в 3NF.

Четвёртая нормальная форма (4NF)

4NF требует, чтобы в таблице не было многозначных зависимостей. Это означает, что один атрибут не должен зависеть от нескольких независимых атрибутов одновременно.

Пример:

Допустим, у нас есть таблица, которая показывает, какие студенты посещают какие курсы и какие книги они используют для этих курсов:

Здесь "Курс" и "Книга" независимы друг от друга, но оба зависят от студента. Это нарушает 4NF.

Чтобы исправить это, мы разделим таблицу на две:

Таблица 1: Студенты-Курсы

Таблица 2: Курсы-Книги

Теперь зависимости устранены, и таблицы находятся в 4NF.

Пятая нормальная форма (5NF)

5NF решает проблему с так называемыми "разложениями" данных. Она требует, чтобы таблицы были разделены таким образом, чтобы каждая зависимость могла быть восстановлена только через первичный ключ. Это предотвращает избыточность и аномалии при разложении таблиц на более мелкие части.

Пример:

Рассмотрим таблицу "Проект", которая связывает "Менеджера", "Проект" и "Поставщика". Допустим, у нас есть таблица:

Здесь каждая комбинация менеджера, проекта и поставщика может быть независимой. Для 5NF нужно разделить таблицу на три части:

Таблица 1: Менеджеры-Проекты

Таблица 2: Проекты-Поставщики

Преимущества нормализации

  1. Избегание избыточности — данные не дублируются, что снижает затраты на хранение и предотвращает несогласованность данных.
  2. Устранение аномалий — нормализованные данные защищены от аномалий при вставке, обновлении и удалении данных.
  3. Целостность данных — нормализация помогает поддерживать целостность данных, обеспечивая связь между сущностями через первичные и внешние ключи.
  4. Упрощение запросов — нормализованные базы данных часто проще для выполнения сложных запросов, поскольку данные хорошо структурированы.