- •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. Резюме
Часть VI
Объектные и объектно-реляционные базы данных
Объектная технология является важной областью в сфере разработки программного обеспечения в целом. Поэтому возникает естественный вопрос, важна ли эта технология, в частности, в сфере управления базами данных, и если важна, то какова ее значимость для этой сферы. Единого мнения, однако, по этому вопросу пока нет! Одни авторитетные источники считают, что в недалеком будущем объектные системы баз данных получат признание во всем мире и полностью заменят реляционные системы. Другие же полагают, что объектные системы подходят лишь для определенного, очень ограниченного круга задач и никогда не займут сколько-нибудь значительную часть рынка баз данных. Совсем недавно начали появляться системы, поддерживающие "третий путь": они объединяют объектную и реляционную технологии и пытаются везде поспеть. В двух главах этой заключительной части книги приведенный выше вопрос рассматривается достаточно глубоко: в главе 24 обсуждаются чисто объектные системы, а в главе 25 — более новые объектно-реляционные системы.
Глава
Объектные базы данных
24.1. Введение
Большой интерес представляют результаты исследований, полученные за последнее десятилетие в области объектно-ориентированных систем баз данных (или сокращенно — объектных систем). Некоторые специалисты рассматривают объектные системы как серьезного конкурента реляционных систем (или, во всяком случае, конкурента SQL-систем), и если не в полном объеме, то по крайней мере для определенных приложений. В этой главе подробно рассматриваются объектные системы. Сначала мы познакомимся с основными объектными концепциями, а затем основательно их проанализируем и предоставим некоторые выводы относительно перспектив включения этих концепций в системы баз данных в будущем.
Почему же возник такой большой интерес к объектным системам? Общеизвестно, что уже ставшие классическими SQL-системы несовершенны во многих отношениях. И некоторые специалисты — но не автор этой книги! — считают, что и теория (т.е. реляционная модель), которая служит основой для таких систем, также не отвечает современным требованиям. Как бы то ни было, некоторые из новых возможностей, которые считаются необходимыми в современных СУБД, уже много лет существуют в объектно-ориентированных языках программирования, например в С++ и Smalltalk. И, вполне естественно, возникла идея внедрить эти возможности в системы баз данных, что и было сделано многими исследователями и несколькими производителями СУБД.
Таким образом, объектные системы берут свое начало от объектно-ориентированных языков программирования. Основная идея, объединяющая эти две области, состоит в том, чтобы оградить пользователя от конструкций, связанных с аппаратным обеспечением, таких как биты и байты (или даже записи и поля). Вместо этого пользователь имеет дело с объектами и операциями над этими объектами, которые больше соответствуют своим аналогам в реальном мире. Например, используя традиционные термины, можно представлять отдел, как "кортеж DEPT" с набором соответствующих "кортежей ЕМР", т.е. сотрудников, которые имеют "значения внешних ключей", "ссылающихся" на "значение первичного ключа" в "кортеже DEPT". В новой технологии пользователь будет иметь дело с объектом отдела, который содержит соответствующее множество объектов сотрудников. И вместо выполнения операции "вставки" "кортежа" в "переменную-отношение ЕМР" с соответствующим "значением внешнего ключа", "указывающего" на "значение первичного ключа" некоторого "кортежа" в "переменной-отношении DEPT", пользователь может непосредственно "принять" сотрудника (представленного объектом) на работу в отдел (также представленный соответствующим объектом). Иначе говоря, фундаментальная идея объектного подхода -— повышение уровня абстракции.
Безусловно, повышение уровня абстракции — цель чрезвычайно привлекательная, и объектные понятия успешно использовались для ее достижения в сфере языков программирования [24.15]. Поэтому возникает естественный вопрос, можно ли те же поня-
тия применить в области баз данных. Действительно, с точки зрения пользователя, работа со "сложными объектами", например, представляющими отделы, которые "знают, как" принять нового сотрудника, сменить менеджера или урезать бюджет, выглядит более привлекательной (по крайней мере на первый взгляд), чем необходимость оперировать понятиями "переменная-отношение", "вставка кортежа", "внешний ключ" и т.п.
Однако здесь необходимо сделать следующее предостережение. Несмотря на то что между языками программирования и теорией управления базами данных, бесспорно, имеется много общего, в некоторых весьма важных аспектах они все же различаются. В частности, укажем на следующие различия.
Прикладная программа по определению предназначена для решения некоторых конкретных задач.
База данных (опять же, по определению) предназначена для решения множества различных задач, формулировка которых может быть даже неизвестна в момент создания базы данных.
Поэтому в среде программирования, предназначенной для разработки отдельных приложений, включение в сложные объекты дополнительной "интеллектуальности", очевидно, является разумным решением. За счет этого сокращается объем кода, который должен быть написан программистом при использовании этих объектов. В результате повышается продуктивность работы программиста, упрощается сопровождение готового приложения и т.д. Для среды баз данных, напротив, дополнительная интеллектуальность в одних ситуациях может оказаться полезной, а в других — нет. Это может упростить одни задачи, но в то же время усложнить или даже сделать невозможным решение других задач.
(Кстати, точно такой же аргумент может быть использован против дореляционных СУБД наподобие системы IMS. Объект отдела, содержащий набор объектов сотрудников, концептуально очень похож на иерархию системы IMS, в которой "родительские сегменты" отделов содержали подчиненные "дочерние сегменты" сотрудников. Такая иерархия весьма удобна для выполнения запросов наподобие "Найти сотрудников, которые работают в бухгалтерии", но не очень удобна для выполнения запросов типа "Найти отделы, в которых принимают на работу сотрудников, окончивших бизнес-колледж". Таким образом, многие аргументы, высказанные против иерархического подхода в 70-х годах, применимы и теперь в контексте объектно-ориентированного подхода.)
Несмотря на приведенные выше замечания, по-прежнему бытует мнение о том, что объектные системы являются большим шагом вперед на пути развития технологий управления базами данных. В частности, считается, что объектные технологии весьма перспективны для "комплексных" приложений в следующих областях:
системы автоматизированного проектирования и автоматизированного управления производством;
системы комплексного автоматизированного управления технологическими процессами;
системы автоматизированной разработки программного обеспечения;
геоинформационные системы;
наука и медицина;
системы хранения и поиска документов и т.д.
(Отметим, что выше перечислены те области, в которых применение традиционных SQL-продуктов сопряжено со значительными трудностями.) В последние годы на эту тему опубликовано огромное количество технических статей, а также выпущено несколько соответствующих коммерческих продуктов.
В данной главе основное внимание уделяется объектной технологии в целом. Поэтому необходимо представить наиболее важные концепции объектного подхода и, в частности, рассмотреть эти концепции с точки зрения перспективы применения для управления базами данных (заметим, что большая часть имеющихся публикаций посвящена перспективам применения объектного подхода для программирования). Данная глава имеет определенную структуру. В следующем подразделе представлен специальный пример, наглядно демонстрирующий неспособность современных реляционных продуктов удовлетворительно решать некоторые задачи, в результате чего у объектной технологии появляется шанс предоставить лучший вариант решения этой задачи. Затем, в разделе 24.2, предлагается обзор объектов, классов, сообщений и методов, а в разделе 24.3 уделяется внимание некоторым особенностям этих понятий, а также подробно обсуждается их содержание. В разделе 24.4 представлен достаточно простой пример. В разделе 24.5 обсуждаются некоторые дополнительные вопросы. И наконец, в разделе 24.6 подводятся итоги обсуждения темы главы.
В заключение сделаем следующее замечание. Вопреки тому, что объектные системы изначально предназначались для создания "сложных" приложений, таких как САПР/АСУТП, в дальнейшем для краткости и простоты изложения будут рассматриваться только очень простые примеры (отделы и сотрудники и т.п.). При этом такой упрощенный подход нисколько не уменьшает значимости объектной технологии; во всяком случае, если объектные базы данных работают хорошо, они должны легко справляться и с "простыми" задачами.
Специальный пример
Рассмотрим простой пример, предложенный Стоунбрейкером (Stonebraker) и описанный автором этой книги в [24.17]. Данный пример иллюстрирует некоторые проблемы, присущие современным SQL-продуктам. База данных, которая может рассматриваться как существенно упрощенная версия базы данных САПР/АСУТП, содержит сведения о прямоугольниках, заданных в такой системе координат, оси X и Y которой параллельны сторонам этих прямоугольников, т.е. все их стороны либо вертикальные, либо горизонтальные. Следовательно, каждый прямоугольник может быть уникальным образом представлен с помощью координат (xl,yl) и (х2,у2) нижнего левого и верхнего правого углов соответственно (рис. 24.1). На языке SQL это определение можно записать с помощью следующего оператора.
CREATE TABLE RECTANGLE
( XI ... , Yl ... , Х2 ... , Y2 ....... ,
UNIQUE ( XI, Yl, X2, Y2 ) ) ;
Теперь рассмотрим запрос "Найти все прямоугольники, которые покрывают какую-нибудь область квадрата (0, 0, 1, 1)" (рис. 24.2).
|
У2 |
|
|
|
|
|
|
| |
|
yi |
|
|
|
|
|
|
| |
|
|
х1 х2 | ||
(0,1)
(0,0)
(1.1)
(1,0)
Рис. 24.1. Прямоугольник с координатами Рис. 24.2. Квадрат с координатами (0, 0, (xl, х2. yl, у2) 1, 1)
"Очевидная" формулировка этого запроса на языке SQL может быть представлена следующим образом.
Х2
>= 1 AND
Yl >=
О
AND
Yl <=
нижний край пересекает квадрат XI
<= 1
AND
Yl <=
О
AND
Y2 >=
XI <= 1 AND Yl >= 0 AND Yl <= 1 ) нижний левый угол внутри квадрата Х2 <= 1 AND Y2 >= О AND Y2 <= 1 ) верхний правый угол внутри квадрата XI <= 1 AND Y2 >= О AND Y2 <= 1 ) верхний левый угол внутри квадрата Х2 <= 1 AND Yl >= О AND Yl <= 1 ) нижний правый угол внутри квадрата Х2 >= 1 AND Yl <= О AND Y2 >= 1 )
1 )
Х2 <= 1 AND Yl <= О AND Y2 >= 1 ) фавый край пересекает квадрат Х2 >= 1 AND Y2 >= О AND Y2 <= 1 ) ; -- верхний край пересекает квадрат
(Упражнение. Убедитесь в том, что эта формулировка действительно корректна.) Однако нетрудно догадаться, что данный запрос можно сформулировать и в более простой форме.
SELECT ...
FROM RECTANGLES
WHERE ( XI <= 1 AND Yl <= 1
-- нижний левый угол находится ниже и левее точки (1,1) AND Х2 >= О AND Y2 >= 0 ) ;
— верхний правый угол находится выше и правее точки (0,0)
(В упр. 24.3 в конце главы предлагается убедиться, что эта формулировка также корректна.)
Возникает вопрос, может ли системный оптимизатор преобразовать исходную длинную форму запроса в соответствующую ему краткую форму. Иначе говоря, предположим, что пользователь выражает запрос в "очевидной" (и, очевидно, неэффективной) длинной форме. Может ли система перед выполнением запроса сократить его формулировку, сделав ее более эффективной? В [24.17] приведено доказательство того, что это почти всегда невозможно, по крайней мере оптимизаторы современных коммерческих продуктов такой возможностью не обладают.
В любом случае, несмотря на то что краткая формулировка "более эффективна", ее производительность может оказаться неприемлемо низкой в большинстве современных реляционных продуктов, в которых используются обычные структуры памяти, например индексы в виде В-деревьев. (В среднем, система будет проверять 50% элементов индекса для каждой из координат Xl, Х2, Y1 и Y2.)
Таким образом, можно утверждать, что современные реляционные продукты действительно несовершенны в некоторых отношениях. Точнее говоря, проблемы, подобные описанной выше, иллюстрируют, что в этих продуктах некоторые "простые" запросы пользователя неоправданно сложно формулируются и выполняются с неприемлемо низкой производительностью. Именно эти соображения послужили основным побудительным мотивом для развития объектных систем.
Замечание. В главе 25 (раздел 25.1) будет приведено "эффективное" решение задачи о прямоугольниках.
