Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ответы к экзамену по БД (ВФ) / !Все ответы по БД v0.2.13.docx
Скачиваний:
189
Добавлен:
10.05.2014
Размер:
3.32 Mб
Скачать

13. Язык определения данных в реляционной модели данных. Основные возможности. Примеры.

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

Возможности:

  • Создание домена

  • Создание отношения

  • Определение ограничений целостности

Соответствие между компонентами реляционной модели данных (РМД) и реляционной базы данных (РБД):

Структурный компонент РМД

Элемент РБД

Домен

Тип данных

Отношение

Таблица

Атрибут

Колонка таблицы

Кортеж отношения

Строка таблицы

Ограничения целостности в реляционной базе данных

Тип ограничения целостности

Представление в SQL

Первичный ключ

PRIMARY KEY

Уникальность значения

UNIQUE

Обязательность значения

NULL или NOT NULL

Допустимость значения

CHECK

Ссылочные ограничения

FOREIGN KEY

Основные предложения DDL в SQL:

CREATE тип_объекта – создать соответствующий объект БД,

ALTER тип_объекта – изменить соответствующий объект БД,

DROP тип_объекта – удалить указанный объект БД.

Типы объектов: DATABASE, INDEX, TABLE, TRIGGER, VIEW, PROCEDURE и другие

Создание таблицы: CREATE TABLE имя_таблицы (

имя_колонки тип_данных ограничения_на_колонку,

табличное_ограничение,

)

Имя_колонки (имя_таблицы): любое имя (длина до 128 символов, символы A-Z a-z 0-9 _, должен начинаться с буквы, не должен содержать пробелы). Имя не чувствительно регистру, т.е. AbCdE то же самое, что ABCDE;

Тип_данных: тип данных, выбор зависит от конкретной СУБД (примеры: boolean, char, varchar, decimal, time, date, integer)

Ограничения_на_колонку:

  • CONSTRAINT - необязательное ключевое слово, указывающее на начало определения ограничения PRIMARY KEY, NOT NULL, UNIQUE, FOREIGN KEY или CHECK. CONTRAINT <name> просто позволяет задать ограничению имя. Но можно задавать и без него.

  • PRIMARY KEY – колонка является первичным ключом ;

  • NULL/NOT NULL – может быть пустой/не может быть пустой,

  • UNIQUE – значение колонки в каждой строке таблицы должно быть уникальным;

  • CHECK – проверка на допустимость, если указывается в колонке, то может быть использовано только имя колонки, если в рамках таблицы – то любые колонки в рамках таблицы. Не может ссылаться на другие таблицы.

  • FOREIGN KEY REFERENCES.. (рассмотрено ниже).

  • IDENTITY (для колонок) - создает в таблице столбец идентификаторов (автоинкрементер). Синтаксис: IDENTITY[(seed , increment) ]: seed – значение, присваиваемое самой первой строке, добавленной в таблицу; increment - Значение приращения, которое прибавляется к значению идентификатора предыдущей загруженной строки. Необходимо указывать либо оба аргумента (и seed, и increment), либо не указывать ни один из них .Если ничего не указано, применяются значения по умолчанию (1,1). Такой столбец может быть только один.

  • [WITH] DEFAULT - указывает значение, присваиваемое столбцу в случае отсутствия явно заданного значения при вставке. Определения DEFAULT могут применяться к любым столбцам, кроме имеющих тип timestamp или обладающих свойством IDENTITY. Если для столбца определяемого пользователем типа указано значение по умолчанию, этот тип должен поддерживать неявное преобразование выражения constant_expression в определяемый пользователем тип. Определения DEFAULT удаляются, когда таблица удаляется из памяти. В качестве значения по умолчанию могут использоваться только константы (например, символьные строки), скалярные функции (системные, определяемые пользователем или функции CLR) или значение NULL.

Ссылочное ограничение на колонку:

… REFERENCES родительская_таблица (имя_PK в родительской таблице) ON DELETE реакция ON UPDATE реакция

Табличное ссылочное ограничение:

FOREIGN KEY (список_колонок_таблицы) REFERENCES родительская_таблица (PK из родительской таблицы) ON DELETE реакция ON UPDATE реакция

Реакции:

  • RESTRICT (NO ACTION) – если в родительской таблице удаляется (обновляется) строка, которая связана с дочерней таблице, где указана эта реакция, то будет выдана ошибка, что существуют ссылки на дочерние таблицы;

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

  • SET NULL – при удалении записи в родительской таблице: запись в родительской таблице удаляется, а значение колонки-внешнего_ключа дочерних таблиц, которые были с ней связаны, примут значение NULL. Для выполнения этого ограничения внешние ключевые столбцы должны допускать значения NULL.

Пояснение по реакциям. В базе данных AdventureWorks2012 таблица ProductVendor имеет ссылочную связь с таблицей Vendor. Внешний ключ ProductVendor.BusinessEntityID ссылается на первичный ключ Vendor.BusinessEntityID.

Если над строкой в таблице Vendor выполняется инструкция DELETE и для внешнего ключа ProductVendor.BusinessEntityID указано действие ON DELETE CASCADE, то компонент Database Engine проверит наличие одной или нескольких зависимых записей в таблице ProductVendor. Если такие существуют, то кроме строки в таблице Vendor будут удалены также и все зависимые строки из таблицы ProductVendor.

В противном случае, если задан параметр NO ACTION, компонент Database Engine выдает ошибку и производит откат операции по удалению строки из таблицы Vendor, если в таблице ProductVendor существует хотя бы одна строка, ссылающаяся на нее.

Пример создания связи из трёх таблиц:

CREATE TABLE P(

P_ID INT NOT NULL CONSTRAINT P_PK PRIMARY KEY, --1

PNAME VARCHAR(20) NOT NULL CONSTRAINT P_UQ_01 UNIQUE,--2

PRICE DECIMAL(6,0) NOT NULL CONSTRAINT P_CH_01

CHECK(PRICE > 0) --3

);

CREATE TABLE S(

S_ID INT NOT NULL,

SNAME VARCHAR(30) NOT NULL,

ADDRESS VARCHAR(80),

CONSTRAINT S_PK PRIMARY KEY(S_ID) -- 4

);

CREATE TABLE SP(

S_ID INT NOT NULL CONSTRAINT SP_FK_01 REFERENCES S, --5

P_ID INT NOT NULL,

QTY INT NOT NULL CONSTRAINT SP_CH_01 CHECK(QTY > 0),

CONSTRAINT SP_PK PRIMARY KEY(S_ID, P_ID), --6

CONSTRAINT SP_FK_02 FOREIGN KEY(P_ID) REFERENCES P --7

);

1 – ограничения первичного ключа и обязательности значения;

2 – ограничения уникальности и обязательности значения;

3 – обязательность значения и условие: значение атрибута должно быть строго положительным.

4 – ограничения первичного ключа на таблицу;

5 – внешний ключ (ограничения на колонку)

6 – ограничение первичного ключа (ограничение на таблицу)

7 –определяется внешний ключ (ограничение на таблицу).

Удаление таблицы: DROP TABLE имя_таблицы. Нельзя удалить родительскую таблицу, если существует хотя бы одна связанная с ней дочерняя таблица. Пример DROP TABLE: drop table SP;

Изменение параметров таблицы: ALTER TABLE имя_таблицы операция [операция …]. Позволяет выполнить следующие действия:

  • вести новый столбец в таблицу: ADD [ COLUMN ] определение_колонки. определение_колонки тоже что и в CREATE TABLE. Пример: ALTER TABLE EQUIPMENT ADD COLUMN Equip_QTY SMALLINT NOT NULL WITH DEFAULT 1;

  • удалить столбец из таблицы: ADD [ COLUMN ] имя_колонки. Пример: ALTER TABLE EQUIPMENT DROP COLUMN Equip_QTY.;

  • ввести новое ограничение таблицы: ADD [CONSTRAINT имя_ограничения] ограничение. Ограничение задается точно так же, как и табличное ограничение в предложении CREATE TABLE. Пример: ALTER TABLE EMPLOYEE ADD CONSTRAINT Revenue CHECK(Salary + Comm > 30000);

  • удалить ограничение таблицы: DROP тип_ограничения имя_ограничения тип_ограничения: FOREIGN KEY, UNIQUE, CHECK, CONSTRAINT. Пример: ALTER TABLE EMPLOYEE DROP CONSTRAINT Revenue;

  • изменить характеристики столбцов: ALTER COLUMN имя_колонки тип_данных. Пример 1: ALTER TABLE EQUIPMENT ALTER COLUMN Equip_Desc VARCHAR(50) – изменится длина строки в колонке на 50;

  • удалить ограничение столбцов: ALTER COLUMN имя_колонки DROP ограничение. Пример: ALTER COLUMN имя_колонки DROP IDENTITY – удаляет для указанной колонки установленный для нее атрибут автоинкрементного значения.