- •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. Резюме
25.3. Вторая грубейшая ошибка
В этом разделе будет рассмотрена вторая грубейшая ошибка. Как мы вскоре убедимся, она логически следует из первой, но также показательна и сама по себе (более того, такая ошибка может быть допущена даже в том случае, если удалось избежать первой грубейшей ошибки). Суть второй ошибки в смешивании указателей и отношений. Начнем с пересмотра основных возможностей, используемых в подходе "переменная-отношение = класс", как мы его определили в предыдущем разделе. Возможно, кое-кто сочтет этот раздел несколько запутанным, поскольку некоторые из возможностей, которые не одобряются, ранее в этой книге защищались (например, атрибуты со значениями кортежа и отношения). Итак, перейдем к их последовательному рассмотрению.
■ Атрибуты со значениями-кортежами и значениями-отношениями. Конечно, мы не возражаем против таких атрибутов (да и как мы можем?). Мы возражаем против того, что, во-первых, эти атрибуты должны иметь именно такие значения, которые в данный момент должны быть и в некоторой другой (базовой) переменной-отношении; во-вторых, такие атрибуты действительно имеют значения, которые сами не являются кортежами или отношениями, а представляют собой указатели на кортежи или отношения. Последнее означает, что в действительности об атрибутах, имеющих в качестве значений кортежи или отношения, речь не идет совсем.
Замечание. На самом деле идея использования указателей на "кортежи или отношения", означающих именно значения в виде кортежей или отношений, — это вздор. Мы еще обсудим данный вопрос подробнее.
Операторы (".методы "), связанные с переменными-отношениями. Против такой идеи мы также не имеем ничего против — под этой личиной скрывается привычная концепция хранимых и триггерных процедур. Однако мы не согласны с тем, что подобные операторы должны быть связаны с переменными-отношениями (и только с ними), а не с доменами и типами. Не поддерживаем мы и точку зрения, что они должны быть связаны с одной определенной переменной-отношением (понятие целевых операндов в другом обличье).
Подклассы и суперклассы. А вот с этой идей мы не согласны... В системе, которая отождествляет переменные-отношения с классами, подклассы и суперклассы становятся иодтаблицами и суиертаблицами, а к этой концепции мы относимся [13.12] весьма скептически. Мы выступаем за настоящую поддержку наследования, как уже объяснялось в главе 19.
Выражения пути. Мы бы не возражали против использования выражений, которые служили бы просто сокращениями для последующих ассоциативных ссылок, т.е. от внешнего ключа к совпадающему потенциальному ключу, как предлагалось в [25.11]. Однако, как указывалось в разделе 25.2, такие выражения служат сокращениями для последующих цепочек указателей, а этого мы не признаем (поскольку, прежде всего, мы против использования указателей).
Литералы кортежей и отношений. Это важные понятия, но их необходимо обобщить в понятия выборок кортежей и отношений [3.3].
Реляционные операторы сравнения. Также существенное понятие (хотя требуется правильная его реализация).
Операторы для обхода иерархии класса. Если "иерархия класса" действительно означает "иерархию переменных-отношений", то, как отмечалось в предыдущем разделе, мы категорически возражаем, поскольку возможны нарушения свойства реляционной замкнутости (см. также [25.31]). Если же "иерархия класса" означает "иерархию типов" в смысле главы 19, никаких возражений нет (но в действительности это не так).
Вызов методов внутри предложений, например, SELECT и WHERE. Конечно, за.
Доступ к отдельным компонентам внутри значений атрибута, которые являются кортежами wiu отношениями. Конечно, за.
А теперь остановимся на вопросе смешивания указателей и отношений. Основной аргумент очень прост. По определению указатели указывают на переменные, а не на значения (поскольку у переменных есть адрес, а у значений нет). Следовательно, если переменная-отношение Rl может иметь атрибуты, значения которых являются указателями "на" переменную-отношение R2, то эти указатели будут указывать на переменные кортежей, а не на их значения. Но в реляционной модели нет такого понятия, как переменная кортежа. В реляционной модели рассматриваются значения отношений, которые, попросту говоря, являются множествами значений кортежей, которые, в свою очередь, являются множествами скалярных значений. В реляционной модели также рассматриваются переменные-отношения, которые являются переменными, значения которых — отношения. Однако в ней не используются переменные кортежей (т.е. переменные, значения которых— кортежи) или скалярные переменные (переменные, значения которых — скаляры). Единственный вид переменных, который включен в реляционную модель (и единственный вид переменных, который допустим в реляционных базах данных), — это именно переменные-отношения. Отсюда следует, что смешивание указателей и отношений представляет ЗНА ЧИТЕЛЬНОЕ отклонение от реляционной модели, вводя совершенно новый вид переменной. Как отмечалось в предыдущем разделе, мы бы могли доказать, что это серьезное нарушение концептуальной целостности реляционной модели.
В [24.21] и [25.11] можно найти дополнительные аргументы в поддержку этой позиции. А в [25.8]—[25.10] и [25.13] обсуждается важное связанное понятие существенности (конструкций данных в модели данных).
Из приведенного выше аргумента следует, что большинство (а может быть, и все) современных объектно-реляционных продуктов и даже те, в которых нет первой грубейшей ошибки, все же смешивают указатели и отношения, как это ранее объяснялось. Когда Кодд впервые определил реляционную модель, он умышленно исключил указатели. Вот цитата из его работы [5.2].
"С уверенностью можно считать, что все группы пользователей и, в частности, конечные пользователи, понимают действие сравнения значений, но относительно немногие понимают сложность использования указателей. Реляционная модель основывается на этом фундаментальном принципе... Обработка указателей в большей степени подвержена ошибкам, чем выполнение сравнения значений, даже если пользователям понятны все тонкости работы с указателями. "
Обработка указателей часто требует их кэширования, а это, как известно, процесс, в котором довольно легко допустить ошибку. Как уже отмечалось в главе 24, именно этот аспект объектных систем дает повод для критики, которая в некоторых случаях формулируется в выражениях, прямо утверждающих, что "такие системы выглядят, как избитый CODASYL".
Как возникла вторая грубейшая ошибка
В литературе трудно найти действительное объяснение второй грубейшей ошибки (имеются всякие технические объяснения, но есть основания полагать, что это вовсе не технические, а политические объяснения). Конечно, учитывая тот факт, что все объектные системы и языки включают указатели (в виде идентификаторов объектов), можно считать, что идея смешивания указателей и отношений почти наверняка возникла от желания сделать реляционные системы более "объектно-подобными", но такое "объяснение" просто передвигает проблему на другой уровень. Мы уже разъясняли, и, на наш взгляд, более чем достаточно, что объектные системы предоставляют пользователям указатели именно потому, что в них модель недостаточно отличается от реализации.
Поэтому мы можем только предположить, что главная причина широкого распространения идеи смешивания указателей и отношений, в первую очередь, состоит в том, что слишком мало пользователей понимают, почему указатели были исключены из отношений. Как говорил Сантаяна, те, кто не помнят прошлого, обречены повторить его. Мы совершенно согласны с точкой зрения Мориса Вилкеса, который писал следующее [25.35].
"Мне хотелось бы рассматривать множество относящихся к компьютерным наукам предметов непременно в историческом контексте... Студентам необходимо понимать, как возникла настоящая ситуация, что было опробовано, что работаю, а что нет и какой возможен прогресс за счет усовершенствования аппаратного обеспечения. Отсутствие исторического аспекта в их обучении приводит к тому, что студенты пытаются решить каждую проблему, исходя из начальных условий. Они способны предложить решения, которые можно было бы считать подходящими в прошлом. Вместо того чтобы опираться на своих предшественников, они пытаются идти в одиночку. "