Объектно-реляционное отображение 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Объектно-реляционное отображение



При проектировании информационных систем с использованием ОРСУБД возникает задача реализации объектно-ориентированного отображения. Существует два способа решения этой проблемы, часто называемых " сверху вниз " и " снизу вверх ".

Основная идея метода "сверху вниз" состоит в том, чтобы на­чать с объектной модели, после чего от нее производится реляционная схема хране­ния данных, то есть, ставится задача сохранения объектов в реляционных таблицах.

Метод "сверху вниз" позволяет сосредоточиться на логике приложения, напри­мер, для описания общей объектной модели. При этом особое внима­ние уделяется тому, что производная реляционная схема хранения данных про­ектируется так, чтобы обеспечить производительность и целостность данных. Воз­можность использовать простое отображение "один-к-одному" между классами и таб­лицами существует далеко не всегда. Очень часто схему объектных данных нужно адаптировать под специфику реляционного мира. Например, никогда нельзя забывать о нормализа­ции. Однако слишком высокая нормализация приводит к низкой производительности, сильно фрагментированным схемам данных и чрезмерной слож­ности. По этой причине излишне высокой нормализации (выше 3НФ) все разработчики стараются избегать.

Метод "снизу вверх" начинает с реляционной схемы хранения данных, от которой производит объектную модель, что позволяет в дальнейшем осуществлять доступ к реляционным таблицам с помощью объектов. Этот метод используется достаточно часто в тех случаях, когда реляционная схема данных уже существует, а вносить изменения в нее крайне нежела­тельно. В подобных случаях проводится анализ реляционной схемы, после чего пред­принимается попытка произвести от этой схемы объектную модель, которая бы отра­жала, с одной стороны, логику приложения, а с другой — собственно реляционную схему. Достижение подобных результатов может оказаться достаточно сложной зада­чей в случае нормализованной реляционной схемы. В подобных ситуациях возникает необходимость отобразить несколько таблиц на один класс, благодаря чему один эк­земпляр объекта представляет несколько строк с данными. Очень часто этот метод на­зывается упаковкой, поскольку один класс содержит несколько таблиц.

Отображение классов на таблицы. Рассмотрим способы отображения классов на таблицы подробнее.

Основная идея объектно-ориентированного отображения достаточно проста:

· классы отображаются на таблицы,

· создаваемые объекты данного класса представляются в виде строк, а атрибуты объектов — в виде столбцов реляционной таблицы.

Основная схема объектно-ориентированного отображения приведена на рис.39.

Наследование

Реляционная модель не предполагает наследования. Таким образом, отображе­ние иерархии наследования объектной модели на реляционную схему является доста­точно непростым заданием. Существует несколько способов отображения наследова­ния на уровне объектной модели на реляционную модель, рассмотренных ниже, каждый из которых облада­ет определенными преимуществами и недостатками.

 

 

Рис.39. Основная схема объектно-ориентированного отображения

 

Пример. Пусть имеется следующая иерархия классов, представленная на рис.40.

 
 

 

 


Рис.40. Пример иерархии наследования

Горизонтальное разделение

Горизонтальное разделе­ние поддерживает множественное наследование. Именам столбцов могут предшество­вать имена классов, для которых первоначально были определены атрибуты. Горизон­тальное разделение обеспечивает отображение, поддерживающее простую идею отобрази-каждый-класс-на-таблицу, а также обеспечивает приемлемую производительность операций манипулирования строго типизированными данными. Пример, приведенный на рис.41., иллюстрирует, как выглядит горизонтальное разделение для базового класса Акция с двумя потомками Вариант и Предпочтительная акция. Запрос на получение све­дений обо всех объектах предпочтительных акций требует одного простого запроса, ко­торый вернет целую коллекцию данных, в частности SQL-вызов

SELECT * FROM Предпочтительная акция

Однако горизонтальное разделение обладает и це­лым рядом недостатков. При внесении изменений в один из абстрактных базовых или конкретных классов, находящихся в основании графа наследования, например, добавле­ния нового атрибута, претерпят изменения все конкретные классы или таблицы, насле­дующие от этого класса, С этой точки зрениякаждый запрос требует осуществления за­просов к нескольким таблицам, результаты которыхагрегируются. Например, для того чтобы извлечь все объекты Акция, нам необходимо провести три отдельных SQL-запроса SELECT; первый для извлечения всех экземпляров Акция, второй для извлечения всех экземпляров Вариант и третий — для извлечения всехэкземпляров Предпочтительная акция. Все полученные результаты затем объединяются для получения унифицирован­ной коллекции, содержащей сведения обо всех акциях. Конечно, повысить эффективность подобных запросов можно, используя оптимизацию, основанную на специфике реляционных способов отображения, которые бы расширяли возможности схемы горизонтального раз­деления,.

Вертикальное разделение

Каждый производный класс отображается на новую таблицу, содержащую атрибуты, которые определены только для этого класса. Помимо этого, каждая таблица содержит внешний ключ, указывающий на таблицу базового класса. Множе­ственное наследование поддерживается путем включения нескольких внешних клю­чей в таблицу производного класса. Расширения и изменения очень легко добавить по мере необходимости в одну и ту же таблицу. Однако любой запрос на извлечение экземпляров производного класса или таблицы требует как минимум одного соедине­ния, а в случаях глубокой иерархии наследования — даже нескольких соединений. Все это сказывается на производительности всех операций, манипулирующих данными (вставка, запрос, обновление и удаление). Пример метода вертикального разделения приведен на рис.42.

Унификация

Все абстрактные и конкретные классы в рамках одной ветви иерархии отобража­ются на одну таблицу. Для идентификации типа каждой строки используется дополни­тельный столбец, называемый дискриминатором типа. Во многих случаях в этих целях может использоваться имя реального класса. Такой способ отображения не совсем соот­ветствует правилам нормализации. Следовательно, таблицы могут быть очень слабо заполненными, особенно» том случае, если один дочерний класс характеризуется большим количеством атрибутов. Такой вариант отображения оказывается наиболее выгодным при использовании абстрактных роди­тельских классов; это означает, что не существует реальных экземпляров абстрактных классов, несмотря на то, что все определенные для них атрибуты содержатся во всехна следующих классах. Пример метода унификации приведен на рис.43.

 
 

 

 


Рис.41. Горизонтальное разделение

 
 

 

 

 

 


Рис. 42. Вертикальное разделение



Поделиться:


Последнее изменение этой страницы: 2016-07-16; просмотров: 829; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.144.233.150 (0.007 с.)