- •20.7. Средства sql
- •20.8. Резюме
- •21.1. Введение
- •21.2. Некоторые аспекты технологам поддержки принятия решений
- •21.3. Проектирование базы данных поддержки принятия решений
- •21.5. Хранилища данных и магазины данных
- •21.6. Оперативная аналитическая обработка
- •21.7. Разработка данных
- •21.8. Резюме
- •22.1. Введение
- •22.2. Хронологические данные
- •22.3. Основная проблема хронологических баз данных
- •22.4. Интервалы
- •22.5. Интервальные типы
- •22.6. Скалярные операторы для интервалов
- •22.7. Операторы обобщения для интервалов
- •22.8. Реляционные операторы для обработки интервалов
- •22.9. Ограничения, включающие интервалы
- •22.10. Операторы обновления, включающие интервалы
- •22.11. Проектирование базы данных
- •22.12. Резюме
- •23.1. Введение
- •23.2. Обзор основных концепций
- •23.3. Исчисление высказываний
- •23.4. Исчисление предикатов
- •23.5. Базы данных с точки зрения доказательно-теоретического подхода
- •23.6. Дедуктивные субд
- •23.7. Обработка рекурсивных запросов
- •23.8. Резюме
- •Часть VI
- •24.1. Введение
- •24.2. Объекты, классы, методы и сообщения
- •24.3. Еще раз об объектах и объектных классах
- •Cdo для класса set (ref(emp))
- •24.4. Простой пример
- •1 | Course с001 , с001 0ffs , с001 ny offs |
- •24.5. Дополнительные аспекты
- •24.6. Резюме
- •25.1. Введение
- •X2 rational, y2 rational ) ... ;
- •25.2. Первая грубейшая ошибка
- •25.3. Вторая грубейшая ошибка
- •25.4. Вопросы реализации
- •25.5. Преимущества реального сближения двух технологий
- •25.6. Резюме
24.6. Резюме
В завершение этой главы перечислим представленные в ней важнейшие понятия и возможности объектной модели, давая им свою субъективную оценку: какие из них важны, какие "хороши", но не существенны, какие "скверны", а каким безразлично, какая из систем используется — объектная или реляционная. Эти выводы будут служить мостиком для продолжения обсуждения объектно-реляционных систем в главе 25.
Классы объектов. Классы объектов соответствуют типам данных и, безусловно, очень важны. По существу, это наиболее фундаментальная концепция из всех.
Объекты. Сами объекты, "изменяемые" и "неизменяемые", очевидно, составляют основу объектных систем, хотя мы предпочли бы их называть просто переменными и значениями соответственно.
Идентификаторы объектов. Не нужны и даже вредны (на уровне модели), поскольку по существу это указатели. См. [24.19], где этот вопрос рассматривается подробно.
Инкапсуляция. Как уже отмечалось в разделе 24.2, "инкапсулированный" означает просто скалярный, и мы бы предпочли именно такой термин, всегда помня при этом, что некоторые "объекты", тем не менее, не являются скалярами.
Переменные экземпляра. Во-первых, закрытые (и защищенные) переменные экземпляра по определению относятся к реализации, поэтому они не соответствуют определению абстрактной модели, которую мы здесь рассматриваем. Во-вторых, открытых переменных экземпляра не существует в чисто объектной системе, поэтому они также здесь неуместны. Таким образом, приходим к заключению, что переменные экземпляра можно игнорировать, а "объекты" должны обрабатываться исключительно "методами".
Иерархия вложения. Как уже отмечалось в разделе 24.3, мы считаем, что понятие иерархии вложения вводит в заблуждение и на самом деле является неверным, поскольку речь идет о содержании идентификаторов, а не "объектов".
Замечание. Иерархия (некапсулированная), которая действительно включала бы объекты как таковые, могла бы быть возможной, хотя и противопоказанной. Это могло бы быть аналогом чему-то, подобному переменной-отношению, имеющей атрибуты, значением которых служат отношения (см. часть II и III этой книги).
■ Методы. Это, конечно, важное понятие, хотя мы предпочли бы более привычный термин операторы. Но объединение методов с операторами не является обязательным и приводит к некоторым проблемам [3.3]. Раздельное определение "классов" (типов) и "методов" (операторов), как было показано в главе 5, позволяет обойтись без использования понятия объекта-получателя.
Существуют некоторые операторы, на включении которых мы бы настаивали: операторы выборки, которые, кроме всего прочего, предоставляют возможность записи литеральных значений соответствующего типа, операторы ТНЕ_, операторы присвоения и сравнения на эквивалентность, а также операторы проверки типа (см. главу 19).
Замечание. Однако мы бы отказались от функций-конструкторов. Конструкторы создают переменные. А поскольку для нас единственными необходимыми переменными в базе данных являются переменные-отношения, единственный "конструктор", который нам нужен, — это оператор создания переменной-отношения, т.е. CREATE TABLE или CREATE VIEW (по терминологии языка SQL). Операторы выборки, наоборот, выбирают значения. Конечно, дополнительное отличие в том, что конструкторы возвращают указатели на созданные переменные, в то время как операторы выборки возвращают сами выбранные значения.
Сообщения. Это также одно из основных понятий, хотя мы предпочли бы более привычный термин вызов. Опять же, можно обойтись без использования понятия объекта-получателя, если отказаться от требования непосредственного обращения к некоторому объекту-получателю, а считать все аргументы равноправными.
Иерархия классов. С иерархией классов связаны такие понятия, как наследование, полиморфизм, перегрузка, переопределение и т.д. Считаем, что понятие нужное, но производное. Мы рассматриваем поддержку иерархии классов как составляющую поддержки самих классов.
Классы, экземпляры, коллекции. Различия между этими понятиями, конечно, существенные, но они касаются не только объектного подхода (здесь мы ограничимся констатацией, что данные понятия различаются).
Связи. В главе 13 (раздел 13.6) уже оспаривалась идея трактовки "связей" как формально отдельной конструкции (особенно если это лишь бинарная связь, которая и заслужила такую специальную трактовку). Мы также не считаем удачной трактовку связанных ограничений ссылочной целостности, которая расходится с трактовкой ограничений целостности вообще (см. ниже).
Интегрированные языки программирования баз данных. Весьма полезны, но не относятся исключительно к объектной технологии. Тем не менее следует отметить, что языки, которые поддерживаются современными объектными системами, обычно являются процедурными (языки третьего поколения), поэтому, что можно доказать, они неудачны (фактически это огромный шаг назад).
Теперь перечислим возможности, которые в "объектных моделях" обычно не поддерживаются или поддерживаются не в полной мере,
Произвольные запросы. В ранних версиях объектных моделей поддержка произвольных запросов обычно не предусматривалась, поскольку в той среде, в которой возникли объектные системы, в них не было особой необходимости. В более поздних версиях появилась поддержка произвольных запросов, но для их выполнения обычно требуется либо отказываться от инкапсуляции, либо вводить ограничения на виды запросов, которые могут быть выполнены (думается, что в последнем случае такие запросы вряд ли заслуживают того, чтобы называться произвольными).
Представления. Обычно не поддерживаются (в основном по тем же причинам, что и обработка произвольных запросов).
Замечание. В некоторых объектных системах поддерживаются "производные" или "виртуальные" переменные экземпляра (обязательно открытые). Например, переменная экземпляра AGE (возраст) может наследоваться с помощью вычитания значения переменной экземпляра BIRTH-DATE (дата рождения) от текущей даты. Однако такая возможность еще очень далека от возможностей, которые предоставляются с помощью механизма представлений; и кроме того, мы уже отказались от понятия открытой переменной экземпляра.
Декларативные ограничения целостности. Обычно не поддерживаются (в основном, по тем же причинам, что и представления и обработка незапланированных запросов ). Более того, они обычно не поддерживаются даже теми системами, которые поддерживают незапланированные запросы.
Внешние ключи. В "объектной модели" предусмотрено несколько разных методов поддержки целостности на уровне ссылок, ни один из которых не похож на более универсальный метод внешних ключей, используемый в реляционной модели. Такие понятия, как ограниченное (ON DELETE RESTRICT) и каскадное (ON DELETE CASCADE) удаления, обычно реализуются с помощью процедурного кода (размещенного либо в методах, либо в коде приложений).
Замыкание. Сложно найти объектный аналог реляционному свойству замкнутости.
Каталог. Где же каталог в объектной системе? Как он выглядит? Есть ли какие-либо стандарты?
Замечание. Конечно, это вопросы риторические. Каков будет реальный результат, если такой каталог будет создан специалистом-профессионалом, которому будет поручено выполнить подгонку объектной СУБД, устанавливаемой для какого-либо приложения, как обсуждалось в разделе 24.5. (Такой каталог будет специфическим для данного приложения, как, впрочем, и вся настроенная СУБД.)
Подытожив сказанное выше, можно отметить полезные (существенные, фундаментальные) понятия и концепции "объектной модели" (такие, которые желательно поддерживать).
Понятие
Предпочтительный термин
Замечания
Класс объекта
Неизменяемый объект Изменяемый объект Метод
Сообщение
Тип
Значение
Переменная
Оператор
Вызов оператора
Скаляр и нескаляр; может определяться пользователем Скаляр и нескаляр Скаляр и нескаляр Включает операторы выборки, операторы "ТНЕ_", ":=", "=" и оператор проверки типа Никаких "целевых" операндов
Более кратко можно сказать, что единственная хорошая идея объектных систем в целом — это надлежащая поддержка типов данных (все остальное, включая понятия операторов, определяемых пользователем, следует из этой идеи)16. Но данную идею вряд ли можно назвать новой!
Упра^кнения
24.1. Дайте определения следующим терминам.
закрытая переменная экземпляра защищенная переменная экземпляра идентификатор объекта иерархия вложения иерархия классов инкапсуляция
класс
метод
обратная переменная
открытая переменная экземпляра
объект
объект, определяющий класс сообщение
функция конструктора
В чем заключаются недостатки и преимущества использования идентификаторов объектов? Каким образом можно реализовать идентификаторы?
В разделе 24.2 были представлены две формулировки SQL-запроса "Найти все прямоугольники, которые покрывают какую-нибудь область квадрата (0, 0, 1, 1)". Докажите, что эти формулировки эквивалентны.
Исследуйте любую доступную вам объектную СУБД. Какой язык программирования поддерживается в этой системе? Поддерживается ли в ней язык запросов? Если поддерживается, то какой? Является ли он, по вашему мнению, более мощным, чем язык SQL? Как организован каталог системы? Как пользователь опрашивает каталог? Предусмотрена ли в этой системе поддержка представлений? Если предусмотрена, то в какой степени (например, поддерживается ли в ней обновление представлений)? Как обрабатывается "отсутствующая информация"?
Составьте макет объектной версии используемой в этой книге базы данных поставщиков и деталей.
16 Кое-кто может возразить, что наследование типа — также хорошая идея. Мы против этого не возражаем, а лишь настаиваем на том, что поддержка наследования не относится исключительно к поддержке объектов как таковых.
Замечание. Этот макет будет использоваться как основа для приведенных ниже упр. 24.6-24.8.
Составьте подходящий набор утверждений определения данных на языке OPAL для объектной версии базы данных поставщиков и деталей.
Схематически обрисуйте детали методов "пополнения базы данных" объектной версии базы данных поставщиков и деталей.
Составьте код на языке OPAL для реализации приведенных ниже запросов в объектной версии базы данных поставщиков и деталей.
а) Выбрать сведения обо всех поставщиках, находящихся в городе ' London'.
б) Выбрать сведения обо всех деталях красного цвета ('Red').
24.9. Еще раз рассмотрите образовательную базу данных. Покажите, какие объекты бу- дут задействованы при выполнении следующих процедур.
а) Удаление слушателя
б) Удаление служащего
в) Удаление курса
г) Удаление класса слушателей
д) Удаление класса служащих
Подразумевается, что в каждом случае используется механизм автоматической сборки мусора языка OPAL. Приведите любые допущения, которые необходимо сделать относительно таких аспектов, как организация каскадного удаления и др. 24.10.Допустим, что база данных поставщиков, деталей и проектов организована с использованием простой объектной иерархии вложения. Сколько таких иерархий можно реализовать? Какая из них является наилучшей? 24.11. Рассмотрите вариант базы данных поставщиков, деталей и проектов, в котором вместо записей о том, что некоторые поставщики поставляют некоторые детали для некоторых проектов, содержатся записи о том, что некоторые поставщики поставляют некоторые детали, некоторые детали поставляются для некоторых проектов и некоторые проекты обеспечиваются деталями от некоторых поставщиков. Сколько таких объектных макетов можно реализовать (с учетом или без учета иерархии вложения)? 24.12.0пишите основные факторы, оказывающие влияние на производительность объектных систем и кратко обсуждавшиеся в разделе 24.5. Справедливо ли утверждение, что они характерны только для объектных систем? Обоснуйте свой ответ. 24.13. В объектных системах ограничения целостности обычно поддерживаются процедурно, т.е. с помощью методов, за исключением ограничений целостности на уровне ссылок, которые обычно поддерживаются, по крайней мере частично, декларативно. В чем состоит преимущество процедурного способа поддержки ограничений целостности? Почему ограничения целостности на уровне ссылок поддерживаются иначе?
24.14.0бъясните смысл концепции обратных переменных.
Список литературы
Публикации [24.5], [24.7], [24.11], [24.15], [24.26], [24.31], [24.38], [24.41] и [24.50] представляют собой книги по объектной тематике и связанным с ней вопросам. Публикации [24.35], [ 24.36] и [24.52] — это сборники научно-исследовательских работ, а [24.27], [ 24.28], [24.44] и [24.47] — учебные пособия. В работах [24.4], [24.9], [24.23] и [24.37] описываются конкретные системы.
24.1. Atkinson M.P. et al. The Object-Oriented Database System Manifesto // Proc. 1st Int. Conf. on Deductive and Object-Oriented Databases. — Kyoto, Japan, 1989. New York, N.Y.: Elsevier Science. — 1990.
Одна из первых попыток достичь согласия по вопросу, что же должна включать в себя "объектная модель". Предлагаются следующие обязательные возможности (т.е., по мнению автора, возможности, которые должны поддерживаться, если рассматриваемая СУБД заслуживает называться "объектно-ориентированной").
1. |
Коллекции |
8. Типы, определяемые пользователем |
2. |
Объектные идентификаторы |
9. Устойчивость |
3. |
Инкапсуляция |
10. Поддержка больших баз данных |
4. |
Типы или классы |
11. Параллельный доступ к данным |
5. |
Наследование |
12. Восстановление |
6. |
Позднее связывание |
13. Произвольные запросы |
7. |
Вычислительная полнота |
|
Также обсуждаются необязательные возможности, включая множественное наследование и проверку типов на этапе компиляции; некоторые открытые возможности, включая "парадигмы программирования"; вопросы, по которым авторы не смогли достичь согласия, включая (как это ни странно, учитывая их важность) представления и ограничения целостности.
Замечание. В [3.3] и [25.34] комментируется эта статья. Относительно комментариев в [3.3] необходимо отметить, что они основываются на предпосылке, что назначение статьи — определить свойства лучших, настоящих СУБД общего назначения. Мы не отрицаем, что перечисленные выше свойства могут быть полезны для специализированных СУБД, которые связаны с конкретным приложением, например САПР/ОАСУП, для которого не требуется, скажем, поддержка ограничений целостности. Однако тогда возникает вопрос, является ли такая система системой управления базами данных в полном смысле этого понятия.
24.2. Atkinson М.Р., Buneman О.Р. Types and Persistence in Database Programming Languages // ACM Сотр. Surv. — June, 1987. — 19, № 2.
Одна из ранних статей, если не самая ранняя, в которой формулируется точка зрения, согласно которой перманентность в языках программирования баз данных не должна зависеть от типов. Эта статья рекомендуется в качестве вводного пособия по изучению языков программирования баз данных в целом ("языки программирования баз данных" многими воспринимались как необходимое условие объектных систем; см., например, [24.11], [24.12]).
24.3. Bancilhon F. A Logic-Programming/Object-Oriented Cocktail // ACM SIGMOD.— September, 1986. — 15, № 3.
Цитата из введения: "Объектно-ориентированный подход... кажется наиболее приемлемым для управления такими новыми типами приложений, как САПР, для разработки программного обеспечения и для исследований в области искусственного интеллекта. Однако естественное расширение управления базами данных до реляционной методики является... не объектно-ориентированной, а логической программной парадигмой. В данной статье рассматривается возможность совмещения этих двух парадигм". Отсюда с некоторой долей предосторожности можно заключить, что они совместимы.
Замечание. В [24.49] предлагается противоположная точка зрения.
Banerjee J. et al. Data Model Issues for Object-Oriented Applications // ACM TOOIS (Transaction on Office Information Systems). — March, 1987. — 5, № 1. (Эта работа также опубликована в М. Stonebraker (ed.). Readings in Database Systems. — San Mateo, Calif: Morgan Kaufinann, 1994, а также в [24.52].)
Barry D.K, et al. The Object-Oriented Database Handbook: How to Select, Implement, And Use Object-Oriented Databases. —New York, N.Y.: John Wiley and Sons. — 1996. Основная мысль этой книги заключается в том, что если мы имеем дело со "сложными данными", необходима объектная система, а не реляционная. Сложные данные характеризуются как а) вездесущие, б) зачастую с недостаточной уникальной идентификацией, в) с использованием многочисленных связей типа "многие ко многим" и г) часто требующие использования кодов типов "в реляционной схеме" (поскольку в современных SQL-продуктах имеется недостаточная непосредственная поддержка для подтипов и супертипов).
Замечание. Автор является исполнительным директором группы Object Data Management Group (ODMG) [24.12].
Beech D. A Foundation for Evolution from Relational to Object Databases // Schmidt, Ceri, Missikoff. Extending Database Technology. — New York, N.Y.: Springer Verlag, 1988. Это одна из многих статей, в которых обсуждались возможности расширения языка SQL до некоторой разновидности "объектного SQL" (необходимо предупредить читателя, что такой "объектный SQL" часто не очень похож на привычный SQL). Более подробно этот вопрос рассматривается также в [24.39].
Bertino Е., Martino L. Object-Oriented Database Systems: Concepts and Architectures. — Reading, Mass.: Addison-Wesley, 1993.
Bj6rnerstedt A., Hulten C. Version Control in an Object-Oriented Architecture. (Опубликована в [24.36].)
Для многих приложений необходима концепция отдельных версий данного объекта. Примерами таких приложений могут служить разработки программного обеспечения, проекты аппаратных средств, создание документов и т.д. И некоторые объектные системы поддерживают эту концепцию непосредственно (хотя на самом деле данная концепция не связана именно с объектной системой или с какой-либо другой). Такая поддержка обычно включает следующее.
Возможность создания новой версии данного объекта, обычно с помощью оформления выдачи копии объекта и ее пересылки из базы данных на собственную рабочую станцию пользователя, где эта копия может корректироваться в течение продолжительного времени (например, несколько часов или дней).
Возможность получения версии данного объекта как версии текущей базы данных, обычно с помощью ее регистрации (сдачи на хранение) и пересылки с рабочей станции пользователя обратно в базу данных, для которой, в свою очередь, может потребоваться некоторый механизм слияния отдельных версий.
Возможность удаления и, возможно, архивирования устаревших версий.
Возможность запроса истории версий данного объекта.
Заметим, что, как показано на рис. 24.7, истории версий не обязательно связаны линейно (из версии V.2 образуются две разные версии, V.3a и V.3b, которые затем сливаются в версию V.4).
V.3a
V.1
V.2
V.4
►и т.д.
V.3b
Рис. 24.7. Типичная история версий объекта
Поскольку объекты обычно взаимосвязаны различными способами, концепция версий приводит к концепции конфигураций. Конфигурацией называется коллекция взаимно согласованных версий взаимосвязанных объектов. Причем под этим подразумевается выполнение некоторых основных операций.
Возможность копирования версии объекта из одной конфигурации в другую (например, из "старой" конфигурации в "новую").
Возможность перемещения версии объекта из одной конфигурации в другую (т.е. ее вставки в "новую" конфигурацию и удаления из "старой").
Для реализации таких возможностей требуется выполнить довольно много операций с указателями, что оказывает значительное влияние на синтаксис и семантику языка вообще и на средства выполнения произвольных запросов в частности. Описание последствий такой реализации выходит за рамки этой книги, впрочем материал главы 22 имеет некоторое отношение к данному вопросу.
24.9. Butterworth P., Otis A., Stein J. The GemStone Object Database Management System // CACM. — October, 1991. — 34, № 10.
24.lO.Carey M.J., DeWitt D.J., Naughton J.F. The 007 Object-Oriented Databases Benchmark // Proc. 1993 ACM SIGMOD Int. Conf. on Management of Data. — Washington, DC, May, 1993.
24.11.Cattell R.G.G. Object Data Management (пересмотренное издание).— Reading, Mass.: Addison-Wesley, 1994.
Первое подробное учебное пособие по применению объектной технологии специально для систем управления базами данных. Цитируемый ниже текст дает представление о том, что какая-либо форма единства мнений в этой области еще не достигнута: "языкам программирования может понадобиться новый комбинированный синтаксис... подстановка, репликация и новые методы доступа также нуждаются в дальнейшем исследовании... требуются новые инструменты пользователя и средства разработки прикладных программ... необходимо разработать более мощные языки составления запросов... необходимо исследовать управление параллельностью... создание временных отметок и семантика параллельности в терминах объектов также нуждаются в более детальном исследовании... необходимы модели оценки производительности... новые исследования в области управления знаниями следует интегрировать с инструментами управления объектами и данными...
это приведет к сложным проблемам оптимизации, и лишь некоторые исследователи обладают необходимым опытом... объединенные [объектные] базы данных требуют более глубокого изучения". 24.12.Cattell R.G.G., Barry D.K. The Object Database Standard: ODMG 2.0. — San Francisco, Calif; Morgan Kaufrnann, 1997.
Термин ODMG, говоря нестрого, обозначает проекты группы Object Data Management Group, консорциума представителей "членов компаний, [охватывающих] почти всю отрасль объектных СУБД". Эти проекты включают объектную модель, объектный язык определений (ODL), объектный формат обмена (OIF), объектный язык запросов (OQL) и привязки этих возможностей к языкам С++, Smalltalk и Java. (Компонент "язык обработки объектов" отсутствует, а вместо него предоставляются возможности обработки объектов с помощью любого языка, для которого ODMG предоставляет привязку.) Детальный анализ и критику объектной модели ODMG можно найти в [3.3]; к этому вопросу также имеет отношение [24.34]. 24.13.Cattell R.G.G., Skeen J. Object Operations Benchmark // ACM TODS. — March, 1992. — 17, № 1.
24.14.Copeland G., Maier D. Making Smalltalk a Database System // Proc. 1984 ACM SIGMOD Intern. Conf. on Management of Data.— Boston, Mass.,— June, 1984. (Переиздано: M. Stonebraker. Readings in Database Systems (2-е изд.). — San Mateo, Calif: Morgan Kaufrnann, 1994.)
В работе описаны некоторые усовершенствования и изменения, внесенные в язык Smalltalk [24.26] при создании СУБД GemStone и языка OPAL. 24.15.Сох B.J. Object Oriented Programming: An Evolutionary Approach. — Reading, Mass.: Addison-Wesley, 1986.
Учебное пособие по использованию объектных методов в области программирования. Некоторое внимание в нем уделяется применению этих методов для разработки программного обеспечения. 24.16.DahI O.J., Myhrhaug В., Nygaard К. The SIMULA 67 Common Base Language. Pub. S-22. — Oslo, Norway; Norwegian Computing Center, 1970.
Язык SIMULA 67 спроектирован специально для создания имитационных приложений. Именно на основе таких языков программирования и была создана объектная технология. Фактически язык SIMULA 67 был первым объектным языком.
24.17.Date C.J. An Optimization Problem // C.J. Date and Hugh Darwen. Relational Database Writings 1989-1991. — Reading, Mass.: Addison-Wesley, 1992.
24.18.Date C.J. Why the Object Model' Is Not a Data Model // Date C.J., Darwen H. and McGoveran D. Relational Database Writings 1994-1997.— Reading, Mass.: Addison-Wesley, 1998.
24.19.Date C.J. Object Identifiers vs. Relational Keys // Date C.J., Darwen H. and McGoveran D. Relational Database Writings 1994-1997. — Reading, Mass.: Addison-Wesley, 1998.
24.20.Date C.J. Encapsulation Is a Red Herring // DBP&D. — September, 1998. — 12, № 9. В этой главе уже упоминалось о том, что следствием инкапсуляции является независимость данных. Но мы также указывали, что предпочли бы не использовать термин "инкапсуляция", а заменили бы его термином скаляр. С другой стороны, "инкапсулированные объекты" не могут предоставить дополнительную независимость по сравнению с той, которую могут предоставить не инкапсулированные отношения (по крайней мере, в принципе). Например, нет абсолютно никаких причин для того, чтобы базовое отношение, которое представляет точку в декартовой системе координат X и Y, нельзя было хранить, используя полярные координаты R и 0. 24.21.Date CJ. Persistence Not Orthogonal to Type // DBP&D website wvw.dbpd.com.— October, 1998.
24.22.Date CJ. Decent Exposure // DBP&D website www.dbpd.com. —November, 1998. 24.23.Deux O. et al. The 02 System // CACM. — October, 1991. — 34, № 1. 24.24.Ferrandina F., Meyer Т., Zicari R., Ferran G., Madec J. Schema and Database Evolution
in the 02 Object Database System // Proc. 21st Int. Conf. on Very Large Data Bases. —
Zurich, Switzerland, September, 1995.
См. аннотацию к [24.43]. 24.25.Frohn J., Lausen G., Uphoff H. Access to Object by Path Expressions and Rules // Proc.
20th Int. Conf. on Very Large Data Bases. — Santiago, Chile, September, 1994. 24.26.Goldberg A., Robson D. Smalltalk-80: The Language and its Implementation. —
Reading, Mass.: Addison-Wesley, 1983.
Перечень передовых исследований специалистов из исследовательского центра фирмы Xerox в Пало Альто, посвященных проектированию и созданию системы Smalltalk-80. В первой из четырех частей этой книги подробно описывается язык программирования Smalltalk-80, на котором основаны язык OPAL и система GemStone.
24.27.Goodman N. Object Oriented Database Systems // InfoDB. — 1989. — 4, № 3.
В предыдущих изданиях данной книги приводилась следующая цитата из этой статьи. "На данном этапе не имеет смысла сравнивать реляционный и объектный подходы. Следует сравнивать лишь подобные понятия, например яблоки с яблоками, мечты с мечтами, теорию с теорией и зрелые продукты со зрелыми продуктами... Некоторое время реляционный подход использовался потому, что имел строгий теоретический базис и лежал в основе большого количества добротных программных продуктов. Объектный подход, наоборот, является новым (по крайней мере в области создания баз данных). Он не обладает той теоретической основой, которая сравнилась бы с реляционной моделью, и немногие программные продукты, созданные на его основе, могут быть охарактеризованы как добротные. Таким образом, прежде чем заявить об объектном подходе как об альтернативе реляционному подходу, придется выполнить очень большой объем работы." Несмотря на то что большая часть высказанных здесь замечаний еще остается в силе, все же со времени предыдущего издания этой книги некоторые неясные прежде вопросы несколько прояснились. Во многих сравнениях реляционные и объектные системы уже могут рассматриваться, как "яблоки и апельсины", в чем мы убедимся в главе 25.
24.28.Goodman N. The Object Database Debate, The Object Data Model, The Object Data Model in Action // InfoDB. — 1990-1991.— 5, №4; InfoDB. — 1990-1991.— 6, № 1; InfoDB. — 1991. — 6, №2.
24.29.Goodman N. Object Oriented DBMS War Story: Developing a Genome Mapping Database in С++ (опубликовано в [24.35]).
В статье поддерживаются многие критические замечания, которые были высказаны в этой главе. Далее приводится цитата из резюме статьи. "Вопреки распространенному мнению, наш опыт подсказывает, что было бы ошибкой создавать слишком интеллектуальные базы данных с помощью сложных программ в виде методов внутри объектов базы данных. Также наш опыт свидетельствует о том, что язык С++ — это язык, который подходит исключительно для реализации баз данных, с проблемами, связанными с механизмами определения атрибутов, механизмами установления ссылок на объекты систематическим путем, недостатками при "сборке мусора" и тонкими ловушками в модели наследования. Мы также считаем, что современным СУБД, основанным на С++, недостает некоторых важных функций баз данных, и чтобы это компенсировать, нам пришлось предоставлять собственные простые реализации стандартных функций СУБД: ведения журнала транзакций для прямого восстановления, отслеживания многопоточных транзакций, язык запросов и процессор запросов, а также структуры памяти. В результате мы использовали СУБД, основанную на С++, как объектно-ориентированный диспетчер памяти и, кроме того, встроили систему управления данными, предназначенную для широкомасштабного геномного отображения."
24.30.Jagadish H.V., Xiaolei Q. Integrity Maintenance in an Object-Oriented Database // Proc 18th Int. Conf. on Very Large Data Bases. — Vancouver, Canada, August, 1992. В работе предлагается декларативный метод указания ограничений целостности для объектных систем. При этом описывается, как компилятор ограничений помещает в методы соответствующих объектных классов необходимый код проверки целостности.
24.31.Jordan D. С++ Object Databases: Programming with the ODMG Standard. — Reading, Mass.: Addison-Wesley, 1997. (Имеется русский вариант этой книги: Джордан Д. Обработка объектных баз данных в С++. Программирование с использованием стандарта ODMG.: Пер. с англ. — М.: Издательский дом "Вильяме", 2001.)
24.32.Kifer М., Kim W., Sagiv Y. Querying Object-Oriented Databases // Proc. ACM SIGMOD Int. Conf. on Management of Data. — San Diego, Calif, June, 1992. В работе предлагается еще один "объектный вариант языка SQL" под названием XSQL.
24.33.Kim W. Object-Oriented Database Systems: Promises, Reality, and the Future // Proc.
19th Int. Conf. on Vary Large Data Bases. — Dublin, Areland, August, 1993. 24.34.Kim W. Observations on the ODMG-93 Proposal for an Object-Oriented Database
Language // ACM SIGMOD Record. — March, 1994. — 23, № 1. 24.35.Kim W. Modern Database Systems: The Object Model, Interoperability, and Beyond. —
New York, N.Y.: ACM Press/Reading, Mass.: Addison-Wesley, 1995. 24.36.Kim W., Lochovsky F.H. Object-Oriented Concepts, Databases and Applications. —
Reading, Mass.: Addison-Wesley, 1989. 24.37.Lamb C, Landis G., Orenstein J., Weinreb D. The ObjectStore Database System //
CACM. — October, 1991. — 34, № 10. 24.38.Loomis M.E.S. Object Databases: Essentials. — Reading, Mass.: Addison-Wesley, 1995. 24.39.Lyngbaek P. et al. OSQL: Language for Object Databases. — Technical Report HPL-
DTD-91-4. — Hewlett-Packard Company, January, 1991.
См. комментарий к [24.6].
24.40. Meyer В. The Future of Object Technology // IEEE Computer. — January, 1998. — 31, № 1. "Будущее [объектных] баз данных — это интересная тема для размышлений... Изготовители реляционных баз данных с 1986 года старались подавить рост [объектных] баз данных с помощью упреждающих извещений... Десять лет спустя эксперты [объектных баз данных] будут говорить вам, что предложения от основных производителей реляционных СУБД... еще далеки от реальных потребностей... Рынок объектных баз данных будет продолжать расти, но часть рынка традиционных баз данных останется."
24.41.Parsaye К., Chignell М., Koshafian S., Wong Н. Intelligent Databases.— New York, N.Y.: John Wiley & Sons, 1989.
24.42.Poulovassilis A., Small C. Investigation of Algebraic Query Optimisation for Database Programming Languages // Proc. 20th Int. Conf. on Vary Large Data Bases. — Santiago, Chile, September, 1994.
24.43.Roddick J.F. Schema Evolution in Database Systems— An Annotated Bibliography // ACM SIGMOD. — December, 1992. — Record 21, № 4.
В традиционных СУБД обычно поддерживаются только очень простые изменения существующего макета СУБД (например, добавление нового атрибута к существующей базовой переменной-отношению). Однако в отдельных случаях требуется выполнить более сложные изменения, и в некоторых объектных прототипах эта проблема исследована достаточно глубоко. Причем в случае объектной системы она становится более сложной, поскольку сама по себе такая система имеет более сложный макет.
В [24.4] обсуждается система ORION, которая служит прототипом объектной системы, и приводится перечень основных возможных изменений макета. Отметим, что некоторые из них (какие?) вводят в заблуждение, не отличая модель от реализации.
■ Изменения объектного класса
1. Изменения переменной экземпляра:
добавление переменной экземпляра;
удаление переменной экземпляра;
переименование переменной экземпляра;
изменение принятого по умолчанию значения переменной экземпляра;
изменение типа данных переменной экземпляра;
изменение источника наследования переменной экземпляра.
2. Изменения метода:
добавление метода;
удаление метода;
переименование метода; • изменение кода метода;
изменение источника наследования метода.
■ Изменения в иерархии классов (предполагается множественное наследование):
■ добавление класса А к списку суперклассов класса В; " удаление класса А из списка суперклассов класса В.
■ Изменения общего макета:
добавление класса (в произвольном месте);
удаление класса (в произвольном месте);
переименование класса;
разбиение класса;
слияние классов.
Поскольку поддержка представлений обычно не включается в "объектную модель", не совсем ясно, насколько сильным окажется влияние таких изменений на прозрачность системы. Возможность внесения изменений в макет системы представляет собой достаточно сложную проблему именно из-за того, что в объектных системах осуществляется последовательная обработка записей. Как отмечается в [24.34], если при внесении изменений индексы или данные распределены по разным группам (кластерам), то никаких способов автоматически получить преимущества от таких изменений с помощью методов не существует. Более того, постепенное развитие схемы является еще одним требованием объектной системы, поскольку многие решения, которые могли бы быть решениями администратора базы данных (или даже решениями СУБД!) в реляционной базе данных, в объектной системе становятся решениями программиста приложения (см. [24.44]). В частности, приведение в соответствие производительности системы может также повлечь перепроектирование макета (опять же, см. [24.44]). 24.44.Saracco СМ. Writing an Object DBMS Application (в двух частях) // InfoDB. — 1993-1994. — 7, № 4; InfoDB. — 1994. — 8, № 1.
Приводятся несложные, но достаточно полные и информативные примеры программ. 24.45.Shaw G.M., Zdonik S.B. A Query Algebra for Object-Oriented Databases // Proc. 6th IEEE Int. Conf. on Data Engineering. — February, 1990. (Опубликована также в виде технического отчета: Technical Report TR CS-89-19, Dept. of Computer Science.— Providence, R.I.: Brown University, March, 1989.)
Эта статья подтверждает мнение автора данной книги о том, что "любая объектная алгебра" является сложной из-за сложной организации самих объектов. В частности, для выполнения операции сравнения иерархических объектов с произвольной сложностью вложенных уровней потребуется очень тщательная организация всего этого процесса. Основная идея статьи заключается в том, что каждый оператор алгебры запросов приводит к созданию отношения, каждый кортеж которого содержит идентификаторы некоторых объектов базы данных. В случае операции соединения, например, каждый кортеж будет содержать идентификаторы объектов, которые соответствуют друг другу для заданного условия соединения. Эти кортежи не наследуют никаких методов объектов-компонентов. 24.46.Shipman D.W. The Functional Data Model and the Data Language DAPLEX // ACM TODS.— March, 1981.— 6, № 1. (Переиздано; M. Stonebraker (ed.). Readings in Database Systems (2-nd edition). — San Mateo, Calif.: Morgan Kaufrnann, 1994.) Существует несколько попыток создания систем, в основе которых вместо отношений используются функции, и среди них наиболее известной является система DAPLEX. Функциональные подходы обладают некоторыми чертами, характерными для объектных систем, включая, в частности, стиль адресации объектов (с помощью указания пути), которые функционально относятся к другим объектам (которые, в свою очередь, также относятся к другим объектам, и т.д.)- Обратите внимание, однако, что термин "функция" в этих так называемых функциональных моделях не имеет никакого отношения к математической функции. Например, такая функция вполне может быть многозначной. Практически традиционное понятие функции должно претерпеть значительные изменения для того, чтобы удовлетворить всем требованиям, которые предъявляются в контексте "функциональной модели данных". 24.47.Stein J., Maier D. Concepts in Object-Oriented Data Management // DBP&D. — April, 1988. — 1, ЛЬ 4.
Прекрасный учебный материал по объектным концепциям, представленный создателями системы GemStone.
24.48.Tsichritzis D.C., Nierstrasz О.М. Directions in OO Research (опубликовано в [24.36]). В этой статье также подтверждается высказанная автором настоящей книги мысль об отсутствии единства мнений в области объектных подходов: "...разногласия существуют по самым основным понятиям, например: "Что такое объект?.. ". Однако причин для беспокойства нет, поскольку нестрогие определения неизбежны, а порой они даже крайне желательны во время динамичного развития научных исследований. Они должны стать и неизбежно станут строгими спустя некоторое время". Однако объектные концепции известны уже более 30 лет! — фактически они предшествовали реляционной модели.
24.49.Ullman J.D. A Comparison between Deductive and Object-Oriented Database Systems // Proc. 2nd Int. Conf. on Deductive and Object-Oriented Databases. — Munich, Germany, December, 1991. Delober C, Kifer M., Masunaga Y. (eds). Lecture Notes in Computer Science 566. — New York, N.Y.: Springer Verlag, 1992.
Хотя мы и не согласны по многим отдельным вопросам, представленным в данной статье, мы согласны с общим выводом, что "дедуктивная" (т.е. основанная на логике) система баз данных имеет большие перспективы по сравнению с объектными системами. В статье также затронут важный вопрос относительно возможностей оптимизации систем. Предположим, что мы определили "какой-то объектный класс, поведение которого такое же, как поведение бинарных отношений, и... метод join (соединение) для этого класса, тогда можно записать, например, выражение R JOIN S JOIN Т. Его можно вычислять как (R JOIN S) JOIN Т или как R JOIN (S JOIN Т). Но сможем ли мы это сделать? Никто не определял, что означает метод join. Является ли он, например, ассоциативным?.. Отсюда можно сделать вывод, что если мы желаем программировать, используя объектную технологию, оставаясь на уровне отношений или выше, то необходимо предоставить системе информацию в виде законов реляционной алгебры. Такая информация не может быть выведена системой, но может быть встроена в нее. Таким образом, ...единственной частью языка запросов, которая будет поддаваться оптимизации, является фиксированное множество методов, для которых... соответствующая семантика предоставлена системе".
24.50.Vossen G. Data Models, Database Languages, and Database Management Systems. — Reading, Mass.: Addison-Wesley, 1991.
24.51. Zaniolo C. The Database Language GEM // Proc. 1983 ACM SIGMOD Int. Conf. on Management of Data. — San Jose, Calif, May, 1983. (Переиздано: M. Stonebraker. Readings in Database Systems (2-nd edition). — San Mateo, Calif: Morgan Kaufrnann, 1994.)
Аббревиатура GEM (General Entity Manipulator) обозначает расширение языка QUEL, в котором поддерживаются отношения, не находящиеся в первой нормальной форме (т.е. отношения с атрибутами, значениями которых являются множества), и отношения с альтернативными атрибутами (например, одни объекты сотрудников ЕМР имеют атрибут постоянной зарплаты SALARY, а другие объекты сотрудников ЕМР имеют атрибут почасовой оплаты HOURLY_WAGE и атрибут сверхурочной оплаты OVERTIME). Кроме того, в нем поддерживается объектная идея о том, что одни объекты концептуально содержат другие объекты (они используются вместо внешних ключей, которые ссылаются на другие объекты). Причем привычная запись с использованием точки расширена для ссылок на атрибуты таких объектов (хотя на самом деле при этом неявно просматриваются некоторые предпочтительные пути соединения). Например, выражение ЕМР.DEPT.BUDGET может быть использовано для обращения к бюджету отдела, в котором работает определенный сотрудник. Многие другие системы либо адаптированы к восприятию этой идеи, либо построены на ее основе. 24.52.Zdonik S.B., Maier D. Readings in Object-Oriented Database Systems. — San Francisco, Calif.: Morgan Kaufrnann, 1990.
Ответы к некоторым упражнениям
24.1. Здесь мы объясним лишь термин объект. Ниже приведено несколько "определений", которые можно найти в литературе.
"Объектами называются многократно используемые программные модули, в которых хранятся данные, информация о связях между данными, приложениями и процессами, контролирующими данные и связи" (из анонса коммерческого программного продукта).
"Объектом называется область закрытой памяти с открытым интерфейсом" [24.47].
"Объектом называется абстрактная конструкция, определяющая протокол, с помощью которого пользователи этого объекта могут с ним общаться" (введение к [24.52]).
"Объектом называется программная структура, которая содержит данные и программы" [24.27].
" "...все что угодно является объектом... объект имеет закрытую память и открытый интерфейс" [24.50]. Отметим, что ни одно из этих "определений" не объясняет суть понятия, а именно — что объект является, по существу, просто значением (если он неизменяемый) или переменной (в противном случае).
Также стоит прокомментировать точку зрения, что "все что угодно является объектом". Вот, например, конструкции, которые не являются объектами в большинстве объектных систем: переменная экземпляра, отношения (по крайней мере в ODMG [24.12]), методы, идентификаторы, программные переменные. А в некоторых системах (опять же, включая ODMG) значения также не являются объектами.
24.2. Ниже перечислены преимущества идентификаторов.
Идентификаторы не характеризуются "разумностью". В [13.9] объясняется, почему такое "качество" идентификаторов полезно.
Идентификаторы никогда не изменяются до тех пор, пока существуют объекты, которые они идентифицируют.
Идентификаторы не являются сложными конструкциями. В [8.12], [13.10] и [18.8] объясняется, почему и это свойство идентификаторов полезно.
Все объекты объектной базы данных идентифицируются одинаковым образом (в отличие от реляционных баз данных).
При ссылке на объекты не нужно повторять пользовательские ключи, поэтому нет нужды в правилах обновления ON UPDATE.
Некоторые недостатки идентификаторов были кратко перечислены в разделах 24.2-24.4, например они не позволяют избежать необходимости в пользовательских ключах, следствием их применения является низкоуровневый стиль программирования с "поиском указателей", их можно применять только для "базовых", т.е. не производных, объектов.
Среди возможных способов реализации идентификаторов нужно указать следующие.
Физические дисковые адреса (это очень высокопроизводительный способ, но он характеризуется слабой независимостью данных).
Логические дисковые адреса (т.е. адреса страниц и смещений; это также высокопроизводительный способ, причем он характеризуется большей независимостью данных).
Искусственные идентификаторы (например, временные метки, номер по порядку; для такого способа требуется также дополнительное отображение на действительные адреса).
24.3. См. [24.17].
24.5. Вместо подробного ответа здесь будет предложено несколько соображений по вопросам проектирования объектных баз данных в целом. Иногда можно услышать утверждения, что объектные системы облегчают проектирование (и использование) баз данных, поскольку они предоставляют высокоуровневые конструкции для моделирования и поддерживают эти конструкции в системе. (В реляционных же системах высший уровень используется косвенно, а именно: в процессе отображения объектов реального мира в переменные-отношения, атрибуты, внешние ключи и т.д.) В этом утверждении есть доля истины. Однако позвольте прежде задать вопрос "Как выполнен проект объектной базы данных?". Действительно, "объектная модель", как это принято считать, имеет значительно больше степеней свободы (или, другими словами, больше выбора) по сравнению с реляционной моделью. Но автору этой книги неизвестно о существовании хотя бы одного стоящего пособия, которое помогло бы реализовать эти возможности. Например, как определить представление, скажем, множества всех служащих: как массив, как список или как множество и т.д. и т.п. "Для мощной модели данных требуется мощная методология проектирования... и за это ответственна объектная модель данных" (выдержки из [24.27]). Мы могли бы возразить, что характеристику "мощная" необходимо заменить характеристикой "сложная".
24.9. Вместо подробного ответа здесь будет сделано одно замечание относительно сложности этого упражнения. Прежде всего, следует обратить внимание на то, что термин "удалить" будет использоваться как сокращение для выражения "выбрать в качестве кандидата для физического удаления" (т.е. удалить все ссылки на этот объект). Тогда для того, чтобы удалить объект X, сначала следует найти все объекты Y, которые содержат ссылку на X, а затем следует либо удалить такие объекты Y, либо удалить в этих объектах все ссылки на объект X (задав для таких ссылок специальное значение nil, т.е.
отсутствие значения). Частично проблемы могут возникнуть потому, что невозможно на основании одного только определения данных указать те объекты, которые содержат ссылку на объект X, или хотя бы даже сказать, сколько их существует. Рассмотрим, например, объекты сотрудников и объектный класс ESET. В принципе, может существовать любое количество экземпляров класса ESET, и каждое подмножество экземпляров класса ESET может содержать ссылку на некоторого конкретного сотрудника. 24.10.Существует шесть возможных иерархий.
S содержит { Р содержит { J ) ) S содержит ( J содержит ( Р } ) Р содержит ( J содержит ( S ) ) Р содержит ( S содержит { J ) ) J содержит ( S содержит ( Р ) ) J содержит ( Р содержит ( S ) )
Без какой-либо дополнительной информации невозможно дать ответ на вопрос "Какой из вариантов является лучшим?", но можно почти с полной уверенностью сказать, что все они одинаково плохи. 24.11.Существует по . мере двенадцать "очевидных" макетов иерархии контейнеров. Ниже _ только четыре из них.
S содержит ( Р содержит ( J j ) S содержит ( J содержит ( Р j ) S содержит ( сначала Р, затем J ) S содержит ( сначала J, затем Р )
Существует достаточно много других возможных макетов, например объект SP, который прямо указывает на то, какими поставщиками какие детали поставляются, а также включает два внедренных множества проектов: одно для поставщиков, другое —- для деталей.
Можно также составить проект безо всяких иерархий из объектов SP, PJ и JS.
24.12. Среди основных факторов, оказывающих влияние на производительность, были перечислены следующие: кластеризация, кэширование, замена указателей и выполнение методов на сервере. Все эти способы обработки данных могут применяться в любой системе для обеспечения разумного уровня независимости от данных, поэтому они характерны не только для объектных систем. На самом деле, идея использования определения логической базы данных для выбора типа физической кластеризации (используемой в той или иной объектной системе) может рассматриваться как некий фактор, потенциально подрывающий независимость от данных. Замечание. Следует отметить, что другой очень важный фактор, оказывающий влияние на производительность, а именно — оптимизация, обычно не учитывается в объектных системах.
24.13.По мнению автора, декларативная поддержка, если она возможна, всегда лучше процедурной (по многим причинам, а не только для создания ограничений целостности). Короче говоря, декларативная поддержка означает, что система выполняет некоторую работу вместо пользователя. Вот почему в реляционной системе поддерживаются декларативные запросы, декларативные определения представлений, декларативные ограничения целостности и т.д.
Глава
Объектно-реляционные базы данных