Материал: Базы данных и их безопасность. Плотников Д.Г

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Предложение DROP TABLE

Существующую базовую таблицу можно в любое время уничтожить с помощью предложения:

DROP TABLE имя—базовой—таблицы;

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

Индексы

Подобно базовым таблицам индексы создаются и уничтожаются путем использования предложений определения данных языка SQL. Однако CREATE INDEX и DROP INDEX (а

также ALTER INDEX и некоторые предложения/управления данными) вообще являются единственными предложениями в языке SQL, в которых имеются ссылки на индексы. Другие предложения, в частности предложения манипулирования данными, такие, как SELECT, намеренно не включают какихлибо таких ссылок. Решение о том, использовать или не использовать какой-либо индекс при обработке некоторого конкретного запроса в языке SQL, принимается не пользователем, а системой.

Предложение CREATE INDEX имеет следующий общий формат:

CREATE [UNIQUE] INDEX имя—индекса

ON имя—базовой—таблицы (имя— столбца [упорядочение]

[имя—столбца [упорядочение]] …) [другие—параметры];

Факультативные «другие—параметры» имеют отношение к проблемам физического хранения, как и в случае предложения CREATE TABLE. Каждая спецификация

231

«упорядочение» представляет собой либо ASC (возрастание), либо DESC (убывание). Если не специфицировано ни ASC, ни DESC, то по умолчанию предполагается ASC. Последовательность указания имен столбцов в предложении CREATE INDEX соответствует обычным образом упорядочению от старшего к младшему. Например, предложение

CREATE INDEX X ON В (P, Q DESC, R)

создает индекс с именем X над базовой таблицей В, в котором статьи упорядочиваются по возрастанию значений R в рамках убывающих значений Q в рамках возрастающих значений P. Столбцы P, Q и R не обязательно должны быть смежными. Не обязательно также, чтобы все они имели один и тот же тип данных. Наконец, не обязательно, чтобы все они были фиксированной длины.

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

Факультативный параметр UNIQUE (уникальный) в предложении CREATE INDEX специфицирует, что никаким двум записям в индексируемой базовой таблице не позволяется принимать одно и то же значение для индексируемого поля (или комбинации полей) в одно и то же время. В случае базы данных поставщиков и деталей, например, мы специфицировали бы, вероятно, следующие индексы с параметром UNIQUE:

CREATE UNIQUE INDEX XS ON S (НОМЕР_ПОСТАВЩИКА);

CREATE UNIQUE INDEX XP ON P (НОМЕР_ДЕТАЛИ);

CREATE UNIQUE INDEX XSP ON

SP (НОМЕР_ПОСТАВЩИКА, НОМЕР_ДЕТАЛИ);

232

Индексы, подобно базовым таблицам, могут создаваться

иуничтожаться в любое время. В приведенном примере, однако, нам хотелось бы, вероятно, создать индексы XS, XP и XSP в то же время, когда создаются сами базовые таблицы S, Р

иSP. Если же эти базовые таблицы будут непустыми в, то время, когда издается предложение CREATE INDEX, ограничения уникальности могут уже оказаться нарушенными. Попытка создания индекса с параметром UNIQUE над таблицей, которая в настоящее время не удовлетворяет ограничению уникальности, будет завершаться неудачно.

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

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

CREATE INDEX XSC ON S (ГОРОД);

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

DROP INDEX имя—индекса;

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

233

первоначальные предложения SQL, не используя исчезнувший теперь индекс. Этот процесс полностью скрыт от пользователя.

Упражнения

1. На рис. 8.1 приведены некоторые примеры значений данных для базы данных, содержащей информацию, касающуюся поставщиков (таблица S), деталей (таблица P) и проектируемых изделий (таблица J). Поставщики, детали и изделия уникально идентифицируются при этом соответственно номером поставщика, номером детали и номером изделия. Смысл записей таблицы SPJ состоит в том, что специфицированый поставщик поставляет специфицированную деталь для специфицированного проектируемого изделия в

специфицированном

количестве.

Комбинация

НОМЕР_ПОСТАВЩИКА,

НОМЕР_ДЕТАЛИ

и

НОМЕР_ИЗДЕЛИЯ уникально идентифицирует такие записи. Напишите для этой базы данных соответствующее множество предложений CREATE TABLE.

2. Запишите множество предложений CREATE INDEX для базы данных из упражнения 1 таким образом, чтобы привести в действие требуемые ограничения уникальности.

На рисунке ниже приведены некоторые примеры значений данных для базы данных, содержащей информацию, касающуюся поставщиков (таблица S), деталей (таблица P) и проектируемых изделий (таблица J). Поставщики, детали и изделия уникально идентифицируются при этом соответственно номером поставщика, номером детали и номером изделия. Смысл записей таблицы SPJ состоит в том, что специфицированый поставщик поставляет специфицированную деталь для специфицированного проектируемого изделия в

специфицированном

количестве.

Комбинация

НОМЕР_ПОСТАВЩИКА,

НОМЕР_ДЕТАЛИ

и

НОМЕР_ИЗДЕЛИЯ уникально идентифицирует такие записи. Напишите для этой базы данных соответствующее множество предложений CREATE TABLE. Примечание. Эта база данных будет использоваться в последующих частях.

234

S

НОМЕР_

ФАМИЛИЯ

СОСТОЯНИЕ

ГОРОД

ПОСТАВЩИКА

 

 

 

 

 

S1

Смит

20

Лондон

 

S2

Джонс

10

Париж

 

S3

Блейк

30

Париж

 

S4

Кларк

20

Лондон

 

S5

Адамс

30

Атенс

 

P

НОМЕР_

НАЗВАНИЕ

ЦВЕТ

ВЕС

ГОРОД

 

 

ДЕТАЛИ

 

 

 

 

 

 

 

P1

Гайка

Красный

12

Лондон

 

 

P2

Болт

Зеленый

17

Париж

 

 

P3

Винт

Голубой

17

Рим

 

 

P4

Винт

Красный

14

Лондон

 

 

P5

Кулачок

Голубой

12

Париж

 

 

P6

Блюм

Красный

19

Лондон

 

J

НОМЕР_ИЗДЕЛИЯ

НАЗВАНИЕ

 

ГОРОД

 

 

 

J1

 

Сортировщик

 

Париж

 

 

J2

 

Перфоратор

 

Рим

 

 

J3

 

Считыватель

 

Атенс

 

 

J4

 

Консоль

 

Атенс

 

 

J5

 

Сортировочно-

Лондон

 

 

 

подборочная машина

 

 

 

 

J6

 

Терминал

 

Осло

 

 

J7

 

Лента

 

Лондон

 

SPJ НОМЕР_ НОМЕР_

НОМЕР_

КОЛИЧЕСТВО

 

 

ПОСТАВ

ДЕТАЛИ

ИЗДЕЛИЯ

 

 

 

 

 

ЩИКА

 

 

 

 

 

 

 

S1

P1

J1

 

200

 

 

 

S1

P1

J4

 

700

 

 

 

S2

P3

J1

 

400

 

 

 

S2

P3

J2

 

200

 

 

 

S2

P3

J3

 

200

 

 

 

S2

P3

J4

 

500

 

 

 

S2

P3

J5

 

600

 

 

 

S2

P3

J6

 

400

 

 

 

S2

P3

J7

 

800

 

 

 

S2

P5

J2

 

100

 

 

 

S3

P3

J1

 

200

 

 

 

S3

P4

J2

 

500

 

 

 

S4

P6

J3

 

300

 

 

 

S4

P6

J7

 

300

 

 

 

S5

P2

J2

 

200

 

 

 

S5

P2

J4

 

100

 

 

 

S5

P5

J5

 

500

 

 

 

S5

P5

J7

 

100

 

 

 

S5

P6

J2

 

200

 

 

 

S5

P1

J4

 

100

 

 

 

S5

P3

J4

 

200

 

 

 

S5

P4

J4

 

800

 

 

 

S5

P5

J4

 

400

 

 

 

S5

P6

J4

 

500

 

База данных поставщиков, деталей, изделий

235

Источник: https://studfile.net/preview/16563653/