Лекция 4. Преобразование ER-модели в реляционную структуру
В предыдущих лекциях мы научились создавать концептуальные ER-модели и разобрали, из чего состоит реляционная модель. Теперь настал ключевой момент: научиться систематически преобразовывать ER-диаграмму в набор реляционных таблиц. Существует формальный набор правил (алгоритм) для такого преобразования.
Шаг 1: Преобразование сущностей
Правило: Каждая сильная сущность в ER-модели становится отдельной таблицей (отношением) в реляционной модели.
- Простые атрибуты сущности становятся столбцами этой таблицы.
- Ключевой атрибут сущности становится первичным ключом (PRIMARY KEY) таблицы.
Пример: Сущность Студент с атрибутами ID_Студента, ФИО, Дата_Рождения преобразуется в таблицу `Students`.
Шаг 2: Преобразование слабых сущностей
Правило: Слабая сущность также становится таблицей, но ее первичный ключ является составным.
- Создается таблица для слабой сущности.
- В эту таблицу добавляется внешний ключ (FOREIGN KEY), ссылающийся на первичный ключ таблицы-владельца.
- Первичный ключ новой таблицы состоит из этого внешнего ключа и частичного ключа самой слабой сущности.
Шаг 3: Преобразование связей
Это самый важный этап, правила которого зависят от кардинальности связи.
Связь "Один-ко-Многим" (1:M)
Правило: Первичный ключ со стороны "1" добавляется в качестве внешнего ключа (FOREIGN KEY) в таблицу на стороне "M".
Пример: Связь "Преподаватель (1) — Группа (M)". Первичный ключ преподавателя (`teacher_id`) добавляется в таблицу `Groups`.
Связь "Многие-ко-Многим" (M:N)
Правило: Для связи типа M:N создается отдельная, третья таблица (ее называют связующей или ассоциативной).
- Эта новая таблица содержит как минимум два столбца — внешние ключи, которые ссылаются на первичные ключи двух связанных таблиц.
- Комбинация этих двух внешних ключей обычно становится составным первичным ключом для связующей таблицы.
- Если у самой связи были атрибуты (например, "дата зачисления" в связи "Студент-Курс"), они становятся обычными столбцами в этой же связующей таблице.
Пример: Связь "Студент (M) — Курс (N)". Создается таблица `Enrollments`.
Связь "Один-к-Одному" (1:1)
Правило: Реализуется с помощью внешнего ключа, но есть варианты.
- Слияние в одну таблицу: Если участие в связи является обязательным с обеих сторон, можно объединить две сущности в одну таблицу.
- Отдельные таблицы: Первичный ключ одной таблицы добавляется как внешний ключ в другую. Чтобы строго обеспечить связь 1:1, на столбец внешнего ключа нужно дополнительно поставить ограничение уникальности (UNIQUE).
Шаг 4: Преобразование многозначных атрибутов
Правило: Если у сущности есть многозначный атрибут (например, несколько номеров телефона у одного человека), для этого атрибута создается отдельная таблица.
- Новая таблица будет содержать два столбца: один для значения самого атрибута (номер телефона) и второй — внешний ключ, ссылающийся на первичный ключ исходной таблицы (например, `student_id`).
Практическое задание
Алгоритм преобразования ER-модели применяется в объединенной Практике 3 на той же предметной области «Библиотека», с которой вы работали в Практике 2.
Перейти к Практике 3: Реляционная схема библиотеки и начальные данные.