Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пак Новакова + / LabSQL3(6-11)ЯрославцеваСоловьёв.doc
Скачиваний:
50
Добавлен:
03.06.2014
Размер:
1.52 Mб
Скачать

МИНОБР НАУКИ РОССИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ

УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ

ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» им. В. И.УЛЬЯНОВА (ЛЕНИНА)» (СПбГЭТУ)

ФАКУЛЬТЕТ КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ И ИНФОРМАТИКИ

КАФЕДРА СИСТЕМ АВТОМАТИЗИРОВАННОГО ПРОЕКТИРОВАНИЯ

ЛАБОРАТОРНЫЕ РАБОТЫ

по учебной дисциплине «Паттерны проектирования приложений»

на тему «Изучение основ T-SQL и программирование БД»

Часть 3

(Лабораторные 6-11)

Выполнили:

Ярославцева В.А.

Соловьёв С.П.

Группа: 9301

Факультет: КТИ

Преподаватель: Новакова Н.Е.

Санкт-Петербург

2012

Часть 3-6. Обеспечение целостности данных Упражнение 1 – Создание новой таблицы и применение ограничений целостности

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

  1. Создали новую таблицу с именем HumanResources.JobCandidateHistory.

В ней должны содержаться следующие столбцы и ограничения:

- JobCandidateID тип данных int, не может содержать пустые значения, они должны быть уникальны;

  • Resume тип данных xml, может содержать пустые значения;

  • Rating тип данных int, не может содержать пустые значения. Диапозон 1…10, по умолчанию 5;

  • RejectedDate тип данных detimе, не может содержать пустые значения;

  • ContactID тип данных int , может содержать пустые значения, внешний ключ для столбца ContactID в таблице Person.Contact.

CREATE TABLE HumanResources.JobCandidateHistory

(

JobCandidateID int NOT NULL UNIQUE,

Resume XML NULL ,

Rating int DEFAULT 5 NOT NULL,

CHECK(Rating BETWEEN 1 AND 10),

RejectedDate datetime NOT NULL,

ContactID int NULL ,

FOREIGN KEY (ContactID) REFERENCES Person.Contact (ContactID),

UNIQUE (JobCandidateID));

FOREIGN KEYуказывает на то, что столбец является внешним ключом.

  1. Проверили результат, убедившись что данная таблица есть в списке. Все столбцы и ограничения присутствуют.

Рис. 1

  1. Проверили таблицу и ограничения.

  1. Запустили на выполнение следующий код:

-- This should fail

USE AdventureWorks

TRUNCATE TABLE [HumanResources].[JobCandidateHistory]

GO

USE AdventureWorks

INSERT INTO [HumanResources].[JobCandidateHistory]

VALUES

(1,

'<ns:Resume xmlns:ns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume">

<ns:ResumeData></ns:ResumeData>

</ns:Resume>'

,-1

,GETDATE()

,1)

TRUNCATE TABLE [HumanResources].[JobCandidateHistory]

GO

Рис. 2

Операция INSERTзавершилась ошибкой, поскольку значениеRatingпротиворечит ограничениюCHECK.

  1. Запустили на выполнение еще один код:

-- This should succeed

USE AdventureWorks

INSERT INTO [HumanResources].[JobCandidateHistory]

VALUES

(1,

'<ns:Resume xmlns:ns="http://schemas.microsoft.com/sqlserver/2004/07/adventure-works/Resume">

<ns:ResumeData></ns:ResumeData>

</ns:Resume>'

,6

,GETDATE()

,1)

TRUNCATE TABLE [HumanResources].[JobCandidateHistory]

GO

Рис. 3

Запрос был выполнен успешно.

Упражнение 2 – отключение ограничений

  1. Для отключения ограничений выполнили следующие команды:

GO

ALTER TABLE HumanResources.JobCandidateHistory

NOCHECK CONSTRAINT [CK__JobCandid__Ratin__4CC05EF3]

GO

ALTER TABLE HumanResources.JobCandidateHistory

NOCHECK CONSTRAINT [DF__JobCandid__Ratin__4BCC3ABA]

GO

То есть мы сняли заданные нами ограничения.

  1. Открыли файл InserTtestData.sql

  1. Теперь опять включаем ограничения, выполнив следующие команды:

GO

ALTER TABLE HumanResources.JobCandidateHistory

CHECK CONSTRAINT [CK__JobCandid__Ratin__4CC05EF3]

GO

ALTER TABLE HumanResources.JobCandidateHistory

CHECK CONSTRAINT [DF__JobCandid__Ratin__4BCC3ABA]

GO

  1. Убедились в успешном выполнении команд

Рис. 4