Классика баз данных - статьи

       

Уровни языка


До детального погружения в язык Alpha в [5] обсуждается общий вопрос уровней языка: "Системы баз [данных] могут классифицироваться в соответствии с моделью данных, с которой взаимодействует пользователь, и [уровнями] языка, обеспечивающими это взаимодействие пользователя". Моделями данных могут быть деревья, сети или отношения; уровень языка может быть низким (Кодд также называет этот уровень "процедурным"), промежуточным (основанным на алгебре) или высоким (основанным на исчислении). Снова заметим, что Кодд относится к модели и операциям как к разным вещам! Более того, он использует термин "модель данных" в смысле модели данных конкретной базы данных, а не в общем смысле.

Должен обратить внимание на некоторое недоразумение, связанное с использованием термина "процедурный"; некоторые люди используют этот термин в смысле "императивный". Хотя процедурные языки, конечно, являются императивными, императивный язык не обязательно процедурен. Например, можно представить себе язык, основанный на реляционной алгебре Кодда (непроцедурный), хотя по стилю являющийся императивным.

Кодд рассматривает преимущества и недостатки трехуровневой организации языка и приводит аргументы в пользу той своей позиции, что уровень исчисления стоит над алгебраическим, который, в свою очередь, выше процедурного уровня. Он правильно замечает, что эти аргументы "особенно уместны по отношению к внутрисистемной совместимости и стандартизованности"; он также замечает, что уже представленные в [4] аргументы (относящиеся к преимуществам реляционной модели в целом) подчеркивают приводимые в [5] доводы в пользу уровня исчисления и алгебраического уровня перед процедурным.

Аргументы этого раздела статьи Кодда демонстрируют большой уровень предсказательности. Приведем краткую сводку этих аргументов.

Защитить пользователей от суматохи представлений: "Обеспечение концептуально четкой модели данных и мощного, концептуально четкого языка манипулирования относится не только к эстетике.
Если пользователи вынуждены выбирать и принимать решения относительно потенциально не требуемых деталей представления, последствия могут быть разнообразными и дорогостоящими … Это не только аргумент в пользу того, чтобы защитить пользователей от … низкоуровневых деталей физического представления; в равной степени этот аргумент против введения … надуманного, концептуально избыточного логического представления" (немного перефразировано). Эти аргументы сегодня настолько же сильны, действительны и правильны как во время их начального появления! Печально, что наша индустрия потеряла к ним внимание (конечно, я имею в виду бесчисленные попытки заменить реляционную модель некоторой разновидностью "объектной модели").

Описательное, а не конструктивное выражение намерений: Кодд характеризует исчисление как описательное, а алгебру как конструктивную, и утверждает, что первый подход предпочтительнее второго. Как я отмечал два месяца назад, я не полностью с этим согласен, но я совершенно солидарен с Коддом в том, что и исчисление, и алгебра лучше процедурного подхода.

Понимание и модификация программ: Этот аргумент следует из двух предыдущих. "Важна ясность намерений, [особенно] когда требуется изменить прикладную программу [и в особенности тогда, когда это изменение должно производиться людьми], не писавшими эту программу." В связи с этим Кодд предлагает сравнить работу по изменению порядка двух кванторов в Alpha-программе c той работой, которая требуется для изменения Codasyl-программы для достижения того же результата. Хороший пример!

Эволюционное развитие методов поиска: "Применение подхода исчисления позволяет успешно совершенствовать общие алгоритмы поиска, которые могут внедряться в системы баз данных без затрагивания программ пользователей." (Я бы сказал, что то же относится и к алгебраическому подходу.) Другими словами, избавление пользовательских программ от заботы об эффективности означает, что эти программы автоматически выигрывают от эволюционного -- и даже революционного -- развития технологии физического доступа к данным.

Эволюционное развитие структур данных: Этот аргумент связан с предыдущем и похож на него (он тоже означает, что пользовательские программы могут получить автоматический выигрыш от развития технологии физического хранения.) Здесь под "структурами данных" Кодд в действительности понимает структуры хранения.

Поддержка специализированных языков запросов и обновления: "Многим пользователям требуются … языки, специализированные для их приложений. Высокая стоимость поддержки [таких] языков … предполагает, что нужно распознать [настолько много общих функций, насколько это возможно] и запрограммировать их раз и навсегда … [Исследования в области процессоров запросов на естественных языках] показывают, что языки, основанные на исчислении, ведут к достижению этой цели." И снова это очень правильно. Кстати, собственная более поздняя работа Кодда над системой запросов на естественном языке Rendezvous добавляет вес этому аргументу.


Содержание раздела