Объектно-реляционные базы данных: прошедший этап или недооцененные возможности? Сергей Кузнецов Институт системного программирования РАН [email protected] План выступления 10 лет ОРСУБД Informix Universal Server, Oracle8, DB2 Universal Database Коротко о предпосылках ОРСУБД Объектно-реляционные базы данных и язык SQL SQL как модель данных Гармонична ли «объектная» часть модели? Кто и как использует ОРСУБД? Проблемы использования ОРСУБД Каковы перспективы? Корпоративные базы данных 24 апреля 2007 г. 2 10 лет ОРСУБД Почему десять? Что произошло в декабре 2006 г.? Informix, Illustra и Майкл Стоубрейкер Значит ли это, что Стоунбрейкер является отцом объектно-реляционного подхода? А что такое «объектно-реляционные» базы данных? Личная точка зрения: Манифест систем баз данных следующего поколения, SQL, реализации IBM и Oracle Корпоративные базы данных 24 апреля 2007 г. 3 Informix Universal Server Декабрь 1996 г. – январь 1997 г. Интеллектуальные большие объекты (smart large objects) Индивидуальные типы данных (Distinct Types) Типы данных со скрытой структурой (Opaque Types) Корпоративные базы данных 24 апреля 2007 г. 4 Informix Universal Server Составные типы данных Могут иметь структуру записи, множества, мультимножества или списка Значениями столбцов таблиц могут быть записи, множества или списки, состоящие в свою очередь из атомарных или структурных значений Корпоративные базы данных 24 апреля 2007 г. 5 Informix Universal Server Тип данных со структурой записи CREATE ROW TYPE <имя типа> ( <имя поля> <тип поля>, . . . ) Три вида типов коллекций: множеств, мультимножеств и списков CREATE TYPE <имя типа> SET <тип элементов> NOT NULL CREATE TYPE <имя типа> MULTISET <тип элементов> NOT NULL CREATE TYPE <имя типа> LIST <тип элементов> NOT NULL Корпоративные базы данных 24 апреля 2007 г. 6 Informix Universal Server Механизм наследования может применяться к типам записей и таблицам Одиночное наследование Все функции, определенные для супертипа, автоматически распространяются на все его подтипы Для подтипов могут определяться свои функции Значения подтипов могут использоваться почти везде, где разрешено употребление значений их супертипов Единственное ограничение возникает при отведении памяти и хранении значений Здесь соответствие типов должно быть точным Корпоративные базы данных 24 апреля 2007 г. 7 Informix Universal Server Tипизированные таблицы (типами записи) CREATE TABLE … OF TYPE … При определении подтаблиц некоторые свойства супертаблиц могут переопределяться (например, опции хранения) Операции SELECT, UPDATE и DELETE, примененные к супертаблице, распространяются также и на все ее подтаблицы Конструкция ONLY Корпоративные базы данных 24 апреля 2007 г. 8 Informix Universal Server Новые базовые типы данных можно определять одновременно с введением специальных алгоритмов хранения, доступа и индексирования, которые отличаются от стандартных алгоритмов, реализованных в сервере Для введения нового базового типа данных с нестандартными методами доступа нужно определить набор серверных функций, реализующий для нового типа алгоритмы доступа, просмотра, выделения памяти и т.д. Эти функции должны быть написаны на языке C и скомпилированы в объектный формат Далее надо описать новый базовый тип данных, и указать функции, реализующие для этого типа алгоритмы извлечения и записи на диск значений данного типа Модули DataBlade Корпоративные базы данных 24 апреля 2007 г. 9 Oracle8 Июнь 1997 г. Основные доработки: Oracle 9i (2002 г.); наследование и другие возможности, соответствующие SQL:1999 Объектные типы – аналог типа записи в IUS CREATE TYPE <имя типа> AS OBJECT ( <имя поля> <тип поля>, . . . ) Для доступа к отдельным полям значений объектного типа используется точечная нотация Корпоративные базы данных 24 апреля 2007 г. 10 Oracle8 Методы объектных типов Функции или процедуры, написанные на PL/SQL, Java, C или другом языке и сохраненные в БД или вне ее Методы-члены Статические методы Методы сравнения Сравнение объектов может производиться с помощью методов вида MAP или вида ORDER Корпоративные базы данных 24 апреля 2007 г. 11 Oracle8 Метод типа MAP принимает в качестве параметра объект некоторого объектного типа, а возвращает значение одного из встроенных типов, которое может использоваться в операциях сравнения и сортировки Метод типа ORDER сравнивает два объекта и возвращает –1, если первый объект меньше второго, 0, если объекты равны, и 1, если первый объект больше второго Если при определении объектного типа метод сравнения не задан, то объекты этого типа можно сравнивать только на равенство/неравенство, причем объекты не должны содержать элементов типа LOB Корпоративные базы данных 24 апреля 2007 г. 12 Oracle8 Объектная таблица – таблица, строки которой имеют объектный тип В Oracle8 не поддерживалось наследование, но в Oracle8i появилась возможность наследования таблиц, но без поддержки параллельной иерархии наследования объектных типов Объектные представления Корпоративные базы данных 24 апреля 2007 г. 13 Oracle8 Строки объектных таблиц называются строчными объектами (row objects) Для всех строчных объектов обеспечивается возможность уникальной идентификации Столбец любой таблицы может быть определен на встроенном типе REF Значения этого столбца являются своего рода указателями на строчные объекты той же самой или другой объектной таблицы Система не берет на себя ответственность за согласование ссылок; за это отвечают пользователи Поддерживается встроенная функция REF, позволяющая получить значение объектного идентификатора указанной строки Наличие в объектной таблице столбцов ссылочного типа позволяет в ряде случаев упрощать формулировку запросов (с духе путевых выражений ODMG) Корпоративные базы данных 24 апреля 2007 г. 14 Oracle8 Типы коллекций: табличные типы (table types) и типы массивов CREATE TYPE <имя типа> AS TABLE OF <тип элемента> Точечная нотация для доступа к вложенным таблицам CREATE TYPE <имя типа> AS VARRAY ( <литеральное натуральное число> ) OF <тип элемента> На уровне прямого SQL можно работать только с массивами целиком Возможность привести в запросе (или другом операторе SQL) тип массива к табличному типу Корпоративные базы данных 24 апреля 2007 г. 15 DB2 Universal Database Конец 1997 г. Базовые идеи объектно-реляционных расширений были заложены в продукте DB2 for Common Servers, выпущенном в 1995 г. (статья Дона Чемберлина) BLOBы, триггеры, UDF, distinct types, экстендеры Постепенное наращивание возможностей в следующих выпусках Корпоративные базы данных 24 апреля 2007 г. 16 DB2 Universal Database Механизм структурных типов с самого начала включал не только возможность определения типов со структурой, но и средства определения иерархий типов и иерархий таблиц Допускалось использование “ссылок” для определения связей между объектами и навигации от одного объекта к другому Методы очень похожи на UDF в том отношении, что они могут быть написаны на SQL или на внешнем языке, например, на Java или C Но методы всегда ассоциируются с некоторым структурным типом, и их вызовы производятся в синтаксисе, отличном от синтаксиса вызова UDF Корпоративные базы данных 24 апреля 2007 г. 17 DB2 Universal Database При определении типизированной таблицы нужно явно специфицировать дополнительный столбец, в котором будут храниться значения объектных идентификаторов (OID) каждого объекта (строки), содержащейся в таблице Столбец OID создается как первый столбец таблицы, и за ним следуют столбцы, соответствующие атрибутам типа таблицы Объектные идентификаторы используются в операциях разыменования (dereference), т.е. обеспечивают возможность добраться до строки по ссылке и преобразовать ее в экземпляр (значение) структурного типа Все строки подтаблиц доступны через запрос, адресуемый к их супертаблице Возможности OUTER и ONLY D запросах на DB2 SQL можно использовать путевые выражения, но не в “точечной”, а в “стрелочной” нотации Корпоративные базы данных 24 апреля 2007 г. 18 DB2 Universal Database Объектные представления – это виртуальные таблицы, которые могут обладать структурой и поведением, отличным от структуры и поведения базовых таблиц, лежащих в основе этих представлений Как и в случае типизированных таблиц, определение объектного представления основывается на определении структурного типа Объектные представления можно использовать для ограничения доступа к подмножеству строк иерархии таблиц или для сокрытия некоторых столбцов этой иерархии Долгое время не поддерживались типы коллекций, но теперь DB2 UDB более всех соответствует стандарту SQL Корпоративные базы данных 24 апреля 2007 г. 19 Коротко о предпосылках ОРСУБД Манифест баз данных третьего поколения (1990 г.) В конце 80-х Вон Ким основал компанию UniSQL, выпустившую в 1991 г. первую версию продукта UniSQL, который Вон Ким стал называть объектнореляционной системой Четыре принципа: Значениями атрибутов отношений могут быть не только литеральные значения, но и объекты; Значения атрибутов отношений не обязательно являются атомарными; При построении таблиц (классов) может использоваться механизм наследования; Классы включают операции Корпоративные базы данных 24 апреля 2007 г. 20 Коротко о предпосылках ОРСУБД Майкл Стоунбрейкер Ingres и Postgres В Postgres допускалось хранение в полях отношений данных абстрактных, определяемых пользователями типов В 90-е гг. Стоунбрейкер создал компанию Illustra, основной целью которой был выпуск коммерческого варианта СУБД Postgres, получившего название Illustra В этой системе поддерживались основные идеи Postgres, но уже присутствовала и поддержка языка SQL Корпоративные базы данных 24 апреля 2007 г. 21 Объектно-реляционные базы данных и язык SQL SQL3, SQL:1999, SQL:2003 При определении объектной модели SQL участники процесса стандартизации тщательно проанализировали ряд других языков и систем с целью выяснения достоинств и недостатков их объектных моделей Выработанная объектная модель похожа на объектную модель языка Java, но при этом адаптирована к природе языка SQL как языка СУБД с наличием стабильно хранимых метаданных и данных Корпоративные базы данных 24 апреля 2007 г. 22 Объектно-реляционные базы данных и язык SQL Два основных отличительных компонента – структурные, определяемые пользователями типы данных (User Defined Type – UDT) и типизированные таблицы (Typed Table) Первый компонент позволяет определять новые типы данных, которые могут быть гораздо более сложными, чем встроенные типы данных языка SQL Второй компонент – типизированные таблицы – позволяет определять таблицы, строки которых являются экземплярами (или значениями) UDT, с которым явно ассоциируется таблица Корпоративные базы данных 24 апреля 2007 г. 23 SQL как модель данных SQL – большой и «многослойный» язык Однако, если сопоставлять возможности SQL с возможностями реляционной модели данных, можно установить, что в настоящее время в спецификации SQL представлена законченная модель данных, отличающаяся от реляционной поддержкой мультимножеств и неопределенных значений Развитые возможности структуризации (включая полную систему типов), манипулирования данными и поддержки ограничений Корпоративные базы данных 24 апреля 2007 г. 24 Гармонична ли «объектная» часть модели данных SQL? Далее исключительно личная точка зрения Та часть расширений, которая относится к системе типов (типы коллекций, UDT, наследование и т.д., кроме ссылочных типов), вполне гармонична и не выходит за пределы даже реляционной модели Ссылочные типы, типизированные таблицы и представления, поддержка путевых выражений вызывают подозрения Корпоративные базы данных 24 апреля 2007 г. 25 Гармонична ли «объектная» часть модели данных SQL? Типизированные таблицы и представления позволяют писать запросы в стиле OQL Но может ли грамотный пользователь забыть про скрытые внешние ключи и соединения? Действительно ли различия между прямой и ассоциативной адресацией не являются существенными? Вопрос, заслуживающий исследования Что скажет новый стандарт объектной модели данных? http://www.omg.org/cgi-bin/doc?mars/2006-2-18 Request for Information (RFI) Корпоративные базы данных 24 апреля 2007 г. 26 Кто и как использует ОРСУБД? Используют мало возможностей Борис Новиков: хранимые процедуры, функции, пакеты Нет известных примеров приложений со своими типами данных Совсем неизвестны приложения с типизированными таблицами Положительный пример Oracle Express Но все делают сами производители Почему? Корпоративные базы данных 24 апреля 2007 г. 27 Проблемы использования ОРСУБД Мне кажется, что дело не в «объектности» Слишком много возможностей Как распределять функциональную нагрузку между сервером баз данных, сервером приложений и приложением? Что теперь означает «независимость базы данных от приложения»? Корпоративные базы данных 24 апреля 2007 г. 28 Проблемы использования ОРСУБД Даже если от этого отвлечься Когда и как использовать типы коллекций? Нет методологии Нужно ли проектировщику знать об особенностях реализации, например, вложенных таблиц? Аскетичность Кодда понятнее сегодняшнего богатства Аналогичные проблемы в базах XML-данных Корпоративные базы данных 24 апреля 2007 г. 29 Каковы перспективы? Сделано очень много Пропасть не должно Надеюсь, что с помощью исследовательского сообщества удастся решить проблемы и привлечь разработчиков к использованию ОРСУБД Корпоративные базы данных 24 апреля 2007 г. 30