Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции БД.doc
Скачиваний:
34
Добавлен:
23.09.2019
Размер:
1.93 Mб
Скачать

Начальные понятия

Язык, предназначенный для работы с реляционными базами данных – SQL (язык структурных запросов – Structured Query Language) – был призван продемонстрировать возможность эффективной работы с множествами, представленными отношениями. Возможности языка должны быть достаточными для реализации всех операторов реляционной алгебры. Язык должен быть непроцедурным – предполагалось, что таким образом облегчается работа пользователя, не умеющего программировать.

Большинству этих задач разработанный язык отвечает, однако не всем и не в той степени, как рассчитывали авторы. Во-первых, непонятно, какой смысл вкладывался в термин «структурный». То, что получилось, имеет очень слабое отношение к устоявшемуся понятию «структурное программирование». Далее, может ли язык работать с множествами? Да, и языковые средства для этого достаточно хороши. Однако об эффективности, особенно на первых порах внедрения языка, следует говорить осторожно. Первые реализации были столь громоздки, что при появлении СУБД на персональных ЭВМ об SQL даже речи не было. Более того, в течение значительного периода времени его считали умирающим языком и немного жалели о его гибели. Автору в это время приходилось читать лекции по базам данных, на которых слушатели отдавали дань уважения этому языку, но относились к нему как к исторической реликвии. Но все-таки языку удалось устоять, чему в немалой степени способствовал рост производительности ЭВМ, а также более эффективные методы реализации языка. Кроме того, уже существовал большой контингент специалистов по базам данных, владеющим языком и, что очень важно, действовал стандарт SQL.

Возвращаясь к оценке языка, заметим, что он действительно позволяет реализовать все операторы реляционной алгебры, но форма представления заметно отличается от алгебраических выражений. И, наконец, непроцедурность. В то время, когда создавался язык, непроцедурные языки были очень модными. Считалось, что запись решения задач естественно представлять в виде непроцедурных соотношений, что избавляло от необходимости перечислять в нужной последовательности действия, приводящие к результату. Предполагалось, что любой постановщик задачи в состоянии сформулировать, что же он хочет получить. Значит, если ему предоставить адекватный язык, он сможет достаточно легко записать нужные соотношения. Практика показала, что это далеко не так. Порой пользователь лучше объясняет, что он делает, чем зачем. Даже для специалистов непроцедурность зачастую порождает значительные трудности, так как сложный запрос к базе данных трудно понять и еще труднее отладить: он обычно не делится на простые операторы. Да и переход от привычного процедурного языка к непроцедурному тоже не так прост.

Стандарт ansi

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