При создании баз данных большое внимание должно быть уделено средствам поддержания данных в
Большая часть перечисленных ограничений задается в операторах CREATE TABLE и ALTER TABLE.
В стандарте SQL дано несколько вариантов определения оператора
<определение_таблицы> ::=
CREATE TABLE имя_таблицы
{(имя_столбца тип_данных [ NOT NULL ][ UNIQUE]
[DEFAULT <значение>]
[ CHECK (<условие_выбора>)][,...n]}
[CONSTRAINT имя_ограничения]
[PRIMARY KEY (имя_столбца [,...n])
{[UNIQUE (имя_столбца [,...n])}
[FOREIGN KEY (имя_столбца_внешнего_ключа
[,...n])
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])],
[MATCH {PARTIAL | FULL}]
[ON UPDATE {CASCADE| SET NULL |SET DEFAULT
|NO ACTION}]
[ON DELETE {CASCADE| SET NULL |SET DEFAULT
|NO ACTION}]
{[CHECK(<условие_выбора>)][,...n]})
Представленная версия оператора
Для некоторых столбцов требуется наличие в каждой строке таблицы конкретного и допустимого значения, отличного от опущенного значения или значения NULL. Для заданий ограничений подобного типа стандарт SQL предусматривает использование спецификации NOT NULL.
Обновления данных в таблицах могут быть ограничены существующими в организации требованиями (бизнес-правилами). Стандарт SQL позволяет реализовать бизнес-правила предприятий с помощью предложения CHECK и ключевого слова UNIQUE.
Каждый столбец имеет собственный домен - некоторый набор допустимых значений. Стандарт SQL предусматривает два различных механизма определения доменов. Первый состоит в использовании предложения CHECK, позволяющего задать требуемые ограничения для столбца или таблицы в целом, а второй предполагает применение оператора CREATE DOMAIN.
PRIMARY KEY. В пределах таблицы она может указываться только один раз. Однако существует возможность гарантировать уникальность значений и для любых UNIQUE. Кроме того, при определении NOT NULL.
FOREIGN KEY, а фраза REFERENCES определяет имя родительской таблицы, т.е. таблицы, где находится соответствующий потенциальный ключ. При использовании этого предложения система отклонит выполнение любых операторов INSERT или UPDATE, с помощью которых будет предпринята попытка создать в дочерней таблице значение UPDATE и DELETE, содержащих попытку обновить или удалить значение ON UPDATE и ON DELETE предложения FOREIGN KEY. Если пользователь предпринимает попытку удалить из родительской таблицы строку, на которую ссылается одна или более строк дочерней таблицы, язык SQL предоставляет следующие возможности:
CASCADE - выполняется удаление строки из родительской таблицы, сопровождающееся автоматическим удалением всех ссылающихся на нее строк дочерней таблицы;SET NULL - выполняется удаление строки из родительской таблицы, а во NULL ;SET DEFAULT - выполняется удаление строки из родительской таблицы, а во NO ACTION - операция удаления строки из родительской таблицы отменяется. Именно это значение используется по умолчанию в тех случаях, когда в описании ON DELETE опущена.Те же самые
Определитель MATCH позволяет уточнить способ обработки значения NULL во
При определении таблицы предложение FOREIGN KEY может указываться произвольное количество раз.
В операторе CREATE TABLE используется необязательная фраза DEFAULT, которая предназначена для задания принимаемого по умолчанию значения, когда в операторе INSERT значение в данном столбце будет отсутствовать.
Фраза CONSTRAINT позволяет задать имя ограничению, что позволит впоследствии отменить то или иное ограничение с помощью оператора ALTER TABLE.
Для внесения изменений в уже созданные таблицы стандартом SQL предусмотрен оператор ALTER TABLE, предназначенный для выполнения следующих действий:
Оператор
<изменение_таблицы> ::=
ALTER TABLE имя_таблицы
[ADD [COLUMN]имя_столбца тип_данных
[ NOT NULL ][UNIQUE]
[DEFAULT <значение>][ CHECK (<условие_выбора>)]]
[DROP [COLUMN] имя_столбца [RESTRICT | CASCADE ]]
[ADD [CONSTRAINT [имя_ограничения]]
[{PRIMARY KEY (имя_столбца [,...n])
|[UNIQUE (имя_столбца [,...n])}
|[FOREIGN KEY (имя_столбца_внешнего_ключа [,...n])
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])],
[ MATCH {PARTIAL | FULL}
[ON UPDATE {CASCADE| SET NULL |
SET DEFAULT | NO ACTION}]
[ON DELETE {CASCADE| SET NULL |
SET DEFAULT | NO ACTION}]
|[CHECK(<условие_выбора>)][,...n]}]
[DROP CONSTRAINT имя_ограничения
[RESTRICT | CASCADE]]
[ALTER [COLUMN] SET DEFAULT <значение>]
[ALTER [COLUMN] DROP DEFAULT]
Здесь параметры имеют то же самое назначение, что и в определении оператора CREATE TABLE.
Оператор ALTER TABLE реализован не во всех диалектах языка SQL. В некоторых диалектах он поддерживается, однако не позволяет удалять из таблицы уже существующие столбцы.
Для DROP TABLE.
В процессе проектирования базы данных принимается решение о том, какие таблицы должны входить в базу данных, какие у них будут имена (идентификаторы), какие типы данных потребуются для построения таблиц и какие пользователи получат доступ к каждой из них. Кроме того, для эффективного
NULL?Для
<определение_таблицы> ::=
CREATE TABLE [ имя_базы_данных.[владелец].
| владелец. ]имя_таблицы
(<элемент_таблицы>[,...n])
где
<элемент_таблицы> ::=
{<определение_столбца>}
| <имя_столбца> AS <выражение>
| <ограничение_таблицы>
Обычно владельцем таблицы (dbo) является тот, кто ее создал.
<Выражение> задает значение для SELECT при указании списка столбцов, которые должны быть возвращены в результате выполнения запроса. INSERT и DELETE.
<определение_столбца> ::=
{ имя_столбца <тип_данных>}
[ [ DEFAULT <выражение> ]
| [ IDENTITY (начало, шаг) [NOT FOR REPLICATION]]]]
[ROWGUIDCOL][<ограничение_столбца>][...n]]
В определении столбца обратим внимание на параметр IDENTITY, который указывает, что соответствующий столбец будет IDENTITY указано NOT FOR REPLICATION, то сервер не будет выполнять автоматического генерирования значений для этого столбца, а разрешит вставку в столбец произвольных значений.
<ограничение_столбца>::=
[ CONSTRAINT имя_ограничения ]
{ [ NULL | NOT NULL ]
| [ {PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR=фактор_заполнения ]
[ ON {имя_группы_файлов | DEFAULT } ] ] ]
| [ [ FOREIGN KEY ]
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]]
| CHECK [ NOT FOR REPLICATION](<лог_выражение>) }
<ограничение_таблицы>::=
[CONSTRAINT имя_ограничения ]
{ [ {PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{(имя_столбца [ASC | DESC][,...n])}
[WITH FILLFACTOR=фактор_заполнения ]
[ON {имя_группы_файлов | DEFAULT } ]]
|FOREIGN KEY[(имя_столбца [,...n])]
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] (лог_выражение) }
Рассмотрим отдельные параметры представленных конструкций, связанные с ограничениями PRIMARY KEY, FOREIGN KEY, ограничение уникальности UNIQUE, ограничение значения NULL, ограничение на проверку CHECK
При создании
Таблица может иметь только одно ограничение PRIMARY KEY, причем ни один из включенных в NULL. При попытке использовать в качестве
Поскольку ограничение PRIMARY KEY гарантирует уникальность данных, оно часто определяется для PRIMARY KEY возможно как при создании, так и при
FOREIGN KEY, применяется для ссылки на столбец родительской таблицы, являющийся в ней REFERENCES. Данные в столбцах, определенных в качестве FOREIGN KEY, может иметь совершенно другое имя. Единственным требованием остается соответствие столбцов по типу и размеру данных.
На
UNIQUE второй таблицы или любых других столбцов, но таблицы должны находиться в одной базе данных.
Столбцы NULL, однако проверка на ограничение FOREIGN KEY игнорируется.
Ограничение ON DELETE NO ACTION и ON UPDATE NO ACTION, принятыми по умолчанию. Для разрешения каскадного воздействия следует использовать параметры ON DELETE CASCADE и ON UPDATE CASCADE.
Это ограничение задает требование уникальности значения поля (столбца) или группы полей (столбцов), входящих в UNIQUE для столбца таблицы похоже на UNIQUE. Отличие в UNIQUE допускается существование значения NULL, но лишь единственный раз.
Для каждого столбца таблицы можно установить ограничение NOT NULL, запрещающее ввод в этот столбец нулевого значения.
Данное ограничение используется для проверки допустимости данных, вводимых в конкретный столбец таблицы, т.е. ограничение CHECK обеспечивает еще один уровень защиты данных.
CHECK задают диапазон возможных значений для столбца или столбцов. В основе CHECK лежит использование логических выражений.
Допускается применение нескольких ограничений CHECK к одному и тому же столбцу. В этом случае они будут применимы в той последовательности, в которой происходило их создание. Возможно применение одного и того же ограничения к разным столбцам и использование в логических выражениях значений других столбцов. Указание параметра NOT FOR REPLICATION предписывает не выполнять проверочных действий, если они выполняются подсистемой репликации.
CHECK с
CREATE RULE имя_правила AS выражение
Чтобы связать
sp_bindrule [@rulename=] 'rule' [@objname=] 'object_name' [,[@futureonly=['futureonly_flag']
Чтобы отменить
sp_unbindrule [@objname=] 'object_name' [,[@futureonly=['futureonly_flag']
Удаление
DROP RULE {имя_правила} [,...n].
Столбцу может быть присвоено значение по умолчанию. Оно будет актуальным в том случае, если пользователь не введет в столбец никакого иного значения.
Отдельно необходимо отметить пользу от использования значений по умолчанию при добавлении нового столбца в таблицу. Если для добавляемого столбца не разрешено хранение значений NULL и не определено значение по умолчанию, то операция добавления столбца закончится неудачей.
При определении в таблице столбца с параметром ROWGUIDCOL сервер автоматически определяет для него значение по умолчанию в виде функции NEWID(). Таким образом, для каждой новой строки будет автоматически генерироваться глобальный уникальный идентификатор.
Дополнительным механизмом использования значений по умолчанию являются объекты базы данных, созданные командой:
CREATE DEFAULT имя_умолчания AS константа
Умолчание связывается с тем или иным столбцом какой-либо таблицы с помощью процедуры:
sp_bindefault [@defname=] 'default', [@objname=] 'object_name' [,[@futureonly=] 'futureonly_flag'],
где
'object_name'
может быть представлен как
'имя_таблицы.имя_столбца'
Удаление
DROP DEFAULT {имя_умолчания} [,...n]
если предварительно это ограничение было удалено из всех таблиц процедурой
sp_unbindefault [@objname=] 'object_name' [,[@futureonly=] 'futureonly_flag']
При CONSTRAINT, чтобы присвоить ограничению имя, уникальное в пределах базы данных.
Ключевые слова CLUSTERED и NONCLUSTERED позволяют создать для столбца PRIMARY KEY по умолчанию создается UNIQUE - ASC и DESC определяют метод упорядочения данных в индексе.
С помощью параметра WITH FILLFACTOR=фактор_заполнения задается степень заполнения индексных страниц при создании индекса. Значение фактора заполнения указывается в процентах и может изменяться в промежутке от 0 до 100.
Параметр ON имя_группы_файлов обозначает группу, в которой предполагается хранить таблицу.
<изменение_таблицы> ::=
ALTER TABLE имя_таблицы
{[ALTER COLUMN имя_столбца
{ тип_данных [(точность[,масштаб])]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }]
| ADD { [<определение_столбца>]
| имя_столбца AS выражение } [,...n]
| [WITH CHECK | WITH NOCHECK ]
ADD { <ограничение-таблицы> } [,...n]
| DROP
{ [CONSTRAINT ] имя_ограничения
| COLUMN имя_столбца}[,...n]
| {CHECK | NOCHECK } CONSTRAINT
{ALL | имя_ограничения[,...n]}
| {ENABLE | DISABLE } TRIGGER
{ALL | имя_триггера [,...n]}}
В дополнение к уже названным параметрам определим параметр {ENABLE | DISABLE } TRIGGER ALL, предписывающий задействовать или отключить конкретный триггер или все триггера, связанные с таблицей.
DROP TABLE имя_таблицы
Удалить можно любую таблицу, даже системную. К этому вопросу нужно подходить очень осторожно. Однако удалению не подлежат таблицы, если существуют объекты, ссылающиеся на них. К таким объектам относятся таблицы, связанные с удаляемой таблицей посредством
CREATE TABLE Товар
(КодТовара INT IDENTITY(1,1) PRIMARY KEY,
Название VARCHAR(50) NOT NULL UNIQUE,
Цена MONEY NOT NULL,
Тип VARCHAR(50) NOT NULL,
Сорт VARCHAR(50) NOT NULL
CHECK(сорт in('первый','второй','третий')),
Город VARCHAR(50) NOT NULL,
Остаток INT
CHECK(остаток>=0))
CREATE TABLE Клиент
(КодКлиента INT IDENTITY(1,1) PRIMARY KEY,
Фирма VARCHAR(50) NOT NULL,
Фамилия VARCHAR(50) NOT NULL,
Город VARCHAR(50) NOT NULL,
Телефон CHAR(10) NOT NULL
CHECK(Телефон LIKE
'[1-9][0-9]-[0-9][0-9]-[0-9][0-9]'))
CREATE TABLE Сделка
(КодСделки INT IDENTITY(1,1) PRIMARY KEY,
КодТовара INT NOT NULL,
КодКлиента INT NOT NULL,
Количество INT NOT NULL DEFAULT 0,
Дата DATETIME NOT NULL DEFAULT
GETDATE(),
CONSTRAINT fk_Товар
FOREIGN KEY(КодТовара) REFERENCES Товар,
CONSTRAINT fk_Клиент
FOREIGN KEY(КодКлиента) REFERENCES Клиент)
CREATE TABLE Склад (КодТовара INT PRIMARY KEY, Остаток INT)
ALTER TABLE Сделка DROP CONSTRAINT fk_Товар
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар FOREIGN KEY (КодТовара) REFERENCES товар ON UPDATE NO ACTION ON DELETE NO ACTION
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар FOREIGN KEY (КодТовара) REFERENCES Товар ON UPDATE CASCADE ON DELETE CASCADE
ALTER TABLE Товар ADD Налог AS Цена*0.05 ALTER TABLE Товар DROP COLUMN Налог
Пусть создана таблица без ограничений:
CREATE TABLE Товар (КодТовара INT, Название VARCHAR(20), Тип VARCHAR(20), Дата DATETIME, Цена MONEY, Остаток INT)
Рассмотрим примеры внесения в таблицу всевозможных ограничений.
Пример 9.9. Поле КодТовара необходимо сделать первичным
ключом. Выполнение следующей команды будет отвергнуто, поскольку поле
КодТовара допускает внесение значений NULL.
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Сначала нужно изменить объявление столбца КодТовара, запретив внесение значений NULL:
ALTER TABLE Товар ALTER COLUMN КодТовара INT NOT NULL
И только потом создать
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Пример 9.10. Удалить столбец целого типа и добавить столбец-счетчик.
ALTER TABLE Товар DROP COLUMN КодТовара
ALTER TABLE Товар ADD
КодТовара INT IDENTITY(1,1)
Пример 9.11. Добавить
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Пример 9.12. Изменить столбец, добавив ограничение NOT NULL.
ALTER TABLE Товар ALTER COLUMN
Название VARCHAR(40) NOT NULL
Пример 9.13. Добавить ограничение уникальности значения.
ALTER TABLE Товар ADD CONSTRAINT
u1 UNIQUE(Название)
Пример 9.14. Создать умолчание и добавить умолчание столбцу.
CREATE DEFAULT df1 AS 0 sp_bindefault 'df1', 'Товар.Остаток' CREATE DEFAULT df2 AS GETDATE() sp_bindefault 'df2', 'Товар.Дата'
Пример 9.15. Создать правило и добавить правило столбцу.
CREATE RULE r1 AS @m IN
('мебель','бытовая химия','косметика')
sp_bindrule 'r1','Товар.Тип'
При создании баз данных большое внимание должно быть уделено средствам поддержания данных в
Большая часть перечисленных ограничений задается в операторах CREATE TABLE и ALTER TABLE.
В стандарте SQL дано несколько вариантов определения оператора
<определение_таблицы> ::=
CREATE TABLE имя_таблицы
{(имя_столбца тип_данных [ NOT NULL ][ UNIQUE]
[DEFAULT <значение>]
[ CHECK (<условие_выбора>)][,...n]}
[CONSTRAINT имя_ограничения]
[PRIMARY KEY (имя_столбца [,...n])
{[UNIQUE (имя_столбца [,...n])}
[FOREIGN KEY (имя_столбца_внешнего_ключа
[,...n])
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])],
[MATCH {PARTIAL | FULL}]
[ON UPDATE {CASCADE| SET NULL |SET DEFAULT
|NO ACTION}]
[ON DELETE {CASCADE| SET NULL |SET DEFAULT
|NO ACTION}]
{[CHECK(<условие_выбора>)][,...n]})
Представленная версия оператора
Для некоторых столбцов требуется наличие в каждой строке таблицы конкретного и допустимого значения, отличного от опущенного значения или значения NULL. Для заданий ограничений подобного типа стандарт SQL предусматривает использование спецификации NOT NULL.
Обновления данных в таблицах могут быть ограничены существующими в организации требованиями (бизнес-правилами). Стандарт SQL позволяет реализовать бизнес-правила предприятий с помощью предложения CHECK и ключевого слова UNIQUE.
Каждый столбец имеет собственный домен - некоторый набор допустимых значений. Стандарт SQL предусматривает два различных механизма определения доменов. Первый состоит в использовании предложения CHECK, позволяющего задать требуемые ограничения для столбца или таблицы в целом, а второй предполагает применение оператора CREATE DOMAIN.
PRIMARY KEY. В пределах таблицы она может указываться только один раз. Однако существует возможность гарантировать уникальность значений и для любых UNIQUE. Кроме того, при определении NOT NULL.
FOREIGN KEY, а фраза REFERENCES определяет имя родительской таблицы, т.е. таблицы, где находится соответствующий потенциальный ключ. При использовании этого предложения система отклонит выполнение любых операторов INSERT или UPDATE, с помощью которых будет предпринята попытка создать в дочерней таблице значение UPDATE и DELETE, содержащих попытку обновить или удалить значение ON UPDATE и ON DELETE предложения FOREIGN KEY. Если пользователь предпринимает попытку удалить из родительской таблицы строку, на которую ссылается одна или более строк дочерней таблицы, язык SQL предоставляет следующие возможности:
CASCADE - выполняется удаление строки из родительской таблицы, сопровождающееся автоматическим удалением всех ссылающихся на нее строк дочерней таблицы;SET NULL - выполняется удаление строки из родительской таблицы, а во NULL ;SET DEFAULT - выполняется удаление строки из родительской таблицы, а во NO ACTION - операция удаления строки из родительской таблицы отменяется. Именно это значение используется по умолчанию в тех случаях, когда в описании ON DELETE опущена.Те же самые
Определитель MATCH позволяет уточнить способ обработки значения NULL во
При определении таблицы предложение FOREIGN KEY может указываться произвольное количество раз.
В операторе CREATE TABLE используется необязательная фраза DEFAULT, которая предназначена для задания принимаемого по умолчанию значения, когда в операторе INSERT значение в данном столбце будет отсутствовать.
Фраза CONSTRAINT позволяет задать имя ограничению, что позволит впоследствии отменить то или иное ограничение с помощью оператора ALTER TABLE.
Для внесения изменений в уже созданные таблицы стандартом SQL предусмотрен оператор ALTER TABLE, предназначенный для выполнения следующих действий:
Оператор
<изменение_таблицы> ::=
ALTER TABLE имя_таблицы
[ADD [COLUMN]имя_столбца тип_данных
[ NOT NULL ][UNIQUE]
[DEFAULT <значение>][ CHECK (<условие_выбора>)]]
[DROP [COLUMN] имя_столбца [RESTRICT | CASCADE ]]
[ADD [CONSTRAINT [имя_ограничения]]
[{PRIMARY KEY (имя_столбца [,...n])
|[UNIQUE (имя_столбца [,...n])}
|[FOREIGN KEY (имя_столбца_внешнего_ключа [,...n])
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])],
[ MATCH {PARTIAL | FULL}
[ON UPDATE {CASCADE| SET NULL |
SET DEFAULT | NO ACTION}]
[ON DELETE {CASCADE| SET NULL |
SET DEFAULT | NO ACTION}]
|[CHECK(<условие_выбора>)][,...n]}]
[DROP CONSTRAINT имя_ограничения
[RESTRICT | CASCADE]]
[ALTER [COLUMN] SET DEFAULT <значение>]
[ALTER [COLUMN] DROP DEFAULT]
Здесь параметры имеют то же самое назначение, что и в определении оператора CREATE TABLE.
Оператор ALTER TABLE реализован не во всех диалектах языка SQL. В некоторых диалектах он поддерживается, однако не позволяет удалять из таблицы уже существующие столбцы.
Для DROP TABLE.
В процессе проектирования базы данных принимается решение о том, какие таблицы должны входить в базу данных, какие у них будут имена (идентификаторы), какие типы данных потребуются для построения таблиц и какие пользователи получат доступ к каждой из них. Кроме того, для эффективного
NULL?Для
<определение_таблицы> ::=
CREATE TABLE [ имя_базы_данных.[владелец].
| владелец. ]имя_таблицы
(<элемент_таблицы>[,...n])
где
<элемент_таблицы> ::=
{<определение_столбца>}
| <имя_столбца> AS <выражение>
| <ограничение_таблицы>
Обычно владельцем таблицы (dbo) является тот, кто ее создал.
<Выражение> задает значение для SELECT при указании списка столбцов, которые должны быть возвращены в результате выполнения запроса. INSERT и DELETE.
<определение_столбца> ::=
{ имя_столбца <тип_данных>}
[ [ DEFAULT <выражение> ]
| [ IDENTITY (начало, шаг) [NOT FOR REPLICATION]]]]
[ROWGUIDCOL][<ограничение_столбца>][...n]]
В определении столбца обратим внимание на параметр IDENTITY, который указывает, что соответствующий столбец будет IDENTITY указано NOT FOR REPLICATION, то сервер не будет выполнять автоматического генерирования значений для этого столбца, а разрешит вставку в столбец произвольных значений.
<ограничение_столбца>::=
[ CONSTRAINT имя_ограничения ]
{ [ NULL | NOT NULL ]
| [ {PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
[ WITH FILLFACTOR=фактор_заполнения ]
[ ON {имя_группы_файлов | DEFAULT } ] ] ]
| [ [ FOREIGN KEY ]
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы) ]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
[ NOT FOR REPLICATION ]]
| CHECK [ NOT FOR REPLICATION](<лог_выражение>) }
<ограничение_таблицы>::=
[CONSTRAINT имя_ограничения ]
{ [ {PRIMARY KEY | UNIQUE }
[ CLUSTERED | NONCLUSTERED ]
{(имя_столбца [ASC | DESC][,...n])}
[WITH FILLFACTOR=фактор_заполнения ]
[ON {имя_группы_файлов | DEFAULT } ]]
|FOREIGN KEY[(имя_столбца [,...n])]
REFERENCES имя_род_таблицы
[(имя_столбца_род_таблицы [,...n])]
[ ON DELETE { CASCADE | NO ACTION } ]
[ ON UPDATE { CASCADE | NO ACTION } ]
| NOT FOR REPLICATION ]
| CHECK [ NOT FOR REPLICATION ] (лог_выражение) }
Рассмотрим отдельные параметры представленных конструкций, связанные с ограничениями PRIMARY KEY, FOREIGN KEY, ограничение уникальности UNIQUE, ограничение значения NULL, ограничение на проверку CHECK
При создании
Таблица может иметь только одно ограничение PRIMARY KEY, причем ни один из включенных в NULL. При попытке использовать в качестве
Поскольку ограничение PRIMARY KEY гарантирует уникальность данных, оно часто определяется для PRIMARY KEY возможно как при создании, так и при
FOREIGN KEY, применяется для ссылки на столбец родительской таблицы, являющийся в ней REFERENCES. Данные в столбцах, определенных в качестве FOREIGN KEY, может иметь совершенно другое имя. Единственным требованием остается соответствие столбцов по типу и размеру данных.
На
UNIQUE второй таблицы или любых других столбцов, но таблицы должны находиться в одной базе данных.
Столбцы NULL, однако проверка на ограничение FOREIGN KEY игнорируется.
Ограничение ON DELETE NO ACTION и ON UPDATE NO ACTION, принятыми по умолчанию. Для разрешения каскадного воздействия следует использовать параметры ON DELETE CASCADE и ON UPDATE CASCADE.
Это ограничение задает требование уникальности значения поля (столбца) или группы полей (столбцов), входящих в UNIQUE для столбца таблицы похоже на UNIQUE. Отличие в UNIQUE допускается существование значения NULL, но лишь единственный раз.
Для каждого столбца таблицы можно установить ограничение NOT NULL, запрещающее ввод в этот столбец нулевого значения.
Данное ограничение используется для проверки допустимости данных, вводимых в конкретный столбец таблицы, т.е. ограничение CHECK обеспечивает еще один уровень защиты данных.
CHECK задают диапазон возможных значений для столбца или столбцов. В основе CHECK лежит использование логических выражений.
Допускается применение нескольких ограничений CHECK к одному и тому же столбцу. В этом случае они будут применимы в той последовательности, в которой происходило их создание. Возможно применение одного и того же ограничения к разным столбцам и использование в логических выражениях значений других столбцов. Указание параметра NOT FOR REPLICATION предписывает не выполнять проверочных действий, если они выполняются подсистемой репликации.
CHECK с
CREATE RULE имя_правила AS выражение
Чтобы связать
sp_bindrule [@rulename=] 'rule' [@objname=] 'object_name' [,[@futureonly=['futureonly_flag']
Чтобы отменить
sp_unbindrule [@objname=] 'object_name' [,[@futureonly=['futureonly_flag']
Удаление
DROP RULE {имя_правила} [,...n].
Столбцу может быть присвоено значение по умолчанию. Оно будет актуальным в том случае, если пользователь не введет в столбец никакого иного значения.
Отдельно необходимо отметить пользу от использования значений по умолчанию при добавлении нового столбца в таблицу. Если для добавляемого столбца не разрешено хранение значений NULL и не определено значение по умолчанию, то операция добавления столбца закончится неудачей.
При определении в таблице столбца с параметром ROWGUIDCOL сервер автоматически определяет для него значение по умолчанию в виде функции NEWID(). Таким образом, для каждой новой строки будет автоматически генерироваться глобальный уникальный идентификатор.
Дополнительным механизмом использования значений по умолчанию являются объекты базы данных, созданные командой:
CREATE DEFAULT имя_умолчания AS константа
Умолчание связывается с тем или иным столбцом какой-либо таблицы с помощью процедуры:
sp_bindefault [@defname=] 'default', [@objname=] 'object_name' [,[@futureonly=] 'futureonly_flag'],
где
'object_name'
может быть представлен как
'имя_таблицы.имя_столбца'
Удаление
DROP DEFAULT {имя_умолчания} [,...n]
если предварительно это ограничение было удалено из всех таблиц процедурой
sp_unbindefault [@objname=] 'object_name' [,[@futureonly=] 'futureonly_flag']
При CONSTRAINT, чтобы присвоить ограничению имя, уникальное в пределах базы данных.
Ключевые слова CLUSTERED и NONCLUSTERED позволяют создать для столбца PRIMARY KEY по умолчанию создается UNIQUE - ASC и DESC определяют метод упорядочения данных в индексе.
С помощью параметра WITH FILLFACTOR=фактор_заполнения задается степень заполнения индексных страниц при создании индекса. Значение фактора заполнения указывается в процентах и может изменяться в промежутке от 0 до 100.
Параметр ON имя_группы_файлов обозначает группу, в которой предполагается хранить таблицу.
<изменение_таблицы> ::=
ALTER TABLE имя_таблицы
{[ALTER COLUMN имя_столбца
{ тип_данных [(точность[,масштаб])]
[ NULL | NOT NULL ]
| {ADD | DROP } ROWGUIDCOL }]
| ADD { [<определение_столбца>]
| имя_столбца AS выражение } [,...n]
| [WITH CHECK | WITH NOCHECK ]
ADD { <ограничение-таблицы> } [,...n]
| DROP
{ [CONSTRAINT ] имя_ограничения
| COLUMN имя_столбца}[,...n]
| {CHECK | NOCHECK } CONSTRAINT
{ALL | имя_ограничения[,...n]}
| {ENABLE | DISABLE } TRIGGER
{ALL | имя_триггера [,...n]}}
В дополнение к уже названным параметрам определим параметр {ENABLE | DISABLE } TRIGGER ALL, предписывающий задействовать или отключить конкретный триггер или все триггера, связанные с таблицей.
DROP TABLE имя_таблицы
Удалить можно любую таблицу, даже системную. К этому вопросу нужно подходить очень осторожно. Однако удалению не подлежат таблицы, если существуют объекты, ссылающиеся на них. К таким объектам относятся таблицы, связанные с удаляемой таблицей посредством
CREATE TABLE Товар
(КодТовара INT IDENTITY(1,1) PRIMARY KEY,
Название VARCHAR(50) NOT NULL UNIQUE,
Цена MONEY NOT NULL,
Тип VARCHAR(50) NOT NULL,
Сорт VARCHAR(50) NOT NULL
CHECK(сорт in('первый','второй','третий')),
Город VARCHAR(50) NOT NULL,
Остаток INT
CHECK(остаток>=0))
CREATE TABLE Клиент
(КодКлиента INT IDENTITY(1,1) PRIMARY KEY,
Фирма VARCHAR(50) NOT NULL,
Фамилия VARCHAR(50) NOT NULL,
Город VARCHAR(50) NOT NULL,
Телефон CHAR(10) NOT NULL
CHECK(Телефон LIKE
'[1-9][0-9]-[0-9][0-9]-[0-9][0-9]'))
CREATE TABLE Сделка
(КодСделки INT IDENTITY(1,1) PRIMARY KEY,
КодТовара INT NOT NULL,
КодКлиента INT NOT NULL,
Количество INT NOT NULL DEFAULT 0,
Дата DATETIME NOT NULL DEFAULT
GETDATE(),
CONSTRAINT fk_Товар
FOREIGN KEY(КодТовара) REFERENCES Товар,
CONSTRAINT fk_Клиент
FOREIGN KEY(КодКлиента) REFERENCES Клиент)
CREATE TABLE Склад (КодТовара INT PRIMARY KEY, Остаток INT)
ALTER TABLE Сделка DROP CONSTRAINT fk_Товар
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар FOREIGN KEY (КодТовара) REFERENCES товар ON UPDATE NO ACTION ON DELETE NO ACTION
ALTER TABLE Сделка ADD CONSTRAINT fk_Товар FOREIGN KEY (КодТовара) REFERENCES Товар ON UPDATE CASCADE ON DELETE CASCADE
ALTER TABLE Товар ADD Налог AS Цена*0.05 ALTER TABLE Товар DROP COLUMN Налог
Пусть создана таблица без ограничений:
CREATE TABLE Товар (КодТовара INT, Название VARCHAR(20), Тип VARCHAR(20), Дата DATETIME, Цена MONEY, Остаток INT)
Рассмотрим примеры внесения в таблицу всевозможных ограничений.
Пример 9.9. Поле КодТовара необходимо сделать первичным
ключом. Выполнение следующей команды будет отвергнуто, поскольку поле
КодТовара допускает внесение значений NULL.
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Сначала нужно изменить объявление столбца КодТовара, запретив внесение значений NULL:
ALTER TABLE Товар ALTER COLUMN КодТовара INT NOT NULL
И только потом создать
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Пример 9.10. Удалить столбец целого типа и добавить столбец-счетчик.
ALTER TABLE Товар DROP COLUMN КодТовара
ALTER TABLE Товар ADD
КодТовара INT IDENTITY(1,1)
Пример 9.11. Добавить
ALTER TABLE Товар ADD CONSTRAINT pk1 PRIMARY KEY(КодТовара)
Пример 9.12. Изменить столбец, добавив ограничение NOT NULL.
ALTER TABLE Товар ALTER COLUMN
Название VARCHAR(40) NOT NULL
Пример 9.13. Добавить ограничение уникальности значения.
ALTER TABLE Товар ADD CONSTRAINT
u1 UNIQUE(Название)
Пример 9.14. Создать умолчание и добавить умолчание столбцу.
CREATE DEFAULT df1 AS 0 sp_bindefault 'df1', 'Товар.Остаток' CREATE DEFAULT df2 AS GETDATE() sp_bindefault 'df2', 'Товар.Дата'
Пример 9.15. Создать правило и добавить правило столбцу.
CREATE RULE r1 AS @m IN
('мебель','бытовая химия','косметика')
sp_bindrule 'r1','Товар.Тип'
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.