Скачиваний:
77
Добавлен:
02.05.2014
Размер:
2.54 Mб
Скачать

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].

"Мне хотелось бы рассматривать множество относящихся к компьютерным наукам предметов непременно в историческом контексте... Студентам необ­ходимо понимать, как возникла настоящая ситуация, что было опробовано, что работаю, а что нет и какой возможен прогресс за счет усовершенствова­ния аппаратного обеспечения. Отсутствие исторического аспекта в их обуче­нии приводит к тому, что студенты пытаются решить каждую проблему, ис­ходя из начальных условий. Они способны предложить решения, которые мож­но было бы считать подходящими в прошлом. Вместо того чтобы опираться на своих предшественников, они пытаются идти в одиночку. "

Соседние файлы в папке Дейт К. Дж. Введение в системы баз данных [7 издание]