Представления (виды, просмотры)

Удаление индекса (оператор DROP INDEX)

Создание индекса (оператор CREATE INDEX)

Удаление таблиц (оператор DROP TABLE)

Создание таблиц (оператор CREATE TABLE)

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

CREATE TABLE ИмяТаблицы (
<определение_столбца1> [<ограничение1>]
[<определение_столбца2]| [<ограничение2>]
…)

<определение_столбца> = имя_столбца
{тип_данных | COMPUTED [BY] (<выражение>) | домен}
[DEFAULT { литерал |NULL | USER}] [NOT NULL] [<ограничение>]

Здесь:

имя_столбца допустимое имя столбца
тип_данных допустимый тип данных
COMPUTED [BY] (<выражение>) служит для определения столбца вычисляемых значений
DEFAULT определяет значение, которое по умолчанию присваивается столбцу новой записи
[<ограничение> ограничения, накладываемые на значения в столбце

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

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

Пример 9.43. Создание таблицы

Для иллюстрации процесса разработки таблиц мы рассмотрим операторы создания двух таблиц приложения: Staff (S) и Property_for_Rent (P):

CREATE TABLE Staff(
KodS VARCHAR(5) NOT NULL
Lname VARCHAR(15) NOT NULL,
Fname VARCHAR(15) NOT NULL,
Address VARCHAR(50),
Pol СНАR,
DR DATETIME
Dol VARCHAR (10) NOT NULL,
ZP DECIMAL(7,2) NOT NULL,
KodB CHAR(9) NoT NULL;

CREATE TABLE Property_for_Rent(
KodP VARCHAR(5) NOT NULL,
City VARCHAR(15) NOT NULL,
Street VARCHAR(25) NOT NULL,
Type СНАR NOT NULL
Rooms SMALLINT NOT NULL,
Rent DЕСIМАL(6,2) NOT NULL,
KodO VARCHAR(5) NOT NULL,
KodS VARCHAR(5),
KodB VARCHAR(3) NOT NULL)

В случае таблицы Property_for_Rent, хотя столбец с табельным номером работника KodS является внешним ключом, для него не указывается ключевое слово NOT NULL, поскольку могут существовать определенные периоды времени, когда сдаваемый в аренду объект небудет отвечать ни один из работников компании. (Например, подобная ситуация возможна при первичной регистрации нового объекта.) Однако остальные внешние ключи этой таблицы — KodO (номер владельца) и KodB (номер отделения компании) — должны быть определены с указанием этого ключевого слова.

Таблицы удаляются из базы данных с помощью оператора DROP TABLE, имеющего следующий формат:

DROP TABLE имя_таблицы [RESTRICT | CASCADE]

Например, для удаления таблицы Property for Rent можно использовать следующий оператор:

DROP TABLE Property_for_Rent;

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

Оператор DROP TABLE дополнительно позволяет указывать, следует ли операцию удаления выполнять каскадно. Если в операторе указано ключевое слово RESTRICT, то при наличии в базе данных хотя бы одного объекта, существование которого зависит от удаляемой таблицы, выполнение данного оператора DROP TABLE будет отменено. Если в операторе указано ключевое слово CASCADE, автоматически будут удалены и все прочие объекты базы данных, существование которых зависит от удаляемой таблицы, а также другие объекты, существование которых зависит от удаляемых объектов. Общий эффект от выполнения оператора DROP TABLE с ключевым словом CASCADE может оказаться весьма ощутимым, поэтому подобные операторы следует использовать с максимальной осторожностью.

Индекс представляет собой структуру, позволяющую выполнять ускоренный доступ к строкам таблицы на основе значений одного или более ее столбцов. Наличие индекса может существенно повысить скорость выполнения некоторых запросов. Однако, поскольку индексы должны обновляться системой при каждом внесении изменений в их базовую таблицу, они создают дополнительную нагрузку на систему. Индексы обычно создаются с целью удовлетворения определенных критериев поиска, после того как таблица уже находилась некоторое время в работе и увеличилась в размерах. Создание индексов не предусмотрено стандартом на язык SQL. Однако большинство диалектов поддерживает следующий оператор:

CREATE [UNIQUE] INDEX <имя_индекса> ON <имя_таблицы>
(столбцы [ASC | DESC] [,... ])

Указанные в операторе столбцы составляют ключ индекса и должны быть перечислены в возрастающем или убывающем порядке. Индексы могут создаваться только для таблиц базы данных, но не для представлений. Если в операторе указано ключевое слово UNIQUE, уникальность значений ключа индекса будет автоматически поддерживаться системой. Требование уникальности значений обязательно для первичных ключей, а также, возможно, и для других столбцов таблицы (например, для альтернативных ключей). Хотя создание индексов возможно в любой момент, при построении индекса для уже заполненной данными таблицы могут возникнуть проблемы, связанные с дублированием данных в различных строках. Следовательно, имеет смысл создавать уникальные индексы (по крайней мере для первичного ключа) непосредственно при создании таблицы. В результате система возьмет на себя контроль за уникальностью значений данных в соответствующих столбцах.

Для таблиц Staff и Property_for_Rent должны быть созданы, по крайней мере, следующие индексы:

CREATE UNIQUE INDEX KodS_ind ON Staff (KodS);

CREATE UNIQUE INDEX KodP_ind ON Property_for_Rent (KodP);

Для каждого из ключевых столбцов может быть указан порядок следования значений — по возрастанию (ASC) или по убыванию (DESC), причем значение ASC используется по умолчанию. Например, для таблицы Property for Rent можно создать следующий индекс:

CREATE INDEX Rent_ind ON Property_for_Rent (Type, Rooms);

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

Если для таблицы базы данных был создан индекс, который впоследствии оказался ненужным, то его можно удалить с помощью оператора DROP INDEX. Этот оператор имеет следующий формат:

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

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

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