Реляционное представление данных
Термин отношение используется здесь в его принятом математическом смысле. Для заданных множеств Sl, S2, . . . , Sn (не обязательно различных) R является отношением на этих n множествах, если представляет собой некоторое множество n-кортежей, у каждого из которых первый элемент принадлежит Sl, второй – S2 и т.д. Мы будем называть Sj j-ым доменом R. Определенное выше отношение имеет степень n. Отношения степени 1 часто называют унарными, степени 2 – бинарными, степени 3 – тернарными и степени n – n-арными
Для наглядности мы будем часто использовать представления отношений в виде массивов, однако необходимо помнить, что это частное представление не является существенной частью разъясняемого реляционного представления. У массива, представляющего n-арное отношение R, имеются следующие свойства:
- каждая строка представляет некоторый n-кортеж R;
- порядок строк не является существенным;
- все строки различны;
- порядок столбцов является существенным – он соответствует порядку Sl, S2, . . . , Sn доменов, на которых определено отношение R;
- смысл каждого столбца частично передается путем его пометки именем соответствующего домена.
Пример на рис. 1 иллюстрирует отношение степени 4 с именем ship, которое показывает выполняемые поставки деталей в указанных количествах от указанных поставщиков в указанные проекты.
ship | supplier | part | project | quantity |
1 | 2 | 5 | 17 | |
1 | 3 | 5 | 23 | |
2 | 3 | 7 | 9 | |
2 | 7 | 5 | 4 | |
4 | 1 | 1 | 12 |
Рис. 1. Отношение степени 4.
Можно было бы задать следующий вопрос: если столбцы помечаются именами соответствующих доменов, то зачем нужна упорядоченность столбцов? Как показывает пример на рис. 2, у двух столбцов могут иметься одинаковые заголовки (что означает одинаковые домены), но они могут они иметь разный смысл для этого отношения. Показанное отношение называется component. Это бинарное отношение, каждый из двух доменов которого называется part. Смысл component (x, y) состоит в том, что деталь x является непосредственным компонентом (или узлом) детали y.
component | part | part |
1 | 5 | |
2 | 5 | |
3 | 5 | |
2 | 6 | |
3 | 6 | |
4 | 7 | |
6 | 7 |
Далее, мы утверждаем, что банк данных является коллекцией изменяющихся во времени отношений. Эти отношения обладают соответствующими степенями. По мере времени в каждое n-арное отношение могут вставляться новые n-кортежи, из него могут удаляться существующие кортежи, и компоненты любых существующих кортежей могут изменяться. Индивидуальное описание отдельного объекта (например, конкретной детали) называется сущностью [3]. Прототипное описание класса объектов называется типом сущности. Множество сущностей данного типа можно считать отношением, и мы будем называть такое отношение отношением типа сущности. В рассматриваемом ниже примере отношение типа сущности part могло бы определяться на следующих доменах:
и, возможно, других доменах. Каждый из этих доменов, по существу, является пулом значений, отдельные из которых или все они могут быть в любое время представлены в банке данных. Хотя может случиться, что в какой-то момент времени в банке данных будут представлены все цвета деталей, маловероятно, что в нем будут представлены все возможные веса, названия и номера деталей. Домены, перечисленные выше, соответствуют тому, что принято называть атрибутами типа сущности part.
Обычно один атрибут (или комбинация атрибутов) данного типа сущности обладает значениями, уникально идентифицирующими каждую сущность. Такой атрибут (или комбинация) называется ключом. В приведенном выше примере ключом был бы номер детали (part number), но не цвет детали (part color). Ключ является неизбыточным, если он является единичным атрибутом (не комбинацией) или такой комбинацией, что ни один из входящих в нее атрибутов не является избыточным при идентификации каждой сущности.
У типа сущности может иметься более одного неизбыточного ключа. В примере так могло бы быть, если бы разные детали всегда по-разному назывались.
Остальные отношения в банке данных существуют между типами сущностей и поэтому называются межсущностными отношениями. Важным свойством любого межсущностного отношения является то, что его домены включают, по крайней мере, два ключа, которые относятся либо к разным типам сущности, любо к некоторому общему типу сущности, играющему разные роли.
Это помогают понять примеры с рис. 1 и 2. Отношение, показанное на рис. 1, включает три ключа, по одному для каждого из типов сущностей supplier, part, project. Отношение, показанное на рис. 2, включает два ключа, которые относятся к общему типу сущности part. Первый ключ служит для идентификации некоторого компонента, а второй – для идентификации некоторого агрегата, содержащего этот компонент.
До сих пор мы обсуждали примеры отношений, определенных на простых доменах, т.е. доменах, элементами которых являются простые (не разлагаемые на составные части) значения. В рамках реляционного представления можно обсуждать и не атомарные значения. Таким образом, элементами некоторых доменов могут быть отношения. В свою очередь, эти отношения могут быть определена на не простых доменах и т.д. Например, одним из доменов, на котором определяется отношение типа сущности employee (служащий), мог бы быть домен salary history (история зарплаты). Элементом домена salary history является бинарное отношение, определенное на доменах date (дата) и salary (зарплата). Домен salary history представляет собой множество всех таких бинарных отношений.