Таблицы
Прежде чем перейти к созданию таблицы, необходимо провести проектирование базы данных. Далее следует создать комплект необходимых доменов и только затем можно переходить к созданию таблиц.
Создание таблицы
Для создания таблиц используется оператор 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 для построения плана обработки запроса. Сам индекс при этом не перестраивается.