Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка SQL(14) (оптимизация).docx
Скачиваний:
62
Добавлен:
17.03.2015
Размер:
452.16 Кб
Скачать

6. Ограничение identity (автоинкрементное поле).

Указывает, что новый столбец является столбцом идентификаторов. При добавлении в таблицу новой строки ядро СУБД формирует для этого столбца уникальное последовательное значение. Столбцы идентификаторов обычно используются с ограничением PRIMARY KEY для поддержания уникальности идентификаторов строк в таблице. Свойство IDENTITY может быть присвоено столбцам типов tinyint, smallint, int, bigint, decimal(p,0) или numeric(p,0). Для каждой таблицы можно создать только один столбец идентификаторов. Значения по умолчанию не могут использоваться в столбце идентификаторов. Необходимо указать как начальное значение, так и приращение, или же не указывать ничего. Если ни одно из значений не указано, значением по умолчанию является (1,1).

Синтаксис:

[ IDENTITY [ ( seed, increment ) ]

seed — значение, используемое для самой первой строки, загружаемой в таблицу.

increment — значение приращения, добавляемое к значению идентификатора предыдущей загруженной строки.

Пример:

[Табельный номер] INT IDENTITY (1, 1) NOT NULL PRIMARY KEY

  1. Вычисляемые поля.

Синтаксис:

<имя_столбца> AS <выражение> [PERSISTED [NOT NULL] ]

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

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

Стоимость_товара AS Цена_за_штуку * Количество.

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

Вычисляемые столбцы могут использоваться в списках выбора, предложениях WHERE, ORDER BY и в любых других местах, в которых могут использоваться обычные выражения, за исключением следующих случаев.

Вычисляемый столбец нельзя использовать ни в качестве определения ограничения DEFAULT или FOREIGN KEY, ни вместе с определением ограничения NOT NULL. Однако вычисляемый столбец может использоваться в качестве ключевого столбца индекса или части какого-либо ограничения PRIMARY KEY или UNIQUE, если значение этого вычисляемого столбца определяется детерминистическим (предсказуемым) выражением и тип данных результата разрешен в столбцах индекса.

Например, если таблица содержит целочисленные столбцы a и b, вычисляемый столбец a+b может быть включен в индекс, а вычисляемый столбец a+DATEPART(dd, GETDATE()) — не может, так как его значение может изменяться при последующих вызовах.

Вычисляемый столбец не может быть целевым столбцом инструкций INSERT или UPDATE.

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

PERSISTED

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

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

CREATE ТABLE Заказы(

ID_Заказ INT NOT NULL,

Блюдо INT NOT NULL,

Количество_порций INT NOT NULL CHECK(Количество_порций >0),

Дата DATE NOT NULL,

PRIMARY KEY(ID_Заказ, Блюдо, Дата),

CONSTRAINT FOREIGN_KEY

FOREIGN KEY (Блюдо, Дата) REFERENCES Меню(Блюдо, Дата) ) ;

Затем с поименованным ограничением можно работать, как с объектом БД. Если имя ограничения не задано, ядро СУДБ создаст его автоматически, выбрав имя по определенным в системе правилам.

Пример скрипта, построенного системой для создания таблицы Справочник_вид_блюда

CREATE TABLE [dbo].[Справочник_вид_блюда](

[ID_вид] [int] IDENTITY(1,1) NOT NULL,

[Вид] [varchar](20) NOT NULL,

CONSTRAINT [PK_ Справочник_вид_блюда] PRIMARY KEY CLUSTERED

(

[ID_вид] ASC

) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

) ON [PRIMARY]