Найти в Дзене
programmer's notes (python and more)

Реляционные базы данных. Связи между таблицами. Продолжение. Модальность связи. Приложение к видео

Оглавление

Доброго времени суток, читатели, зрители моего канала programmer's notes. Не забывайте подписываться и писать свои комментарии к моим статьям и видео.

Приложение к видео

Ещё о связях между таблицами. Модальность связи

Продолжаем рассматривать связи между таблицами. Данный текст повторяет эту вот видео-лекцию.

Я неоднократно говорил, что проектирование баз данных зиждется на двух китах: постановка задачи и анализ предметной области. На рисунке 1 представлены пара связанных таблиц, которые мы рассматривали на прошлой лекции. Я говорил, что в этой паре таблица "Оценки" играет подчиненную роль или, как говорят, это слабая таблица по отношению к таблице "Студенты". Можно использовать простое рассуждение: оценка без студента не существует, а студент без оценки.

Модальность связи

Рисунок 1. Типовая связь между двумя таблицами
Рисунок 1. Типовая связь между двумя таблицами

Введём важную характеристику связи - модальность. Модальность характеризует связь с обеих концов. Модальность 0 означает, что не все записи обязаны участвовать в связи. Модальность 1 означает, что все записи таблицы должны участвовать в связи (см. Рисунок 2).

Рисунок 2. Связь с указанием модальности
Рисунок 2. Связь с указанием модальности

Но всё не так просто. И я снова обращусь к постановке задачи. Несколько изменю структуру таблицы "Оценки" (см. Рисунок 3).

Рисунок 3. Таблица "Оценки" может играть самостоятельную роль
Рисунок 3. Таблица "Оценки" может играть самостоятельную роль

Представим себе, в нашей базе данных данные хранятся за много лет, возможно по всему университету или даже региону. В этом случае, возможно, нам уже не интересно, кто получал какие оценки. Важны сами оценки. Ну, например, для анализа того, как менялась успеваемость студентов за много лет. Для этого совсем не обязательно, чтобы в таблице "Студенты" были все записи. В этом случае снимается требование, что все записи таблицы "Оценки" должны участвовать в связи. В результате мы получаем следующую схему данных (см. Рисунок 4). Таблица "Оценки", в сущности, перестаёт быть зависимой и связь на рисунке 4 только формально представляет сильную и слабую таблицу. Формальный признак PK-FK, конечно, остаётся.

Рисунок 4. Иная модальность - иные смыслы
Рисунок 4. Иная модальность - иные смыслы

Связь через промежуточную таблицу

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

Рисунок 5. Сущности Студенты и Преподаватели связаны через таблицу Оценки
Рисунок 5. Сущности Студенты и Преподаватели связаны через таблицу Оценки

Когда понимаешь, что связь между сущностями есть, но она не прямая, нужно искать посредника (или посредников). В случае с сущностями "Студенты" и "Преподаватели" можно построить еще связи.

1. Через нагрузку преподавателя, где указаны дисциплины и группы студентов. В этом случае между Студентом и Преподавателем появляются целых два посредника: Студенческая группа и Нагрузка преподавателя. Нагрузка преподавателя. кстати, тоже является документом.

2. Ещё одна связь реализуется через расписание: Студент -- Студенческая группа -- Расписание -- Преподаватель. Расписание тоже, кстати, является документом.

Рисунок 6.  Сущности Пациент и Доктор связаны через таблицу Приём
Рисунок 6. Сущности Пациент и Доктор связаны через таблицу Приём

На рисунке 6 представлена связь между сущностями "Пациент" и "Доктор". Связь реализуется во время приёма и выражается документом, называемым Амбулаторная карта.

Ну, пока всё!

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

Программирование и проектирование реляционных баз данных | programmer's notes (python and more) | Дзен
Между нами нет никакой связи
Между нами нет никакой связи