- •Реляционные базы данных
- •Табличное представление
- •Реляционные базы данных
- •Первые разработки
- •Повторяющиеся группы
- •Древовидные структуры
- •Добавления в нормализованной схеме
- •Размещение (номер-здания, номер-отдела)
- •Сетевые структуры
- •Процедура конструирования
- •Пути использования данных
- •Каноническая структура записей (сегментов)
- •Комбинированные овал-диаграммы
- •Устранение избыточности
- •Ключи и атрибуты
- •Вторичные ключи
- •Транзитивные зависимости
- •Отношения между ключами
- •Последовательность записей
- •Три уровня автоматизации
- •Недостатки
- •Заключение. Преимущества реляционной базы
Реляционные базы данных
Сторонники нормализации ввели собственную терминологию и называют простые вещи специальными словами. Таблица такого вида, как на рис. 5.3, называется отношением. База данных, построенная с помощью отношений, называется реляционной базой данных. Таким образом, реляционная база данных строится из «плоских» (двумерных) наборов элементов данных.
Отношение, или таблица, - это набор кортежей. Если кортежи являются n-мерными, т. е. если таблица имеет n столбцов, отношение называется отношением степени п. Отношение степени 2 называется бинарным, отношение степени 3 - тернарным, а отношение степени п - п - арным.
Набор значений элементов данных одного типа, т. е. один столбец таблицы, называется доменом. Столбец с номером j называется j - м доменом отношения.
В математике R определяется как отношение, заданное на n множествах S1, S2, ..., Sn (не обязательно различных), если оно представляет собой набор кортежей, таких, что первый элемент каждого кортежа есть элемент из S1, второй - элемент из S2 и т. д.
Для сенсация таких отношений и операций над ними существуют точные математические обозначения, основанные на алгебре отношений или исчисления отношений. Кодд [4] разработал специальный язык манипулирования денными для такой базы. В этом языке может быть выражен обычный диалог человека с машиной. Мы, однако, будем использовать нематематический язык для описания способов манипулирования кортежами.
Различные пользователи могут выделять в базе данных различные наборы элементов данных и связи между ними. Следовательно, необходимо иметь возможность извлекать подмножества столбцов таблицы для одних пользователей, создавая таблицы меньшей размерности, а также объединять таблицы для других пользователей, создавая при этом таблицы большей размерности.. Язык Кодда содержит обе операции. Так как некоторые таблицы могут иметь очень много строк и столбцов, необходимо уметь выделять в них нужные подмножества. Благодаря операциям разрезания и склеивания таблицы обладают гибкостью, которой лишено большинство древовидных и сетевых структур.
С логической точки зрения база данных - это множество двумерных таблиц с операциями извлечения и объединения столбцов.
Первые разработки
Несколько разработок реляционных баз данных уже известно. В работах [8-11] обсуждаются наиболее ранние из них (предшествовавшие работе Кодда). Работы [12-18] относятся к более поздним исследованиям. В работах [8-10, 12] используются бинарные отношения, т. е. отношения только двух доменов. Известно, что бинарные отношения придают наибольшую гибкость базе. Однако в коммерческих задачах удобными являются отношения различных степеней. Большинство баз данных, использующих бинарные отношения, предложено для работы с данными, которые по структуре гораздо проще, чем в обычных коммерческих системах.
Повторяющиеся группы
Тот факт, что любой файл можно представить в виде двумерных файлов, нередко шокирует специалистов, привыкших к древовидным и сетевым структурам. Рассмотрим несколько примеров.
Прежде всего заметим, что файл, являющийся «двумерным» всюду, кроме повторяющейся группы, может быть нормализован путем выделения этой повторяющейся группы в отдельную таблицу, т. е. в двумерный файл (рис. 13.1).
Рис. 13.1. Выделение повторяющейся группы в отдельную таблицу путем расщепления
Полученному таким образом новому файлу (таблице) присваивается собственное имя. Новый файл должен иметь ключи, по которым однозначно определяется любой кортеж. Элемент данных НОМЕР-ЗАКАЗА повторен в файле ПАРТИЯ-ТОВАРА и совместно с элементом данных НОМЕР-ИЗДЕЛИЯ образует однозначный идентификатор кортежа.
Можно возразить, что при этом увеличивается избыточность: элемент данных НОМЕР-ЗАКАЗА фигурирует в базе дважды. Однако при нормализации вовсе не требуется, чтобы некоторый элемент данных действительно появлялся более чем в одной записи в качестве идентификатора. Подобное дублирование вовсе не влечет дополнительных расходов памяти, ибо нормализация связана с логическим представлением структур с точки зрения пользователя и не имеет отношения к способу их физического представления в памяти.
Если при разработке базы не устранить подобным образом повторяющиеся группы, то не исключена возможность, что это потребуется сделать в процессе развития базы. Например, со временем могут появиться программы, в которых некоторый кортеж файла ПАРТИЯ - ТОВАРА (рис. 13.1) будет привязан к различным записям. База данных ЗАКАЗ-НА-ЗАКУПКУ может разрастись до базы, изображенной на рис. 6.9, в которой появляются связи между записями ПОСТАВЩИК и ПАРТИЯ-ТОВАРА. В этом случае (рис. 6.9) целесообразно сделать так, чтобы запись ПАРТИЯ-ТОВАРА была отдельной записью, а не повторяющейся группой в записи файла ЗАКАЗ-НА-ЗАКУПКУ. Если возникнет необходимость в выделении повторяющейся группы после того, как программы уже написаны, то придется переписывать и отлаживать эти программы заново. Нормализация базы и независимость данных относительно прикладных программ позволяют избежать дополнительных расходов в процессе эксплуатации.
КЛЮЧИ
Каждый кортеж должен иметь ключ - идентификатор. Иногда кортеж может идентифицироваться значением одного атрибута. На рис. 13.1 атрибут НОМЕР-ЗАКАЗА однозначно определяет кортеж файла ЗАКАЗ-НА-ЗАКУПКУ. Но бывает и так, что для идентификации кортежа необходимы значения нескольких атрибутов. Для определения кортежа файла ПАРТИЯ-ТОВАРА на рис. 13.1 недостаточно одного атрибута, и ключ должен состоять из двух атрибутов: НОМЕР- ЗАКАЗА и НОМЕР-ИЗДЕЛИЯ. Ключ должен обладать двумя свойствами:
1. Однозначная идентификация кортежа, кортеж должен однозначно определяться значением ключа.
2. Отсутствие избыточности, никакой атрибут нельзя удалить из ключа, не нарушая при этом свойства однозначной идентификации.
Для кортежей одного отношения может существовать несколько наборов атрибутов, удовлетворяющих двум приведенным свойствам. Такие наборы называются возможными ключами. Тот ключ, который фактически будет использоваться для идентификации записей, называется первичным ключом. Для первичного ключа атрибуты следует выбирать так, чтобы для них был заранее известен диапазон значений, а их количество было бы как можно меньше.
Чтобы не чертить таблицы, подобные приведенным на рис. 13.1, будем использовать систему обозначений такого типа:
ЗАКАЗ-НА-ЗАКУПКУ (НОМЕР-ЗАКАЗА, НОМЕР-ПОСТАВЩИКА, ДАТА-ЗАКАЗА, ДАТА-ПОСТАВКИ, ИТОГО)
ПАРТИЯ-ТОВАРА (НОМЕР-ЗАКАЗА, НОМЕР-ИЗДЕЛИЯ, ЦЕНА, КОЛИЧЕСТВО)
Перед скобками записано имя отношения; названия доменов перечислены внутри скобок. Подчеркнуты ключи, необходимые для идентификации кортежей (первичные ключи).