- •Е.И. Асташева сетевые базы данных
- •Введение
- •1. Введение в базы данных
- •1.1. Что такое база данных
- •1.2. Структура базы данных
- •2. Иерархическая и сетевая модели организации данных
- •3. Реляционная модель базы данных
- •3.1. Домены и отношения
- •3.2. Целостность данных
- •3.3. Реляционная алгебра
- •3.4. Реляционное исчисление
- •4. Проектирование логической структуры базы данных
- •4.1. Концепция функциональной зависимости
- •4.2. Нормализация базы данных
- •4.3. Объектное моделирование
- •5. Функции защиты базы данных
- •5.1. Транзакции и параллелизм
- •5.2. Безопасность и целостность баз данных
- •6. Дополнительные аспекты реляционной технологии
- •6.1. Представления
- •6.2. Повышение производительности с помощью оптимизации
- •6.3. Домены, отношения и типы данных
- •6.4. Неопределенные значения и трехзначная логика
- •6.5. Распределенные базы данных
- •7. Технология физического хранения и доступа к данным
- •7.1. Основные этапы доступа к базе данных
- •7.2. Управление страницами
- •7.3. Процедура индексирования и хеширования
- •7.4. Сжатие данных
- •Заключение
- •Библиографический список
- •Оглавление
- •394026 Воронеж, Московский просп., 14
6.3. Домены, отношения и типы данных
Выше уже шел разговор о том, что домены и отношения не просто набор неких данных, а структуры, имеющие строго определенный характер (тип) данных. Это выражается, например, в том, что для выполнения таких операций над отношениями, как сравнение или объединение, данные должны быть не только принадлежащими одному домену, но и совместимы по типу.
Для пояснения рассмотрим следующий пример, основанный на отношениях, приведенных на рис.6.1: пользователь может осуществить запрос, основанный на операции сравнения SPO.SN = SPP.SN, так как атрибут SN в отношениях принадлежит одному домену и имеет один тип. Однако запрос, предполагающий сравнение SPO.OCENKA = SPP.PN, не является корректным - атрибуты принадлежат разным доменам и СУБД не должна его выполнять.
Иногда проверку соответствия доменов необходимо отключать - это может быть связано с особенностями предметной области, о которых в БД информация отсутствует. Примером такого вполне корректного запроса (с предметной точки зрения) может служить выборка данных о студентах по номеру студенческого билета в отношении, в котором хранятся данные о заработной плате сотрудников: в принципе, студент может учиться и работать в ВУЗе. Однако в СУБД, для выполнения такого запроса, система проверки доменов должна быть неактивна - ведь табельный номер сотрудника и номер студенческого билета принадлежат разным доменам.
Более того, интересны моменты, связанные с проверкой принадлежности тому или иному домену, возникающие и в более простых случаях, например, при выборке данных по условию SPO.OCENKA = 5. Атрибут SPO.OCENKA принадлежит домену оценок, а 5 - это целое число, т.е. значения принадлежат разным доменам. По этой причине в СУБД в неявном виде происходит преобразование данных одного типа к одному домену, а значит, в нашем примере целое число преобразуется к домену оценок и только после этого происходят дальнейшие действия. Для этих целей в СУБД используются специальные функции приведения типов и при работе с аналогичными выражениями они неявно используются системой для отмены проверки доменов.
Таким образом, для упрощения работы СУБД на данные накладывают ограничение не на принадлежность тому или иному домену, а на принадлежность соответствующему типу данных. При этом система либо проверяет соответствие типов, либо ищет такую функцию преобразования, чтобы данные стали принадлежащими одному типу.
При этом возникает еще одна сторона проблемы использования типов данных и поддержки в полном смысле понятия домена: при манипуляциях с доменами ряд операций имеют смысл в предметной области, а некоторые операции бессмысленны. Например, выборки данных по условиям SPP.PN = "Физика" и SPP.PN > "Физика" с учетом вышесказанного корректны, но второй случай смысла в предметной области не имеет.
Поэтому СУБД должно быть известно, какие выражения и операции являются корректными, а какие - нет, а множество всех доменов должно быть замкнутым, чтобы система знала к какому домену отнести те или иные данные. Из этого следует, что рассмотренное выше требование скалярности данных в домене заключается в том, что они могут иметь достаточно сложную структуру, однако система не должна последнюю видеть.
С аналогичной точки зрения рассмотрим теперь отношения. Заметим, что в реляционной модели отношения являются как бы конструкторами типов данных: ведь при создании отношения в первую очередь создается составной тип данных, являющийся множеством кортежей, определяемый заголовком. Поэтому, например, для сравнения или присвоения необходимо, чтобы отношения имели одинаковые наборы имен атрибутов и, кроме того, атрибуты с идентичными названиями были совместимы друг с другом по типу.
Очевидно, что в результате выполнения манипуляций с отношениями возникает проблема типа отношения-результата, т. е. структуры его заголовка. Выше были рассмотрены вопросы, связанные с выполнением основных операций над отношениями, однако при изложении в учет не брался тот факт, что заголовок включает в себя помимо имени атрибута еще и имя домена. Из вышеизложенного следует, что для операции сравнения атрибуты должны быть совместимы по типу, а принадлежность одному домену не является обязательной, т. к. СУБД производит неявное преобразование типов доменов.
Следовательно, операция соединения отношений А{А.Х, A.Y} и B{B.Y, B.Z} является вполне корректной, несмотря на то, что атрибуты Y имеют одинаковое имя и тип в обоих отношениях, но определены на различных доменах. При этом возникает интересный момент - в полученном в результате выполнения операции отношении С{С.Х, C.Y, C.Z} неясно, на каком домене определен атрибут Y. Из совместимости по типу доменов отношений А и В, на которых определен атрибут Y, следует, что их можно преобразовать один к другому, а в СУБД предусматривают домены с большим приоритетом.
Атрибуты отношения, как уже упоминалось, состоят из кортежей - упорядоченных пар составного типа, включающих имя атрибута и его значение, а следовательно, имеющих свой заголовок. Отсюда вытекает, что вопросы совместимости по типу касаются и кортежей при выполнении таких операций, как сравнение, присваивание и т. д.
Здесь необходимо еще раз остановиться на вопросах, связанных с наследованием типов, которые уже были рассмотрены выше. Эти вопросы тесно связаны с понятиями подтипа и супертипа. Тип X является подтипом типа Y, если каждый экземпляр типа X обязательно принадлежит типу Y. Соответственно, тип Y будет являться супертипом для типа X. Например, тип СТУДЕНТ является подтипом типа УЧАЩИЙСЯ, а тип УЧАЩИЙСЯ является супертипом для типа СТУДЕНТ.
Эти понятия важны со следующей точки зрения: если СУБД знает, что экземпляр типа X является подтипом типа Y, то свойства Y присущи X. В таком случае говорят, что тип X наследует свойства типа Y, а пользователь имеет возможность применять данные типа X там, где можно применять данные типа Y - это называют принципом подстановки. Удобство наследования заключается и в том, что для типа можно многократно выполнять некое действие, которое применимо и для его подтипов без каких либо доработок.
Использование этих принципов для доменов связано с тем, что, несмотря на наследование свойств, внутренняя структура каждого типа, вообще говоря, может быть различна, но один тип можно привести к другому. Например, тип СТУДЕНТ можно привести к типу УЧАЩИЙСЯ, но при обратном преобразовании может возникнуть потеря информации - у типа СТУДЕНТ может существовать ряд специфических свойств (например, НАИМЕНОВАНИЕ_ВУЗА), которых в супертипе может и не быть.
Кроме того, рассматриваемые домены можно представить в виде простейшей иерархии типов, поскольку супертип есть обобщение своих подтипов. Любой экземпляр иерархии типов автоматически при создании наследует все свойства своего супертипа, но всегда есть возможность некоторые из них на заданном уровне иерархии переопределить или добавить новые, спепифические. Возможность применения некой одной функции к данным различного типа часто называют полиморфизмом. И, наконец, поскольку наследование применяется к свойствам типов, то в случае доменов в их качестве выступают операторы и функции - присвоение, сравнение и т. д. в отличие от отношений, где наследуемыми свойствами являются атрибуты.
Для пояснения концепции наследования типов применительно к отношениям рассмотрим пример, приведенный на рис.6.8.
Рис.6.8. Наследование типов в отношениях
В примере рассмотрено отношение SPP{SN, PN, NAME}, на основе которого создано отношение SPF{SN, PN, NAME, OCENKA}, содержащее информацию об успеваемости по физике. При этом SPF от своего родителя унаследовало атрибуты SN, PN, NAME, а атрибут OCENKA добавлен при создании. Таким образом, полученное отношение SPF можно рассматривать как подтип отношения SPP, обладающим собственным свойством (атрибутом) OCENKA, причем над SPF можно выполнять те же операции и функции, что и над его супертипом.