Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Управл_данными / 17-ограничения

.pdf
Скачиваний:
20
Добавлен:
03.06.2015
Размер:
141.55 Кб
Скачать

Управление данными

SQL

Ограничения, индексы и триггеры

Зудилин А.Э. 2013

Ограничения

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

Реляционные базы данных хранят данные во многих таблицах, каждая из которых содержит данные, связанные с данными из других таблиц.

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

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

Большинство ограничений вводится в

определениях таблиц (с помощью операторов CREATE TABLE или ALTER TABLE).

2

Целостность на уровне ссылок

Проверки ссылочной целостности должны выполняться средствами СУБД по следующим причинам:

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

2)Придется принудительно ввести правила для выполнения операций UPDATE и DELETE.

3)Выполнение проверок на клиентской стороне — процесс, отнимающий много времени.

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

Большинство ограничений вводится в определениях таблиц (с помощью операторов CREATE TABLE или ALTER TABLE).

3

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

(PRIMARY KEY )

Первичный ключ — это особое ограничение, применяемое для того, чтобы значения в столбце (или наборе столбцов) были уникальными, ≠NULL и никогда не изменялись.

Другими словами, это столбец (или столбцы) таблицы, значения которого однозначно идентифицируют каждую строку таблицы.

Это облегчает непосредственное манипулирование отдельными строками и взаимодействие с ними.

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

4

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

1)Никакие две строки не могут иметь одно и то же значение первичного ключа (уникальность).

2)Каждая строка должна иметь какое-то значение первичного ключа. (В таких столбцах не должно быть разрешено использование значений NULL.)

3)Столбец, содержащий значения первичного ключа, не может быть модифицирован или обновлен.

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

5

Создание первичных ключей

Одним из способов определения первичных ключей является их создание вместе с таблицей:

CREATE TABLE Client

(

id CHAR(10) NOT NULL PRIMARY KEY, name CHAR(50) NOT NULL,

address CHAR(50) NULL

)

Второй способ:

ALTER TABLE Client ADD CONSTRAINT PRIMARY KEY(id)

Здесь в качестве первичного ключа определен тот же самый столбец, но использован синтаксис CONSTRAINT (т.е. ограничение)

6

Внешний ключ

(FOREIGN KEY )

Внешний ключ — это столбец одной таблицы, значения которого совпадают со значениями столбца, являющегося первичным ключом другой таблицы.

Внешние ключи - очень важная часть механизма обеспечения ссылочной целостности данных.

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

7

Определение внешнего ключа

CREATE TABLE Orders

(

order_num INTEGER NOT NULL PRIMARY KEY, order_date DATETIME NOT NULL,

cli_id CHAR(10) NOT NULL REFERENCES Client(id)

)

Это определение таблицы, использующее ключевое слово REFERENCES для утверждения того факта, что любое значение в столбце cli_id должно быть также и в столбце id таблицы Client.

Того же результата можно было бы добиться с использованием синтаксиса CONSTRAINT в операторе ALTER TABLE:

ALTER TABLE Orders ADD CONSTRAINT

FOREIGN KEY(cli_id) REFERENCES Client(id)

8

Внешние ключи препятствуют случайному удалению данных

Они помогают принудительно сохранять целостность ссылочных данных.

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

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

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

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

Например, если возможно каскадное удаление и имя клиента удаляется из таблицы Client, все связанные с его заказом строки удаляются автоматически.

9

Ограничения уникальности

Ограничения уникальности обеспечивают уникальность всех данных в столбце (или в наборе столбцов).

Такие столбцы похожи на первичные ключи, но имеются и важные отличия:

1)Таблица может содержать множество ограничений уникальности, но у нее должен быть только один первичный ключ.

2)Столбцы с ограничением уникальности могут содержать значения NULL.

3)Столбцы с ограничением уникальности можно модифицировать и обновлять.

4)Значения столбцов с ограничением уникальности можно использовать повторно.

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

Синтаксис ограничения на уникальность похож на синтаксис других ограничений: при определении таблицы указывается ключевое слово UNIQUE или отдельно используется ограничение CONSTRAINT.

10

Соседние файлы в папке Управл_данными