Языковые средства современных СУБД

Некоторые термины и определения, используемые при работе с базами данных

База данных (БД, database) - поименованная совокупность структурированных данных, относящихся к определенной предметной области.

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

Система управления базами данных (СУБД) - комплекс программных и языковых средств, необходимых для создания и модификации базы данных, добавления, модификации, удаления, поиска и отбора информации, представления информации на экране и в печатном виде, разграничения прав доступа к информации, выполнения других операций с базой.

Реляционная БД - основной тип современных баз данных. Состоит из таблиц, между которыми могут существовать связи по ключевым значениям.

Таблица базы данных (table)- регулярная структура, которая состоит из однотипных строк (записей, records), разбитых на столбцы (поля, fields).

В теории реляционных баз данных синоним таблицы - отношение (relation), в котором строка называется кортежем, а столбец называется атрибутом.

В концептуальной модели реляционной БД аналогом таблицы является сущность (entity), с определенным набором свойств - атрибутов, способных принимать определенные значения (набор допустимых значений - домен).

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

Первичный ключ (primary key) - главный ключевой элемент, однозначно идентифицирующий строку в таблице. Могут также существовать альтернативный (candidate key) и уникальный (unique key) ключи, служащие также для идентификации строк в таблице.

В реляционной теории первичный ключ - минимальный набор атрибутов, однозначно идентифицирующий кортеж в отношении.

Связь - функциональная зависимость между объектами. В реляционных базах данных между таблицами устанавливаются связи по ключам, один из которых в главной (parent, родительской) таблице - первичный, второй - внешний ключ - во внешней (child, дочерней) таблице, как правило, первичным не является и образует связь "один ко многим" (1:N). В случае первичного внешнего ключа связь между таблицами имеет тип "один к одному" (1:1). Информация о связях сохраняется в базе данных.

Внешний ключ (foreign key) - ключевой элемент подчиненной (внешней, дочерней) таблицы, значение которого совпадает со значением первичного ключа главной (родительской) таблицы.

Ссылочная целостность данных (referential integrity) - набор правил, обеспечивающих соответствие ключевых значений в связанных таблицах.

Хранимые процедуры (stored procedures) - программные модули, сохраняемые в базе данных для выполнения определенных операций с информацией базы.

Триггеры (triggers) - хранимые процедуры, запускаемые автоматически при наступлении определенных событий в БД (например, изменении, удалении, добавлении кортежей).

Объект (object) - элемент информационной системы, обладающий определенными свойствами (properties) и определенным образом реагирующий на внешние события (events).

Репликация базы данных - создание копий базы данных (реплик), которые могут обмениваться обновляемыми данными или реплицированными формами, отчетами или другими объектами в результате выполнения процесса синхронизации.

Транзакция - изменение информации в базе в результате выполнения одной операции или их последовательности, которое должно быть выполнено полностью или не выполнено вообще. В СУБД существуют специальные механизмы обеспечения транзакций.

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

История развития SQL

SQL (Structured Query Language) — Структурированный Язык Запросов — стандартный язык запросов по работе с реляционными БД. Язык SQL появился после реляционной алгебры, и его прототип был разработан в конце 70-х годов в компании IBM Research. Он был реализован в первом прототипе реляционной СУБД фирмы IBM System R. В дальнейшем этот язык применялся во многих коммерческих СУБД и в силу своего широкого распространения постепенно стал стандартом "де-факто" для языков манипулирования данными в реляционных СУБД.

Первый международный стандарт языка SQL был принят в 1989 г. (далее мы будем называть его SQL/89 или SQL1). Иногда стандарт SQL1 также называют стандартом ANSI/ISO, и подавляющее большинство доступных на рынке СУБД поддерживают этот стандарт полностью.

В конце 1992 г. был принят новый международный стандарт языка SQL, который в дальнейшим будем называть SQL/92 или SQL2. В настоящий момент большинство СУБД удовлетворяют стандарту SQL2.

В 1999 году появился новый стандарт, названный SQL3. В SQL3 введены новые типы данных, при этом предполагается возможность задания сложных структурированных типов данных, которые в большей степени соответствуют объектной ориентации. Добавлен раздел, который вводит стандарты на события и триггеры, которые ранее не затрагивались в стандартах, хотя широко использовались в коммерческих СУБД. В рамках управления транзакциями произошел возврат к старой модели транзакций, допускающей точки сохранения (savepoints), и возможность указания в операторе отката ROOLBACK точек возврата позволит откатывать транзакцию не в начало, а в промежуточную ранее сохраненную точку.

В настоящее время еще существуют стандарты SQL:2003, SQL:2008.

Структура SQL

В отличие от реляционной алгебры, где были представлены только операции запросов к БД, SQL является полным языком, в нем присутствуют не только операции запросов, но и операторы, соответствующие Data Definition Language (DDL) — языку описания данных.

Таблица 2. Структура SQL.

Операторы определения данных DDL
Оператор Смысл Действие
CREATE TABLE Создать таблицу Создает новую таблицу в БД
DROP TABLE Удалить таблицу Удаляет таблицу из БД
ALTER TABLE Изменить таблицу Изменяет структуру существующей таблицы или ограничения целостности, задаваемые для данной таблицы
CREATE VIEW Создать представление Создает виртуальную таблицу, соответствующую некоторому SQL-запросу
ALTER VIEW Изменить представление Изменяет ранее созданное представление
DROP VIEW Удалить представление Удаляет ранее созданное представление
CREATE INDEX Создать индекс Создает индекс для некоторой таблицы для обеспечения быстрого доступа по атрибутам, входящим в индекс
DROP INDEX Удалить индекс Удаляет ранее созданный индекс
Операторы манипулирования данными Data Manipulation Lanquaqe (DML)
Оператор Смысл Действие
DELETE Удалить строки Удаляет одну или несколько строк, соответствующих условиям фильтрации, из базовой таблицы. Применение оператора согласуется с принципами поддержки целостности, поэтому этот оператор не всегда может быть выполнен корректно, даже если синтаксически он записан правильно
INSERT Вставить строку Вставляет одну строку в базовую таблицу. Допустимы модификации оператора, при которых сразу несколько строк могут быть перенесены из одной таблицы или запроса в базовую таблицу
UPDATE Обновить строку Обновляет значения одного или нескольких столбцов в одной или нескольких строках, соответствующих условиям фильтрации
Язык запросов Data Query Lanquaqe (DQL)
Оператор Смысл Действие
SELECT Выбрать строки Оператор, заменяющий все операторы реляционной алгебры и позволяющий сформировать результирующее отношение, соответствующее запросу
Средства управления транзакциями
Оператор Смысл Действие
COMMIT Завершить транзакцию Завершить комплексную взаимосвязанную обработку информации, объединенную в транзакцию
ROLLBACK Откатить транзакцию Отменить изменения, проведенные в ходе выполнения транзакции
SAVEPOINT Сохранить промежуточную точку выполнения транзакции Сохранить промежуточное состояние БД, пометить его для того, чтобы можно было в дальнейшем к нему вернуться
Средства администрирования данных
Оператор Смысл Действие
ALTER DATABASE Изменить БД Изменить набор основных объектов в базе данных, ограничений, касающихся всей базы данных
ALTER DBAREA Изменить область хранения БД Изменить ранее созданную область хранения
ALTER PASSWORD Изменить пароль Изменить пароль для всей базы данных
CREATE DATABASE Создать БД Создать новую базу данных, определив основные параметры для нее
CREATE DBAREA Создать область хранения Создать новую область хранения и сделать ее доступной для размещения данных
DROP DATABASE Удалить БД Удалить существующую базу данных (только в том случае, когда вы имеете право выполнить это действие)
DROP DBAREA Удалить область хранения БД Удалить существующую область хранения (если в ней на настоящий момент не располагаются активные данные)
GRANT Предоставить права Предоставить права доступа на ряд действий над некоторым объектом БД
REVOKE Лишить прав Лишить прав доступа к некоторому объекту или некоторым действиям над объектом
Программный SQL
Оператор Смысл Действие
DECLARE Определяет курсор для запроса Задает некоторое имя и определяет связанный с ним запрос к БД, который соответствует виртуальному набору данных
OPEN Открыть курсор Формирует виртуальный набор данных, соответствующий описанию указанного курсора и текущему состоянию БД
FETCH Считать строку из множества строк, определенных курсором Считывает очередную строку, заданную параметром команды из виртуального набора данных, соответствующего открытому курсору
CLOSE Закрыть курсор Прекращает доступ к виртуальному набору данных, соответствующему указанному курсору
PREPARE Подготовить оператор SQL к динамическому выполнению Сгенерировать план выполнения запроса, соответствующего заданному оператору SQL
EXECUTE Выполнить оператор SQL, ранее подготовленный к динамическому выполнению Выполняет ранее подготовленный план запроса

В коммерческих СУБД набор основных операторов расширен. В большинство СУБД включены операторы определения и запуска хранимых процедур и операторы определения триггеров.

Типы данных

В языке SQL/89 поддерживаются следующие типы данных:

ü CHARACTER(n) или CHAR(n) — символьные строки постоянной длины в n символов. При задании данного типа под каждое значение всегда отводится n символов, и если реальное значение занимает менее, чем n символов, то СУБД автоматически дополняет недостающие символы пробелами.

ü NUMERIC[(n,m)] — точные числа, здесь n — общее количество цифр в числе, m — количество цифр слева от десятичной точки.

ü DECIMAL[(n,m)] — точные числа, здесь n — общее количество цифр в числе, m — количество цифр слева от десятичной точки.

ü DEC[(n,m)] — то же, что и DECIMAL[(n,m)].

ü INTEGER или INT — целые числа.

ü SMALLINT — целые числа меньшего диапазона.

ü FLOAT[(n)] — числа большой точности, хранимые в форме с плавающей точкой. Здесь n — число байтов, резервируемое под хранение одного числа. Диапазон чисел определяется конкретной реализацией.

ü REAL — вещественный тип чисел, который соответствует числам с плавающей точкой, меньшей точности, чем FLOAT.

ü DOUBLE PRECISION специфицирует тип данных с определенной в реализации точностью большей, чем определенная в реализации точность для REAL.

В стандарте SQL92 добавлены следующие типы данных:

ü VARCHAR(n) — строки символов переменной длины.

ü NCHAR(N) — строки локализованных символов постоянной длины.

ü NCHAR VARYING(n) — строки локализованных символов переменной длины.

ü BIT(n) — строка битов постоянной длины.

ü BIT VARYING(n) — строка битов переменной длины.

ü DATE — календарная дата.

ü TIMESTAMP(точность) — дата и время.

ü INTERVAL — временной интервал.

Большинство коммерческих СУБД поддерживают еще дополнительные типы данных, которые не специфицированы в стандарте. Так, например, практически все СУБД в том или ином виде поддерживают тип данных для представления неструктурированного текста большого объема. Называются эти типы по-разному, например в ORACLE этот тип называется LONG, в DB2 — LONG VARCHAR, в SYBASE и MS SQL Server — TEXT.

В операторах SQL могут использоваться выражения, которые строятся по стандартным правилам применения знаков арифметических операций сложения (+), вычитания (-), умножения (*) и деления (/). Однако в ряде СУБД операция деления (/) интерпретируется как деление нацело, поэтому при построении сложных выражений вы можете получить результат, не соответствующий традиционной интерпретации выражения. В стандарт SQL2 включена возможность выполнения операций сложения и вычитания над датами. В большинстве СУБД также определена операция конкатенации над строковыми данными, обозначается она, к сожалению, по-разному. Так, например, для DB2 операция конкатенации обозначается двойной вертикальной чертой, в MS SQL Server — знаком сложения (+), поэтому два выражения, созданные в разных СУБД, эквивалентны:

'Mr./Mrs. ' || NAME || ' ' LAST_NAME'Mr./Mrs. ' + NAME + ' ' LAST_NAME

В стандарте SQL1 не были определены встроенные функции, однако в большинстве коммерческих СУБД такие функции были реализованы, и в стандарт SQL2 уже введен ряд стандартных встроенных функций:

ü BITLENGTH(строка) — количество битов в строке;

ü CAST(значение AS тип данных) — значение, преобразованное в заданный тип данных;

ü CHARLENGTH(строка) — длина строки символов;

ü CONVERT(строка USING функция) — строка, преобразованная в соответствии с указанной функцией;

ü CURRENTDATE — текущая дата;

ü CURRENTTIME(точность) — текущее время с указанной точностью;

ü CURRENTTIMESTAMP(точность) — текущие дата и время с указанной точностью;

ü LOWER(строка) — строка, преобразованная к нижнему регистру;

ü OCTEDLENGTH(строка) — число байтов в строке символов;

ü POSITION( первая строка IN вторая строка) — позиция, с которой начинается вхождение первой строки во вторую;

ü SUBSTRING(строка FROM n FOR длина) — часть строки, начинающаяся с n-го символа и имеющая указанную длину;

ü TRANSLATE(строка USING функция) — строка, преобразованная с использованием указанной функции;

ü TRIM(BOTH символ FROM строка) — строка, у которой удалены все первые и последние символы;

ü TRIM(LEADING символ FROM строка) — строка, в которой удалены все первые указанные символы;

ü TRIM(TRAILING символ FROM строка) — строка, в которой удалены последние указанные символы;

ü UPPER(строка) — строка, преобразованная к верхнему регистру.

Наши рекомендации