Идентификаторы. Константы. Операторы. Типы данных. Ограничения

История SQL. История стандарта SQL. Уровни соответствия. Классы инструкций SQL

Реорганизация баз данных. Администратор баз данных. Словарь данных

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

Реконструирование включает, например, добавление нового типа элементов в структуру записи, изменение атрибута записи, изменение связей между отношениями.

Реформатирование – изменение методов доступа к данным, изменение форматов записи, способов кодирования записей, изменение функции хеширования идентификатора при произвольном методе доступа к данным.

Администратор базы данных – лицо или группа лиц, осуществляющих управление в базе данных и решающих все вопросы по реорганизации базы данных. К вопросам управления в базе данных относятся:

1) Определение необходимости реорганизации.

2) Состав изменения.

3) Способ реорганизации.

4) Время проведения реорганизации.

5) Определения уровня доступа к данным.

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

Словарь данных содержит информацию об источниках, форматах и взаимосвязях между данными, их описания, сведения о характере использования и распределения ответственности. Словарь сам по себе является базой «данных о данных», руководством по базе данных.

Назначение словаря:

1. Документирование данных.

2. Обеспечение эффективного взаимодействия между различными категориями разработчиков и пользователей.

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

- элемент данных должен иметь уникальное имя;

- групповой элемент данных (объект-сущность, отношение);

- выводимый элемент данных (формула для его определения);

- синонимы, омонимы;

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

 

 

Глава 5. Язык SQL. Стандарт языка SQL

 

В начале семидесятых годов был создан программный продукт для работы с реляционной моделью данных SEQUEL (Structured English Query Language) – структурированный английский язык для запросов, который в настоящее время называют SQL (Structured Query Language). Хотя компания IBM первая разработала теорию реляционных баз данных, первой на рынок с этой технологией вышла компания Oracle. Через некоторое время SQL завоевал на рынке популярность и привлек внимание Американского национального института по стандартизации (American National Standards Institute, ANSI), который в 1986, 1989, 1992, 1999 и 2003 годах выпустил стандарты языка SQL. Стандарт 1992 года имеет обозначение SQL92 или SQL2, стандарт 1999 года SQL99 или обозначают SQL3, сейчас используется промышленный стандарт SQL2003, который по сравнению с SQL3 имеет расширения, касающиеся объектно-ориентированных типов и базовых функций OLAP. Уровни соответствия стандарту были впервые предложены в 1992 году. Были введены три категории соответствия: начальный уровень, средний и полный (Entry, Intermediate, Full). Чтобы соответствовать стандарту производитель SQL должен был выпустить продукт не ниже уровня Entry.

В стандарте SQL2003 существуют семь основных классов инструкций - инструкции для установления связи, для управления, для работы с данными, для диагностики, для работы со схемами, для работы с сеансами, для работы с транзакциями. Постоянное развитие стандарта способствовало появлению среди разных производителей и платформ многочисленных диалектов SQL. Кроме перечисленных инструкций в диалектах обычно вводятся процедурные команды (условные, циклические, средства работы с массивами, переменными и другие). Наиболее распространены следующие диалекты: PL/SQL (Oracle), Transact/SQL (MS SQL Server), PL/pgSQL (PostgreSQL), SQLPL (DB2).

Отличительной особенностью языка SQL является тот факт, что это язык работы с множествами, представленными в реляционной форме. На основе теории множеств в терминологии ANSI используются кластеры, содержащие множество каталогов, каталоги содержат множество схем, схемы содержат множество объектов, объекты содержат подобъекты и так далее. Для доступа к подобъекту – полю таблицы нужно выполнить следующее разыменование: каталог.схема.объект.подобъект. Далее в следующих пунктах данного раздела пособия будут рассмотрены основные инструкции стандарта SQL2003, а также введены понятия основных объектов реляционных баз данных.

 

В этом разделе предполагается, что основные понятия языков программирования известны, главное внимание уделено именно особенностям языка SQL.

Идентификаторы SQL имеют длину 128 символов, могут содержать любые цифры, буквы и знак подчеркивания, должны начинаться с буквы, не могут содержать пробелов и специальных символов, должны быть уникальными в своей области видимости.

Константы могут быть числовые, строковые константы, константы даты/времени и булевские. Основные категории и типы данных приведены на рисунке 5.1.

Операторы сравнения: = (равно), <(меньше), >(больше), <= (меньше или равно), >= (больше или равно), <>, != (не равно), !< (не меньше),!> (не больше). Арифметические операторы: + (сложение), - (вычитание), * (умножение), / (деление), %(остаток целочисленного деления).

Логические операторы:

ALL – возвращает true, если весь набор true

AND – возвращает true, если все сравнения true

ANY – возвращает true, если хотя бы одно сравнение из набора дает true

Between – возвращает true, если операнд находится внутри диапазона

Exists – возвращает true, если подзапрос возвращает хотя бы одну строку

In – возвращает true, операнд равен одному выражению из списка или множеству строк, возвращаемых подзапросом

Like – возвращает true, если операнд совпадает с шаблоном

NOT – возвращает true, если отрицается значение булевого оператора

OR – возвращает true, если одно из сравнений возвращает true

SOME – возвращает true, если несколько сравнений из набора дают результат true

IS NULL – возвращает true, если операнд имеет неопределенное значение

NOT IS NULL –возвращает true, если операнд не имеет неопределенное значение.

Ограничение – средство, позволяющее автоматически обеспечить целостность данных, определяемое при создании таблиц. Различают четыре типа ограничений: ограничение первичного ключа (Primary Key), ограничение уникальности (Unique), ограничение внешнего ключа (Foreign Key), ограничение значением (Check). Ограничения могут приниматься на уровне столбцов и на уровне таблиц. Ограничения на уровне столбцов объявляются при создании столбца и применимы только к нему. Ограничения на уровне таблиц объявляется независимо от определения столбцов в конце инструкции создания таблиц Create Table и могут применяться к одному или нескольким столбцам таблицы. Ограничения определяются при создании таблицы или ее изменении.

<Ограничение>::= [CONSTRAINT [<имя ограничения>]]<тип ограничения>

[(<имя столбца>[,…])][<предикат>]

Ограничение первичного ключа (Primary Key) объявляется для одного или нескольких столбцов, значения которых однозначно идентифицируют каждую запись таблицы. В таблице может существовать только один первичный ключ. Столбцы первичного ключа можно определить на уровне столбца или таблицы, если первичный ключ состоит из нескольких столбцов. Столбцы первичного ключа не могут содержать типы данных BLOB,CLOB,NCLOB,ARRAY. Значения первичного ключа не могут иметь значения Null.

Категория Примеры типов данных и аббревиатура Описание
BINARY()двоичные BINARY LANGE OBJECT (BLOB) Хранятся двоичные строковые значения в шестнадцатеричном формате. Двоичные строки хранятся без ссылок на наборы и без ограничения длины.
BOOLEAN(булевы) BOOLEAN Хранятся сведения об истинности – TRUE или FALSE
CHARACNER Строковые типы (символьные) CHAR CHARACNER VARYNG(VARCHAR) Хранятся любые символы и строки фиксированной длины. Вариабельные типы хранят строки переменной длины, при этом автоматически удаляются замыкающие пробелы. Другие типы пробелы оставляют
  NATIONAL CHARACTER (NCHAR) NATIONAL CHARACNER VARYNG (NVARCHAR) Типы данных, связанные с национальными символами, разработаны для поддержки конкретных наборов символов, зависящих от реализации
  CHARACTER LANGE OBJECT (CLOB) Строковые типы больших размеров
  NACIONAL CHARACTER LANGE OBJECT (NCLOB) Строковые типы больших размеров с поддержкой конкретных наборов символов, зависящих от реализации
DATALINK (Связь с данными) DATALINK Определяет ссылку на файл или другой внешний источник
INTERVAL(интервал) INTERVAL Определяет набор временных значений или промежуток времени
COLLECTION(коллекция) ARRAY MULTISET Отсортированные коллекции фиксированной и несортированные коллекции данных переменной длины
NUMERIC(числовые) INTEGER (INT) SMALLINT BIGINT NUMERIC(p,c) DEC[IMAL](p,c) FLOAT(p,c) REAL DOUBLE PRECISTION Типы INT, BIGINT, SMALLINT хранят точные числовые значения с заранее заданной точностью (precision,p) и масштабом (scale,s), равным нулю. Типы NUMERIC,DEC хранят точные числовые значения с регулируемой точностью и масштабом. FLOAT хранит числовые значения с плавающей точкой с регулируемой точностью.
TEMPORAL(время) DATE TIME TIME WITH TIME ZONE TIMESTAM TIMESTAM WITH TIME ZONE Хранит дату или дату и время. Может включать сдвиг, соответствующий часовому поясу
XML XML Хранит данные формата XML

 

Рисунок 5.1 – Основные категории и типы данных SQL2003

 

Для составного первичного ключа комбинация значений во всех столбцах должна быть уникальна и не равна Null. Ограничение первичного ключа на уровне столбца выглядит так: <имя столбца> <тип> PIMARY KEY. Ограничение первичного ключа на уровне таблицы:

[CONSTRAINT [<имя ограничения>]] PRIMARY KEY (<имя столбца>[,…])

 

Ограничение внешнего ключа (Foreign Key) объявляется для одного или нескольких столбцов, ссылающихся на столбец с ограничением уникальности или первичного ключа другой таблицы. В одной таблице может быть несколько внешних ключей. Ограничение внешнего ключа может определяться на уровне столбца:

[CONSTRAINT [<имя ограничения>]]REFERENCES <имя связанной таблицы> [(<имя связанного столбца>)]

Ограничение внешнего ключа может задаваться на уровне таблицы:

CONSTRAINT [<имя ограничения>] FOREIGN KEY (<имя связанного столбца> [,…])REFERENCES <имя связанной таблицы> [(<имя связанного столбца>[,…])]

 

Ограничение уникальности (UNIQUE) является ограничением альтернативного ключа или потенциального ключа, то есть имеет уникальное значение, но не является первичным ключом. Ограничение уникальности на уровне столбца:

<имя столбца> <тип> UNIQUE

Ограничение уникальности на уровне таблицы:

[CONSTRAINT [<имя ограничения>]] UNIQUE (<имя столбца>[,…])

Ограничение значением (CHEK) выполняет сравнение значения поля, для которого введено ограничение, с определенным условием. Ограничение значением на уровне поля определяются следующим образом:

[CONSTRAINT [<имя ограничения>]] CHEK (<условие>)

 

 

5.3 SQL – инструкции для работы со схемами

Схема – это объект базы данных, являющийся набором объектов базы данных или, иначе, это контейнер объектов. К основным объектам реляционной базы данных относятся таблицы, хранимые процедуры и функции, виды, триггеры, пользовательские типы, пользовательские роли, схемы. Для создания объекта любого вида используется команда CREATE, для изменения объектов используется команда ALTER, для удаления объектов используется команда DROP. Команда создания таблиц выглядит следующим образом:

CREATE TABLE <имя таблицы> (<имя поля> <тип поля> [<ограничения на уровне поля>], [, …] ,<ограничение на уровне таблицы> [, …])

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

CREATE PROCEDURE <имя процедуры> [(<описание списка параметров>)] [<опции>] AS <тело процедуры>

Хранимая функция – хранимая процедура, возвращающая одно значение, сохраняемое в имени функции. Команда создания хранимой функции выглядит следующим образом:

CREATE FUNCTION <имя функции> [(<описание списка параметров>)] RETURNS <тип функции> [<опции>] AS <тело функции>

Вид (представление) – объект базы данных, представляющий собой виртуальный набор данных, созданный на основе выборки из базы данных. Вид создается для обеспечения защиты данных, для сокращения программного кода при выборке данных. Виды могут быть простыми, если они созданы на основе одной таблицы, составными, если они созданы на основе нескольких таблиц, и видами из вида, если при их создании используются ранее определенные виды. Команда создания вида выглядит следующим образом:

CREATE VIEW <имя вида> [<опции>] AS <команда выборки данных>

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

CREATE TRIGGER <имя триггера> [<вид триггера>] <команды, вызывающие срабатывание триггера> ON <имя таблицы> AS <тело триггера>

Пользовательский тип – объект базы данных, определяющий ограничения на уровне домена данных, созданный на основе стандартного типа данных. Команда создания пользовательского типа выглядит следующим образом:

CREATE TYPE <имя типа> AS <имя стандартного типа> [<атрибуты>]

Пользовательская роль – набор поименованных прав пользователей. Пользовательская роль используется для реализации в базах данных системы безопасности. Команда создания пользовательской роли выглядит следующим образом:

CREATE ROLE <имя роли> AS <список разрешений>

Команда создания схемы данных выглядит следующим образом:

CREATE SCHEMA <имя схемы> AS <список объектов>

Каждая команда работы с объектами имеет в различных диалектах языка SQL свои синтаксические особенности.