Базы данных и технологии баз данных, использующие объектную модель или ее элементы
Объектная модель Объектные или, как иногда говорят, объектно- ориентированные модели данных тесно связаны с понятием объектно-ориентированных языков и объектно-ориентированной парадигмой программирования. Мы будем считать объектной моделью такую модель, которая полностью поддерживает следующие понятия ОО парадигмы программирования: - систему поддержки типов; - классы и объекты; - уникальные идентификационные номера объектов; - наследование.
Система поддержки типов Нормальная объектная БД должна предоставлять пользователю некоторый набор атомарных типов, плюс набор средств, позволяющих создавать на их основе более сложные типы. Этот набор должен включать в себя, как минимум, следующие составляющие: - структуры записей, - коллекции, - ссылки.
Классы и объекты Полноценная объектная модель должна позволять поддерживать особенный выводимый тип, называемый классом, который может включать в себя не только другие типы данных, но и методы, выполняемые в контексте объектов данного класса. Методы отличаются от обычных функций (процедур) только тем, что всегда содержит один скрытый параметр – текущий объект класса. Под объектом класса подразумевается либо константное значение данного типа, либо переменная, содержащая значения данного типа.
Идентификационный номер объекта (OID) Чтобы можно было различить два объекта, принадлежащих одному и тому же классу (типу) данных, в объектной модели* принято сопоставлять каждому из них уникальный (среди всех объектов всех типов) идентификационный номер. * Часто так делают и в реляционных БД
Иерархия классов Как и в ОО языках программирования в объектной БД должно поддерживаться наследование классов. Если класс B наследует класс A, то он включает в себя все характеристики класса A, в том числе: тип, все методы и все атрибуты.
Объектная СУБД Объектной СУБД называется такая система управления базами данных, которая полностью поддерживает объектную модель, включая определение данных и основные манипуляции с ними (добавление, удаление, изменение и выборку).
Объектно-реляционные СУБД Большинство проектов посвященных чисто объектным БД в 90-х годах на текущий момент на грани краха. Это связано с тем, что производители реляционных систем вместо перехода к чисто объектным БД сделали ставку на пополнение существующих реляционных СУБД новыми возможностями, характерными для объектных БД. Такие СУБД получили название объектно-реляционных.
SQL-99 Стандарт SQL-99 определяет некоторые элементы характерные для объектно- реляционных СУБД. В том числе: определение типов и методов для них, ссылочные типы и другие составляющие. Некоторые широко известные СУБД содержат и более яркие элементы объектной модели. Например, в СУБД PostgreSQL встречается такое понятие как наследование.
Объектно-реляционные преобразователи Написание интерфейсов к информационным системам в последнее время чаще всего осуществляется на объектно- ориентированных языках программирования. При этом процесс преобразования данных из реляционной (или объектно- реляционной) СУБД в объекты удобные для использования в контексте данного языка программирования является задачей трудоемкой. При этом неопытный пользователь может на этой стадии допустить огромное количество различных ошибок. Все это определило появление нового класса программных компонент (библиотек) осуществляющих автоматическое преобразование из/в записей отношений реляционной СУБД в/из объекты объектно-ориентированного языка программирования. Такие механизмы принято называть объектно-реляционными преобразователями (object-relation mappers). Одним из наиболее ярких на сегодняшний момент ОРП является механиз ActiveRecord из системы RubyOnRails (ROR).
Язык ODL Язык ODL – это стандартизованный язык, служащий для описания структур баз данных в терминах объектно- ориентированного проектирования.
Объявление класса на языке ODL сlass Наименование { список свойств } Свойства класса могут включать в себя атрибуты, связи или методы.
Пример class Star { attribute string name; attribute Struct Addr {string street, string city} address; }; Здесь определяется класс Star с двумя атрибутами: простым строковым name и атрибутом, определенном в виде структуры из двух полей, address.
Типы в ODL Атомарные типы: integer (целое число), float (вещественное число), character (символ), string (строка символов), boolean (бинарное логическое значение) и перечисляемый тип (enumerations).
Составные типы ODL Пусть T и S – произвольные типы, а I – целое число. Set - множество значений типа T Bag - мультимножество* значений типа T List - список значений типа T Array - массив из i элементов типа T Dictionary - словарь сопоставлений значений типа T значениям типа S Struct M {T1 F1, T2 F2, …, Tn Fn } – структура с обозначением M, состоящая из n полей с именами Fj и типами Tj. * Мультимножество отличается от множества возможностью наличия повторяющихся значений
Связи в атрибутах Атрибуты связи записываются при помощи ключевого слова relationship. Различают прямые и обратные связи. Обратные связи задаются при помощи добавления конструкции inverse.
Пример class Movie { … relationship Set starsOf inverse Star::starredIn; } class Star { … relationship Set starredIn inverse Movie::starsOf; } В данном примере два отношения Movie (фильм) и Star (звезда) находятся в отношении многие-ко-многим.
Методы Свойства могут быть описаниями методов. class Movie { … float lengthInHours() raises(noLengthFound); } В данном примере класс Movie содержит определение одного метода lengthInHours, возвращающего объект дробного типа. В методе определена одна возможная исключительная ситуация – отсутствие указания длины фильма (noLengthFound).