Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4.2. Описание данных на основе SQL.doc
Скачиваний:
28
Добавлен:
11.05.2015
Размер:
83.97 Кб
Скачать

Таблицы

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

Создание таблицы

Для создания таблиц используется оператор CREATE TABLE, имеющий такой общий формат

CREATE TABLE <Имя_таблицы> [EXTERNAL [FILE] “<имя_файла>”]

(<опр_столбца> [, <опр_столбца> | <ограничение> ...]);

Здесь <опр_столбца> — определение столбца БД.

Определение столбца имеет такой формат:

<опр_столбца> = <имя_столбца> <тип_данных> | COMPUTED [BY]

(<выражение>) | <домен>]

[DEFAULT {<литерал>| NULL | USER}]

[NOT NULL] [<огранич_столбца>]

[COLLATE collation]

Здесь:

        • <имя_столбца> — имя столбца;

        • <тип_данных> — тип столбца (основные сведения о типах столбцов приведе­ны в уроке 11);

        • COMPUTED [BY] (выражение>) — служит для определения столбца вычисляе­мых значений;

        • <домен> — имя домена;

        • DEFAULT — определяет значение, которое по умолчанию заносится в столбец

        • при вставке новой записи;

        • <огранич_столбца> — ограничения, накладываемые на значения столбца;

        • COLLATE collation - определяет порядок сортировки символов (для сим­вольных столбцов).

Например:

CREATE TABLE T1

(Col1 Char(5) NOT NULL,

Col2 INT CHECK (Col2>0));

Изменение и удаление таблиц

Изменение ранее созданной таблицы осуществляется оператором ALTER TABLE, в котором дополнительно указывается характер действия спецификаторами ADD(добавить) или DROP(удалить). Добавлять можно только столбцы, удалять – столбцы и именованные ссылочные целостности. Например:

ALTER TABLE T1 ADD New_col VARCHAR(50); /*Добавление нового столбца*/

ALTER TABLE С DROP Cons_C; /* Удаление именованной ссылочной целостности */

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

ALTER TABLE Р ADD Temp VARCHAR(50); UPDATE P SET Temp=New_Column

Затем изменяемый столбец удаляется и создается одноименный новый столбец с нуж­ными атрибутами, после чего данные из временного столбца переносятся в новый:

ALTER TABLE Р DROP New_Column;

ALTER TABLE P ADD New_Column VARCHAR(70);

UPDATE P SET New_Column=Temp;

ALTER TABLE P DROP Temp

Удаление таблиц реализуется оператором DROP TABLE:

DROP TABLE MyTable

Данные из удаленной таблицы, а также связанные с ней индексы, ссылочные це­лостности и ограничения безвозвратно теряются. Удаление таблицы будет блоки­ровано, если объявлена затрагивающая ее ссылочная целостность ON DELETE NO ACTION, а в дочерней таблице есть ссылающиеся на нее записи.

Индексы

Создание индексов

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

Для создания индекса используется оператор CREATE INDEX следующего формата:

CREATE [UNIQUE] { [ASC[ENDING] | DESC[ENDING] } INDEX

<Имя индекса> ON <Имя таблицы>(<Столбец1> [, <Столбец2> [, … ]] )

        • UNIQUE – создается уникальный индекс;

        • ASC[ENDING] – значения индекса сортируются по возрастанию (спецификатор по умолчанию);

        • DESC [ENDING] — значения сортируются по убыванию;

        • <Имя_индекса> — имя индекса (должно быть уникальным среди всех осталь­ных имен индексов в БД);

        • <Имя_таблицы> — имя таблицы, для которой создается индекс;

        • <CтoлбeцN> — имя входящего в индекс столбца.

В следующем примере создается убывающий индекс по столбцу NSum для табли­цы Nakls:

CREATE DESC INDEX NSum_Nakls ON Nakls(NSum)

В SQL-запросах нельзя указать имя индекса, призванного ускорить выполнение запроса: сервер автоматически оптимизирует план выполнения запроса и в макси­мальной степени задействует существующие индексы (в компонентах ТТаblе при работе с серверными таблицами БД можно явно указать используемый индекс в свойстве indexName или indexFieldNames).

Если поиск (сортировка) записей идет по двум и более столбцам одновременно, полезно создать составной индекс, который способен существенно ускорить вы­полнение запроса:

CREATE INDEX Complex_Nakls ON Nakls{NFirm, NDate)

Изменение и удаление индекса

В реальной работе иногда возникает необходимость вставки в ту или иную табли­цу БД сразу множества записей. В этом случае можно временно отключить индекс следующим оператором:

ALTER INDEX <Имя_индекса> INACTIVE

После завершения операции индекс вновь можно включить оператором ALTER INDEX <Имя_индекса> ACTIVE

Вставка/удаление с отключенным индексом (индексами) реализуется быстрее, так как каждая единичная операция не вызывает перестройки индекса (индексов). Кроме того, последующее включение индекса ведет к его пересчету и способствует его оптимизации. В условиях многопользовательской работы отключение и по­вторное включение индекса проблематично, так как с индексом одновременно могут работать два и более пользователя: индекс нельзя временно отключить, если он используется в каком-либо запросе. Нельзя отключать также уникальные индексы, так как в этом случае в столбцы индекса могут быть введены неуникальные значе­ния и включение индекса приведет к ошибке. На практике для улучшения производительности индекса администратор БД должен время от времени его удалять оператором

DROP INDEX <Имя_индекса>

После этого индекс необходимо создавать заново.

Восстановление индекса

Синтаксис

SET STATISTICS INDEX <имя индекса>;

В таблицах, где число повторений значений ключа индекса значительно меняется (возрастает или уменьшается), периодическая перекомпиляция индекса может значительно ускорить время обработки. Команда SET STATISTICS повторно вычисляет селективность индекса. Индексная селективность рассчитывается исходя из количества различных значений ключа. Результаты размещаются в памяти и используются оптимизатором InterBase для построения плана обработки запроса. Сам индекс при этом не перестраивается.