Действие CASCADE заставляет SQL Server для инструкции DELETE удалить все строки, на которые делается ссылка (ON DELETE), и для инструкции UPDATE обновить все значения, на которые делается ссылка (ON UPDATE).
Если в том же примере программного кода изменяется столбец CustomerId в строке из таблицы Customers, все соответствующие строки в таблице Orders для отражения изменения обновляются тем же самым значением CustomerId.
Если для ограничения внешнего ключа задано действие ONDELETECASCADE и строка из таблицы Customers удаляется, все связанные с ней строки из таблицы Orders тоже удаляйся.
Ограничения CHECK. Ограничения CHECK— это набор правил, которые должны проверяться до того, как будет разрешено помещать данные в таблицу. К достоинствам применения этого типа ограничений относятся следующие.
♦ их просто реализовать (они очень похожи на предложение WHERE);
♦ они проверяются автоматически;
♦ они могут повышать производительность.
Простота проверочных ограничений — огромное преимущество по сравнению с использованием триггеров. Но существуют и некоторые недостатки, к ним относятся следующие:
♦ сообщения об ошибках, поступающие от проверочных ограничений, генерируются системой, и их нельзя заменить более понятными пользователям;
♦ проверочное ограничение не может "просмотреть" предыдущее значение столбца. Это означает, что оно не может применяться для некоторых типов данных в правилах целостности данных, таких как "Обновления столбца с ценой не могут увеличить или уменьшить цену на более чем 10%."
Создать таблицу, которая хранит информацию о клиентах.
1. Откройте среду Microsoft SQL Server Management Studio (SSMS) и установите соединение с экземпляром сервера SQL Server 2008.
2. В окне создания запроса введите и выполните следующие инструкции SQL для создания базы данных TestDB и схемы Test.
USE master;
GO
IF DB_ID ('TestDB') IS NOT NULL DROP DATABASE TestDB;
GO
CREATE DATABASE TestDB;
GO
USE TestDB;
GO
CREATE SCHEMA Test;
GO
3. В окне запроса в базе данных TestDB создайте новую таблицу со следующими свойствами:
• Еѐ имя должно быть Customers(Клиенты).
• Она должна находиться в схеме Test.
• У неѐ должны быть столбцы.
o CustomerId (Id клиента) - целое число в диапазоне от 1 до 100 000. У этого столбца значения должны увеличиваться автоматически. Первое значение должно быть равно 1000, а затем каждая последующая строка должна получать значение, увеличенное на 1. Это значение должно быть первичным ключом таблицы. o Name (Имя) – строка длиной до 50 символов.
• Ни в одном столбце не допустимы значения NULL.
Далее приведены правильные инструкции, но не используйте их, пока не попробуете создать таблицу самостоятельно.
USE TestDB;
GO
CREATE TABLE Test.Customers (
CustomerId INT IDENTITY(1000, 1) NOT NULL
CONSTRAINT PKCustomers PRIMARY KEY
,Name NVARCHAR(50) NOT NULL );
4. В окне запроса в базе данных TestDB создайте новую таблицу со следующими свойствами:
• Еѐ имя должно быть Orders (Заказы).
• Она должна находиться в схеме Test.
• У неѐ должны быть столбцы.
o OrderId (Id заказа) - целое число в диапазоне от 1 до 100 000. У этого столбца значения должны увеличиваться автоматически. Первое значение должно быть равно 1000, а затем каждая последующая строка должна получать значение, увеличенное на 1. Это значение должно быть первичным ключом таблицы.
o OrderDate (Дата заказа) – дата. Если значение не задано, автоматически должна быть добавлена текущая дата.
o CustomerId должен ссылаться на строку с тем же значением в столбце CustomerId таблицы Test.Customers.
o
• Ни в одном столбце не допустимы значения NULL.
Далее приведены правильные инструкции, но не используйте их, пока не попробуете создать таблицу самостоятельно.
CREATE TABLE Test.Orders (
OrderId INT IDENTITY(1000, 1) NOT NULL
,OrderDate DATE NOT NULL DEFAULT SYSDATETIME()
,CustomerId INT NOT NULL
CONSTRAINT FKOrdersCustomerId
REFERENCES Test.Customers (CustomerId)
);
В созданные таблицы ставьте дополнительные ограничения.
1. Откройте новое окно создания запроса, введите и выполните инструкцию для использования базы данных TestDB.
USE TestDB;
2. В окне запроса добавьте ограничение, которое провепяет, начинается ли с буквы столбец Name в таблице Test.Customers и равна ли его длина как минимум трем символам.
ALTER TABLE Test.Customers
ADD CONSTRAINT CKCustomerName
CHECK(Name LIKE N'[A-Z]__%');
3. В окне запроса добавьте ограничение, которое провепяет, содержит ли текущую дату столбец OrderDate в таблице Test.Orders.
ALTER TABLE Test.Orders
ADD CONSTRAINT CKOrdersOrderDate
CHECK(OrderDate = CAST(SYSDATETIME() AS DATE));
4. Удалите базу данных.
USE master;
GO
DROP DATABASE TestDB;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.