Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
курсовая работа / bd / базы данных2222.rtf
Скачиваний:
241
Добавлен:
17.02.2014
Размер:
19.41 Mб
Скачать

Операторы ddl

В данной лекции мы рассмотрим основные типы данных определённых стандартом SQL, а также операторы группы DDL, необходимые для создания базы данных с точки зрения разработчика. Здесь намеренно не рассматриваются вопросы администрирования БД, разграничения прав доступа и настройки быстродействия. Отчасти это обусловлено вводным характером этой лекции, отчасти тем, что эти разделы SQL наиболее подвержены влияниям со стороны разработчиков различных СУБД, и, как следствие, сильно отличаются в различных исполнениях.

В процессе создания БД обычно используются следующие виды операторов:

1) Создание файла БД.

2) Создание (определение) таблиц.

3) Удаление таблиц.

4) Модификация структуры таблиц.

Типы данных

Стандартом SQL2 определены следующие основные типы данных:

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

Создание файла бд

В СУБД, установленных в сети и предназначенных для использования большим количеством пользователей, за создание новых баз данных отвечает только администратор(ы). Если вы работаете с базой данных на персональном компьютере, то, скорее всего, являетесь пользователем, разработчиком и администратором в одном лице. В стандарте SQL1 содержится спецификация, описывающая язык задания структуры файла БД, но не указывается способ создания этого файла. Это объясняется тем, что в процессе эволюции различных СУБД их разработчики выработали различные подходы к этому вопросу. И тем не менее, на практике, для создания и удаления баз данных используется пара инструкций CREATE DATABASE/DROP DATABASE.

Создание (определение) таблиц

Данный блок представлен по существу одним оператором: CREATE TABLE.

Синтаксическая диаграмма (рис. 1) иллюстрирует все возможные варианты формирования строки. Она может показаться несколько громоздкой, поскольку требуется указать много элементов и параметров для них. Более того, некоторые параметры в одних СУБД присутствуют, а в других нет. На практике же создать таблицу относительно несложно. После выполнения инструкции в БД появляется новая таблица с именем заданным в поле «имя_таблицы» (см. Диаграмму 1.).

Диаграмма 1.

Определение столбцов

Определение столбцов таблицы задаётся выражением «определение_столбца», которое в свою очередь состоит из:

  • «имя_столбца», которое используется для обращения к его содержимому и должно быть уникальным в рамках определения данной таблицы.

  • «тип_данных», допустимый стандартом SQL1 или SQL2 тип данных, который может храниться в этом столбце.

  • «значение» Не обязательно его указывать. Значение по умолчанию, задаваемое после ключевого слова DEFAULT, необязательное, которое присваивается столбцу если в инструкции INSERT не указано значение для него.

  • Ключевое слово NOT NULL указывающее, что значение в данном должно быть обязательно определено.

Стандарт SQL2 позволяет указывать в определении столбца несколько дополнительных элементов, с помощью которых можно ограничить значения данных в столбце, а также установить, что столбец должен содержать уникальные значения либо являться первичным или внешним ключом. На диаграмме это представлено как поле «определение_ограничения_таблицы» и задаётся ключевым словом CONSTRAINT, после которого указывается название внешнего ключа (требуется для того, что бы с ним можно было потом манипулировать: удалять или изображать в сообщениях об ошибках).

Далее следуют следующие возможные варианты ограничений:

-- «определение_первичного_ключа»:

  • задаётся при помощи ключевых слов PRIMARY KEY и следующего за ними перечисления столбцов, составляющих первичный ключ, в круглых скобках через запятую.

-- «определение_внешнего_ключа»:

  • задаётся при помощи ключевых слов FOREIGN KEY и следующего за ними перечисления столбцов данной таблицы, составляющих внешний ключ, в круглых скобках через запятую и указания на таблицу, первичный ключ которой(или его часть) используется для связи при помощи ключевого слова REFERENCES и следующего за ним имени таблицы. При необходимости можно указать, какие именно столбцы первичного ключа связываемой таблицы будут использоваться. Типы данных взаимоувязываемых колонок должны совпадать.

  • Возможно также:

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

- определение поведения данной таблицы в случаях удаления или изменение значений колонок с соответствующим первичным ключом в связанной таблице соответственно ON DELETE (при удалении) или ON UPDATE (изменении): либо CASCADE (удалять все записи с таким внешним ключом из данной таблицы), либо SET NULL (устанавливать в неопределённое значение), либо SET DEFAULT (устанавливать в значение по умолчанию), либо NO ACTION (никаких действий).

-- «условие_уникальности»

  • Задаётся ключевым словом UNIQUE и перечислением набора из одной и более колонок, сочетание которых должно оставаться в таблице уникальным, в круглых скобках, через запятую.

-- «условие_на_значение»

Задаётся ключевым словом CHECK и булевским выражением, задающим ограничения на значения в строке таблицы. Например, предположим, что в таблице есть такие колонки: DATE_BEG и DATE_END, -- отображающие дату начала и дату окончания какого-то процесса во времени. Логично, что дата начала не должна быть больше даты окончания, поэтому можно запретить вставку в нашу таблицу таких строк , где это условие нарушено. Выражение ограничения будет выглядеть в таком случае: CHECK ( DATE_BEG < DATE_END).

Возможность нарушить ограничение в процессе изменения данных (т.е. если в процессе изменения существующих в таблице строк данное ограничение будет нарушено, ошибки не возникнет до выполнения команды COMMIT), задаётся ключевыми словами DEFERRABLE (можно нарушить, до выполнения команды COMMIT) или NOT DEFERRABLE (нельзя). Также отдельно можно указать для вновь вставляемых строк возможность или невозможность нарушения этого ограничения изначально до команды COMMIT, которые задаются соответственно ключевыми словами INITIALLY DEFERRED (можно вставить строку, нарушив это ограничение, но только до команды COMMIT) и INITIALLY IMMEDIATE (нельзя вставить строку, нарушающую это ограничение).

Соседние файлы в папке bd