Реляционная модель данных
4.11 Реляционная модель и модель сущность-связь
Мы уже освоили основы двух моделей данных — реляционной и сущность-связь. Начиная с этого раздела, каждый раз, изучив новую модель, будем устанавливать особенности её отображения в уже известные модели. Эти морфизмы позволят выработать единый взгляд на модели баз данных. Опыт преподавания показал, что только при таком подходе можно за ограниченное время освоить три и более моделей.
Займёмся теперь сравнением реляционной модели и модели сущность-связь. Прежде всего, обратим внимание на то, что обе модели работают на логическом уровне. На физическом уровне может работать только модель сущность-связь. На уровне аппаратной реализации обе модели бесполезны.
Основные отличия рассматриваемых моделей возникают из-за определения сильных и слабых сущностей и неотделимых от них идентифицирующей и неидентифицирующей связей.
При этом в ER-модели могут содержаться смыслы концептуального уровня, предназначенные только для человека и не реализуемые непосредственно в логической модели.
В расширенной ER-модели (EER-модель) определено ещё понятие категории, представляющей наследование в той мере, как его можно передать, не переходя к объектной системе. На логическом уровне принято изображать полную и неполную категории знаками, приведенными на рисунке 4.15. Вверху изображена родительская сущность, а внизу дочерние. В полной категории перечислены все потомки, а в неполной только часть. В некоторых категориях могут существовать экземпляры сущностей предка, которые не являются экземплярами сущностей потомка.
Для перехода на физический уровень существует три варианта. Рассмотрим их на примере с двумя потомками (рисунок 4.16):
- Все три сущности преобразуются в одну таблицу, содержащую столбцы, позволяющие отметить, к какой из исходных сущностей относится строка таблицы.
- Все сущности преобразуются каждая в свою таблицу
- Промежуточный вариант, в котором создаются две таблицы, соответствующие двум потомкам.
Выбор варианта преобразования зависит от запросов, которые собираются выполнять.
Сильные и слабые сущности можно представить в реляционной модели через внешний ключ, входящий в состав первичного ключа или отнесённый к неключевым атрибутам. Атрибуты внешнего ключа должны совпадать с атрибутами первичного ключа другого отношения, по крайней мере, по типам, а возможно, и по именам.
Сильная сущность отличается тем, что внешний ключ не может входить в состав первичного ключа. Слабая сущность должна содержать внешний ключ в своём первичном ключе. Это обстоятельство и определяет зависимость слабой сущности от другой, связываемой с ней, сущности.
В ER-модели связь называют неидентифицирующей, если она переносит внешний ключ в область неключевых атрибутов. Идентифицирующая связь перенесёт внешний ключ в область ключевых атрибутов.
Неразрывность понятий сильной и слабой сущностей с неидентифици-рующей и идентифицирующей связями в реляционной модели выразить невозможно, так как отсутствует понятие агрегации, объединения отношений в структуру высшего порядка.
В следующей главе мы используем найденные соответствия для того, чтобы теорию нормализации, первоначально созданную в рамках реляционной модели, перенести в диаграммы "сущность-связь".
4.12 Отношения и таблицы
В настоящее время реляционная модель играет роль эталона и не используется в реализациях баз данных. Одна из причин в том, что построение запросов очень часто требует выполнения декартова произведения в качестве промежуточной операции. Для больших таблиц это приводит к созданию громадных промежуточных отношений и сильно замедляет запросы.
В реализациях баз данных на физическом уровне отношениям соответствуют плоские (реляционные) таблицы, которые имеют одну одноуровневую шапку и атомарные значения в ячейках таблицы. Кортежам отношения соответствуют строки таблицы.
Существует соответствие кортежей отношения строкам представляющей его таблицы. Поскольку строки реляционных таблиц могут повторяться, то взаимно однозначного соответствия из таблицы в отношение не существует.
Пример реляционной таблицы приведен на рисунке 4.17.
Мы уже установили, что состояние отношения определяется набором входящих в него кортежей. Ещё раз отметим, что состояние отношения в реляционной теории не рассматривается. Пример состояния отношения "Сотрудники" :
Ниже приведен пример нереляционной таблицы с двумя шапками, верхней и боковой:
Самостоятельно преобразуйте её в реляционную таблицу.
Основные отличия таблиц от отношений:
- В отношении нет одинаковых кортежей. Таблицы без первичного ключа могут содержать одинаковые строки. Если, например, в таблице "сотрудник" выбирается единственный столбец "но-мер_отдела", то в таблице-результате часть строк будет повторена. Устранение повторов может изменить смысл полученного результата.
- Тело отношения есть множество, и потому кортежи не упорядочены. Строки таблиц могут быть упорядочены. В этом случае отношение можно реализовать таблицами, отличающимися порядком строк.
- Атрибуты отношения определяются с уникальными в пределах отношения именами и потому не нуждаются в упорядочении. Столбцы таблиц могут быть упорядочены. Одно отношение можно реализовать таблицами со столбцами, записанными в разном порядке. В реализациях порядок столбцов может влиять на быстродействие, хотя и незначительно.
- Отношения не имеют метрических свойств. Для таблиц они важны. Размеры столбцов и число строк определяют быстродействие запросов и инструкций манипуляции данными.
Таблица 4.2 — это краткий словарь перевода с языка реляционной модели на язык табличной модели.
Термин реляционной модели | Термин табличной модели |
Схема базы | Схема базы |
Создание схемы базы | |
Ввод строки | |
Обновление строки | |
Удаление строки | |
Отношение | Таблица (реляционного типа) |
Заголовок отношения | Заголовок таблицы |
Тело отношения | Тело таблицы |
Атрибут отношения | Столбец таблицы |
Кортеж отношения | Строка таблицы |
Арность отношения | Количество столбцов |
Типы данных и домены | Типы данных и домены |
Ширина столбца | |
Количество строк | |
Размер таблицы | |
Время исполнения |
Обратите внимание на то, что в реализациях появляются команды определения и манипулирования данными "создание схемы", "ввод строки" и т.д. Вводится несколько терминов, позволяющих охарактеризовать размеры базы и быстродействие запросов "ширина столбца", "количество строк" и т.д. Это требует изучения и учёта ещё одного уровня модели, который мы в разделе 1.3 условно назвали уровнем аппаратной реализации.