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

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

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

Ограничения на значения столбца

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

Наиболее часто используемыми из них являются следующие:

1)Ограничение максимального и минимального значений — например, для предотвращения появления заказов на 0 (нуль) предметов (хотя 0 и является допустимым числом).

2)Указание диапазонов — например, ограничение на то, чтобы дата отгрузки наступала позже или соответствовала текущей дате и не отстояла от нее больше, чем на год.

3)Разрешение только определенных значений — например, разрешение вводить в поле "пол" только буквы М или Ж.

Типы данных ограничивают типы данных, которые могут храниться в столбце. Ограничения на значения столбца предъявляют дополнительные требования уже к данным определенного типа.

11

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

CREATE TABLE Orderltems (

quantity INTEGER NOT NULL CHECK(quantity > 0), )

12

Индексы

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

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

Предположим, что вы хотите найти вхождения слова индекс в книге.

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

Хотя такой способ и применим, это, очевидно, неработоспособное решение.

Чем больше объем текста, в котором нужно провести поиск, тем больше времени требуется на выявление мест вхождения нужных данных.

Именно поэтому книги снабжают предметными указателями.

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

Чтобы найти термин “индекс”, в предметном указателе следует определить, на каких страницах он встречается.

13

Что делает предметный указатель эффективным средством поиска?

- тот факт, что он правильно отсортирован.

Трудность поиска слов в книге обусловлена не тем, что ее объем может быть слишком велик, скорее это вызвано тем, что ее содержимое не отсортировано в алфавитном порядке.

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

Индексы баз данных работают весьма похожим образом.

14

Данные первичного ключа всегда отсортированы — СУБД делает это автоматически.

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

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

Что произойдет, например, если вы захотите сделать выборку всех клиентов, проживающих в определенном городе?

Решение этой проблемы состоит в использовании индекса.

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

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

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

15

Прежде чем создавать множество индексов, примите во внимание следующее:

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

2)Для хранения данных индекса требуется много места на диске.

3)Не все данные подходят для индексации.

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

4)Индексы используются для фильтрации и сортировки данных.

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

5)В качестве индекса можно определить несколько столбцов (например, с названием области и названием города).

Такой индекс можно использовать, только если данные будут отсортированы в порядке "область плюс город".

6)Не существует твердых правил относительно того, что и когда следует индексировать.

16

Создание и удаление индекса

Индексы создаются с помощью оператора CREATE INDEX (синтаксис которого весьма различен для разных СУБД).

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

CREATE INDEX prod_name_ind ON PRODUCTS (prod_name)

Каждый индекс должен иметь уникальное имя. В данном случае оно определено как prod_name_ind после ключевых слов CREATE INDEX.

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

Удаление индекса:

DROP INDEX prod_name_ind

17

Триггеры

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

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

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

В отличие от хранимых процедур (которые представляют собой просто сохраненные в БД операторы SQL),

триггеры привязаны к отдельным таблицам.

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

18

Чаще всего триггеры используются:

1)для обеспечения непротиворечивости данных (например, для преобразования всех сокращенных названий фирм в верхний регистр во время выполнения операций INSERT ИЛИ UPDATE);

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

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

4)для подсчета значений вычисляемых полей или обновления меток даты/времени.

19

Пример

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

В следующем примере создается триггер, преобразующий значения столбца short_name в таблице Client в верхний регистр при выполнении любых операций INSERT и UPDATE.

Версия для SQL Server:

CREATE TRIGGER trigger_01

ON Client

FOR INSERT, UPDATE

AS UPDATE Client

SET short_name = Upper(short_name)

WHERE Client.cli_id = inserted.cli_id

20

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