Программирование >>  Программирование баз данных 

1 ... 38 39 40 [ 41 ] 42 43 44 ... 346


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

Ограничения столбца

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

Вычисляемые столбцы

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

Рассмотрим синтаксическую структуру определения вычисляемого столбца: <column name> AS <computed column expression>

Первый элемент этого определения, <column name>, остается практически таким же, как и в других рпределениях столбцов, - он задает имя столбца, в котором будут представлены вычисленные значения. Но это - просто псевдоним, который должен использоваться для ссылки на значение, вычисляемое в соответствии с выражением <computed column express ion>, которое следует за ключевым словом AS.

Еще одним .элементом этого определения является выражение вычисленного столбца. Это выражение может представлять собой любое обычное выражение, в котором используются литералы и (или) значения столбцов из той же таблицы. Пример применения последней функции приведен ниже. ExtendedPrice AS Price * Quantity

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

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



В версиях, предшествующих SQL Server 2000, вычисленные столбцы нельзя использовать в составе любого ьслюча (первичного, внешнего или уникального); не допускается также применять вычисленные столбцы в сочетании с ограничением, предусмотренным по умолчанию. В версии SQL Server 2005 допускается использовать вычисляемые столбцы в сочетании с ограничением первичного ключа или ограничением уникальности, но, безусловно, такая возможность применительно к внешним ключам и заданным по умолчанию значениям не предусмотрена.

Более подробные примеры использования вычисленных столбцов приведены ниже в данной главе.

Ограничения таблицы

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

Еще раз отметим, что более подробное описание ограничений таблицы будет приведено в главе, посвященной ограничениям. На данный момент достаточно лишь указать, что к примерам ограничений уровня таблицы относятся ограничения PRIMARY, FOREIGN KEY и CHECK.

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

Конструкция on

Напомним, что в разделе с описанием процедуры создания базы данных упоминалась возможность применения различных файловых групп. Итак, конструкция ON в определении таблицы как раз и представляет собой способ конкретного указания того, в какой файловой группе (и, соответственно, на каком физическом устройстве) должна находиться таблица. Таким образом, разработчик может поместить определенную таблицу на указанное физическое устройство, но в большинстве случаев конструкция ON остается незаданной, поэтому система помещает создаваемую таблицу в файловую группу, предусмотренную по умолчанию (таковой является группа PRIMARY, если вместо нее не задано какое-то другое значение). Возможность явного распределения таблиц по файловым группам будет рассматриваться более подробно в главе, посвященной настройке производительности.



Конструкция textimageon

Конструкция TEXTIMAGE ON аналогична по своему назначению описанной выше конструкции ON, за исключением того, что первая позволяет определить еще одну файловую группу, в которую должна быть перемещена вполне определенная часть таблицы. Конструкция TEXTIMAGE ON является действительной, только если в определении рассматриваемой таблицы имеется столбец (столбцы) типа text, ntext или image. Если для таблицы применяется конструкция TEXTIMAGE ON, то в отдельную файловую группу перемещаются только данные в формате BLOB из столбцов указанного типа, а остальная часть таблицы располагается либо в файловой группе, применяемой по умолчанию, либо в файловой группе, выбранной в конструкции ON.

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

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

В начале данного раздела был приведен следующий синтаксис стандартного оператора CREATE:

CREATE <object type> <object name>

После этого речь шла о более конкретной форме оператора CREATE, применимого для создания таблицы Customers (это был самый первый пример оператора создания таблицы в настоящей главе): CREATE TABLE Customers

Автор обычно вводит строку USE <database name> перед любым оператором CREATE, в том числе предназначенным для создания таблиц, чтобы гарантировать в результате выполнения данного конкретного сценария создание таблицы в той базе данных, где она действительно должна находиться. А за первой строкой USE следует оператор с уже известным нам форматом, но с тем количеством определений столбцов, которое больше напоминает используемое на практике.

USE Accounting

CREATE TABLE Customers

CustomerNo CustomerName Address1 Address2 City-state Zip Phone

varchar(30) varchar(30) varchar(30) varchar(2 0) char(2) varchar(10) char(15)

IDENTITY

NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL, NOT NULL

Это - довольно упрощенная таблица по сравнению с теми, которые обычно используются на практике, но мы имеем широкие возможности внести дополнения в ее



1 ... 38 39 40 [ 41 ] 42 43 44 ... 346

© 2006 - 2024 pmbk.ru. Генерация страницы: 0.069
При копировании материалов приветствуются ссылки.
Яндекс.Метрика