С.Д. Кузнецов - Основы баз данных (1121716), страница 95
Текст из файла (страница 95)
Позже выяснилось, что маркетинговые ожидания компаний- гигантов оказались преувеличенными. (В частности, это было одной из основных причин падения компании 1пГопп!х.) Сегодня объектные расширения БОБ-ориентированных СУБД предлагаются пользователям лишь в качестве дополнительных, хотя и важных возможностей. Объектные расширения языка БОБ были зафиксированы в стандарте БОГ.;!999. В той или иной мере эти расширения поддерживаются во всех трех перечисленных выше продуктах. В настоящее время ближе всех к стандарту находятся СУБД компании Огас!е и ЮВ2 компании 1ВМ. Объектная модвль 3(Н. Объектные расширения Я >1.:1999 базируются на некоторой объектной модели, хотя эта модель в явном виде в стандарте не специфицируется.
Объектная модель Я)(.ее не является тождественной объектным моделям какого-либо объектно-ориентированного языка программирования или какой-либо объектно-ориентрованной системы баз данных. Однако при определении объектной модели Я.)Б участники процесса ' Компания гйвагга была создана Стоунбрейкером двя коммерциализации разработанной поц его руководством свободно доступной СУБД Ровсйгеа. " Конечно, зто не модель данных в смысле Кодла. 453 Курс Основы баз данных стандартизации тщательно проанализировали ряд других языков и систем с целью выяснения достоинств и недостатков их объектных моделей. По мнению авторов стандарта БО):1999, выработанная ими объектная модель похожа на объектную модель языка )ауа, но при этом адаптирована к природе языка Я.)Б как языка СУБД с наличием стабильно хранимых метаданных и данных*.
Объектная модель Б( Н.:1999 включает два основных отличительных компонента — структурные, определяемые пользователями типы данных (Пег 7)рте(7 Туре — И)7) и типизированные таблицы ГТуред ТаЫе). Первый компонент позволяет определять новые типы данных, которые могут быть гораздо более сложными, чем встроенные типы данных языка Я11.. При определении структурного (Л)Т требуется специфицировать не только содержащиеся в нем элементы данных, но и семантику типа данных, т. е. его поведение на основе интерфейса вызовов методов.
Второй компонент— типизированные таблицы — позволяет определять таблицы, строки которых являются экземплярами (или значениями) 1Л)Т, с которым явно ассоциируется таблица. Во многих отношениях строка типизированной таблицы похожа на объект класса в объектно-ориентированной системе.
В стандарте БО1 с1999 определены два пакета объектных свойств— минимальный (РКО006) и полный (РКО007), которым должны удовлетворять БО(;ориентированные ОРСУБД, претендующие на соответствие стандарту. Ниже будут перечислены свойства, включенные в каждый из пакетов, но смысл этих свойств будет понятен только после прочтения остальных разделов. Пакет РКО006 включает всего пять свойств: ° свойство э023 (»Валге лггис(игед (урез») — возможность определять |/ОТ и их методы с ограниченными возможностями; ° свойство 304! (»Валге ге)егепсе (урез») — возможность определять и использовать ссылки на экземпляры О()Т, входящие в типизированные таблицы; ° свойство 5051 («Сгеа(е гаЫе о) (уре») — возможность создания типизированных таблиц; ° свойство 5151 (»Туре ргеггуса(е») — возможность определения точного типа (в иерархии типов) экземпляра 1Л)Т; ° свойство Т041 ( Вал(с П)В да(а (уре лиррог( ) — возможность определения (.ОВ-типов в смысле Я)Е (с необязательной поддержкой операций, кроме операций сохранения и полной выборки).
Пакет РКО007 содержит девять дополнительных свойств: 'Далеко не факт, что ориентация на язык )ага была правильным решением. По мнению автора данного курса. причиной являются отнюдь не уникальные достоинства языка )ага (обсу:кдение этого языка не является задачей автора), а то, что во время разработки стандарта ЗО(л (999 язык Зала был особенно моден.
Помимо прочего, заметим, что для языка )ага (насколько известно автору) никогла не определялась формальная объектная молель. Лекция 19 Язык баз данных вйм объектные расширения ° свойство 5024 («Еппапсег) зггис~игег( !урез») добавляет к свойству 5023 рял развитых возможностей, в число которых входят возможности кодирования методов на языках, отличных от БО(, сравнения экземпляров 00Т и передача экземпляров $Н)Т в качестве параметров различных процедур; ° свойство $043 («Епйапсей ге~егепсе гурел») расширяет свойство Б041 возможностями определения ссылок с областью действия, автоматической проверки законности ссылок и т.
д.; ° свойство $071 («5Я:рагйз туипсйоп атз' Гуре пате гезо!ит(оп») позвОляет использовать путевые выражения Я Н. (ЯДА-ратй) в алгоритме разрешения типа; ° свойство БОЗ! («оибгаЫез») расширяет возможности свойства 5051, допуская организацию иерархии таблиц, аналогичной иерархии типов соответствующих 00Т; ° свойство з1 1 1 («Ой!7.У т диегу ехргеззюпз») обеспечивает возможность выборки только экземпляров указанного типа, без экземпляров любого нз его подтипов; ° свойство 5161 («Юибгуре ггеагтепг ) позволяет информировать среду БО(. о том, что некоторый экземпляр 00Т в действительности является экземпляром указанного подтипа; ° свойство 521! («(Ьег-йе!)пег) сазг )ипсч(оаз») разрешает определять подпрограммы, преобразующие экземпляры 00Т к другим типам; ° свойство 5231 ( ЮггисгигЫ гуре !осагогз») способствует доступу к экземплярам 00Т из прикладных программ; ° свойство 5023 («Тгап~огт7ипслопз») позволяет определять подпрограммы, преобразующие значения ()0Т в значения предопределенных типов данных, и наоборот.
Цели лекции Следует заметить, что в этой, безусловно, перегруженной материалом лекции мы преследуем две основные цели. Первая цель состоит в том, чтобы показать читателям, что в средствах определения структурных типов ЯИ. используются, по сути, все базовые возможности определения объектов базы данных и выборки данных, которые обсуждались в предыдущих лекциях.
Более того, определенные пользователями типы в Я )1 являются объектами первого класса; 00Т можно использовать в любой конструкции языка, в которой допускается применение предопределенного или конструируемого типа данных. Очень важно отдавать себе отчет в том, что наличие возможности определять пользовательские типы не делает язык БО) менее реляционным или более объектным. Эта возможность «всего лишь» фантастически повышает выразительную мощность языка.
Основы баз данных Курс Второй целью является демонстрация того, как на основе базовых механизмов языка удалось ввести дополнительные конструкции, которые действительно вплотную приближают ВО к объектному миру. Здесь, конечно, основную роль играет связка \) РТ и механизма типизированных таблиц, которые играют в Я;Н. своеобразную совмещенную роль классов и коллекций обьектов. Может оказаться, что материал этой лекции покажется сложным, поскольку для его усвоения не помешало бы иметь предварительную подготовку в области полнотиповых языков программирования, объектно-ориентированных языков и систем баз данных и т.
д. Хочется надеяться, что возникновение трудностей при изучении лекции не отпугнет читателей от этой темы, а напротив, послужит стимулом к изучению дополнительной литературы. Возможна и другая опасная ситуация. Краткость и некоторая формальность изложения может создать ложное впечатление тривиальности объектных расширений БО1.. В этом случае могу посоветовать перечитать предыдущие лекции курса, относящиеся к Я)1., считая, что везде, где используются предопределенные или конструируемые типы, применяются некоторые ШЭТ, а в тех случаях, где имеются таблицы, связываемые естественным соединением, используются типизированные таблицы. Думаю, это позволит оценить мощь новых возможностей ВО Введя этот необходимый контекст, перейдем к описанию соответствующих механизмов ВО1.:1999. Определяемые пользователями типы Один из основных упреков по адресу языка БО1., звучавший, в частности, в Первом манифесте, заключался в отсутствии каких бы то ни было возможностей хранить в базе данных данные, тип которых являлся бы не предопределенным, а определяемым пользователями.
Отрицательные последствия отсутствия такой возможности признавались и во Втором манифесте. В БО1.;1999 этот дефект был устранен. Как отмечалось в лекции 11, в стандарте поддерживается возможность определения пользователями двух разновидностей 1)РТ вЂ” структурных типов 1лугисуигед гуре) и индивидуальных типов 1дйг!пег гурев). Индивидуальные типы Напомним, что индивидуальным типом называется 1)РТ, основанный на единственном встроенном типе (например, тнткакп). Значения такого типа нельзя прямо использовать в операциях соответствующего базового типа, однако допускается явное приведение значений индивидуального типа к базовому типу Поясним это на примерах.
Пусть заданы следующие определения индивидуальных типов: 45б Язык баз данных ЯОЫ обьектные расширения Лекция 19 СВЕАТЕ ТУРЕ ЕМР ИО АБ 1ИТЕСЕВ Р1ИАЬ; СВЕАТЕ ТУРЕ РЕРТ ИО АБ 1НТЕСЕВ РХМАЬ; СЕНАТЕ ТУРЕ РВО ИО АЯ 1ИТЕСЕВ Р1ИАЬ; Таблицу ЕМР можно определить следующим образом (упрощенный вариант): СВЕАТЕ ТАВЬЕ ЕМР ( ЕМР 1Р ЕМР ИО, ЕМР МАМЕ УАВСНАВ(20), РЕРТ 1Р РЕРТ ИО, РВО 1Р РВО ИО)) Такое определение таблицы приведет к тому, что хотя все три индивидуальных типа определены на одном и том же базовом типе 1МТЕСЕВ, попытка выполнить запрос БЕЗВЕСТ ЕМР МАМЕ РВОМ ЕМР ГНЕВЕ ЕМР 1Р > РЕРТ 1Р," будет отвергнута системой (и это правильно, поскольку, скорее всего,запрос задан по ошибке). Но если действительно требуется сравнивать идентификаторы служащих с идентификаторами их отделов, то можно воспользоваться конструкцией явного приведения типа: ЯЕРЕСТ ЕМР МАМЕ РВОМ ЕМР ХНЕВЕ ГАБТ (ЕМР 1Р ТО 1ИТЕСЕВ) > ГАБТ ГРЕРТ 1Р ТО 1НТЕСЕВ); Аналогичным образом будет отвергнут запрос ЯЕЬЕСТ ЕМР МАМЕ, ЕМР 1Р + 5 БРОМ ЕМР ИНЕВЕ РЕРТ 1Р > 630) Чтобы указать системе, что действительно требуется выполнить операции целочисленного сложения и сравнения над значениями индивидуальных типов, запрос нужно переписать следующим образом: БЕЗВЕСТ ЕМР МАМЕ, ГАЯТ (ЕМР 1Р ТО 1ИТЕСЕВ) + 5 РВОМ ЕМР 457 Курс Основы баз данных угнеее сАят 1Рерт 1Р тО 1итецее1 > 630; У читателей могут возникнуть два законных вопроса: ° почему, вопреки обыкновению, мы не привели формальные синтаксические правила операции определения инливилуального типа? ° что означает ключевое слово РТНАЬ в приведенных примерах определения индивидуальных типов? На оба эти вопроса достаточно дать один (возможно, неожиданный) ответ.