- •Лабораторная работа № 3 Использование диаграмм для графического представления структуры базы данных
- •Теоретическое обоснование
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Содержание отчета и его форма
- •Методика и порядок выполнения работы
- •Select ...
- •Методика и порядок выполнения работы
- •Контрольные вопросы
- •Лабораторная работа № 7 Использование ограничений в sql – совместимых базах данных
- •Теоретическое обоснование
- •Контрольные вопросы
- •Лабораторная работа № 8 Хранимые процедуры в sql Server
- •Теоретическое обоснование
- •Задания к лабораторной работе № 7
- •Контрольные вопросы
- •Лабораторная работа № 9 Триггеры в sql Server
- •Использование триггеров
- •Срабатывание триггеров
- •Создание триггеров
- •Удаление триггеров
- •Таблицы deleted и inserted
- •Просмотр таблиц deleted и inserted
- •Вставка и удаление нескольких записей
- •Триггер вставки
- •Условный триггер вставки
- •Триггер обновления
- •Задание к лабораторной работе № 9
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Содержание отчета и его форма
- •Контрольные вопросы и защита работы
- •Лабораторная работа № 11
- •Обеспечение безопасности пользователей в sql Server
- •Цель и содержание:изучить основные приемы администрирования баз данных вSqlServer, рассмотреть возможность добавления новых пользователей в систему и разграничения их полномочий.
- •Теоретическое обоснование
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Методика и порядок выполнения задания 3
- •Содержание отчета и его форма
- •Методика и порядок выполнения работы Методика и порядок выполнения задания 1
- •Методика и порядок выполнения задания 2
- •Методика и порядок выполнения задания 3
- •Содержание отчета и его форма
- •Контрольные вопросы
- •Лабораторная работа № 14 Организация обмена данными. Взаимодействие sql-сервера с Word и Excel
- •Контрольные вопросы
- •Лабораторная работа № 15 Организация обмена данными. Взаимодействие sql-сервера и локальных баз данных Access и FoxPro
- •Взаимодействие sql-сервера и Visual FoxPro
- •Контрольные вопросы
Контрольные вопросы
1. Внешний ключ. Определение.
2. Сформулируйте определение первичного ключа.
3. Последовательность действий при создании внешнего ключа.
4. Алгоритм создания первичного ключа.
5. Каким образом можно произвести удаление ключа в SQL Server.
Лабораторная работа № 7 Использование ограничений в sql – совместимых базах данных
Цель и содержание: изучить методы контроля за целостностью данных в SQL – совместимых базах данных; изучить возможности применения ограничений пользователя в SQL – совместимых базах данных.
Теоретическое обоснование
С помощью механизма ограничений осуществляется контроль целостности данных в таблице. SQL-сервер позволяет onpeделить ограничения, используемые для проверки допустимости данных, указать набор определенных значений и т.д. Рассмотрим использование данной возможности на следующих примерах.
В таблице PREDMET базы данных EDUCATION имеется поле COURS, содержащее в себе порядковый номер курса, на котором проводятся занятия по данному предмету. Установим ограничение на ввод значений в это поле в диапазоне от 1 до 5.
Рассмотрим процесс создания ограничений для таблицы с помощью утилиты Enterprise Manager, для чего приведем порядок действии, необходимый для решения поставленной задачи:
выберите необходимую таблицу в списке объектов базы Данных, в нашем случае PREDMET;
выполните команду Design Table меню Action, посте чего та экране отобразится диалоговое окно дизайнера таблиц;
в дизайнере таблиц выберите кнопку Table and Index Priperties, с помощью которой отобразится диалоговое окно свойств данной таблицы;
нажатие кнопки New приведет к созданию нового ограничения с именем CK_PREDMET, после чего в поле Соnstraint expression необходимо будет ввести SQL-комавду проверки вводимых значений;
для проверки корректности ввода значений воспользуемся следующим SQL-кодом: cours between 1 and 5
закройте данное окно свойств и дизайнер таблиц, после чего проверьте корректность работы созданного ограничения. Создайте самостоятельно ограничения на ввод значений в таблицы.
Задание. Для разработанной в задании 1 лабораторной работы № 1 структуры данных, установите ограничения на ввод данных пользователя.
Контрольные вопросы
1. Для чего используются методы контроля данных в SQL – совместимых базах данных?
2. Порядок действий при установке ограничений на значения полей.
Лабораторная работа № 8 Хранимые процедуры в sql Server
Цель работы: познакомить студентов с понятием хранимая процедура, рассмотреть основные методы их создания.
Теоретическое обоснование
Хранимые процедуры - представляют собой процессы, выполняемые непосредственно на сервере баз данных. Для этого используется утилита SQL Server Enterprise Manager.
Все хранимые процедуры в базе данных находятся в специально отведенном списке Stored Procedures. Следует обратить внимание на перечень системных процедур, используемых при работе SQL-сервера, список которых также находится в этой группе.
При этом в колонке Type возле имени процедур находится ключевое слово System, которое показывает принадлежность данной процедуры к группе системных процедур. С другой стороны, все процедуры, создаваемые пользователем, помечаются ключевым словом User в колонке Type.
Для создания новой процедуры выберите команду New Stored Procedures меню Action, после чего на экране отобразится диалоговое окно, в котором будет расположена область для ввода текста процедуры.
Рассмотрим использование хранимых процедур на примерах. В начале создадим простую процедуру, позволяющую увеличить на единицу значение поля COURS таблицы PREDMET базы данных EDUCATION.
Данное действие может быть полезно, например, при переводе всех студентов на следующий курс обучения. В базе данных EDUCATION соответствующее поле отсутствует, поэтому отработаем этот механизм на примере поля COURS таблицы PREDMET.
Для решения данной задачи создадим новую хранимую процедуру, после чего системой будет предложена SQL-комавда, используемая для создания процедуры:
CREATE PROCEDURE [PROCEDURE NAME] AS
Здесь вместо текста [PROCEDURE NAME] необходимо ввести имя создаваемой процедуры, после чего набрать текст ее команд. В нашем примере будет использоваться SQL-команда UPDATE. позволяющая изменять данные в таблицах. Текст процедуры NEW_COURS, реализующий описанное действие будет иметь следующий вид:
CREATE PROCEDURE NEW_COURS AS
UPDATE PREDMET
SET COURS = COURS + 1
Следующим этапом будет проверка работоспособности созданной процедуры. Для этого запустите утилиту SQL Server Query Analyzer, после чего осуществите подключение к требуемому серверу баз данных. Выберите базу данных EDUCATION в выпадающем списке DB. после чего введите следующие SQL-команды:
ЕХЕС NEW_COURS
SELECT * FROM PREDMET
При помощи SQL-команды ЕХЕС осуществляется запуск хранимых процедур, причем весь процесс их выполнения происходит на самом компьютере - сервере. Использование хранимых процедур существенно отражается на производительности компьютеров рабочих станций. Другими словами, данная технология позволяет использовать компьютеры рабочих станций на уровне клавиатурного ввода, а все основные задачи при этом перекладываются на компьютер-сервер.
Результатом работы представленных команд будет следующая таблица:
|
PNUM |
PNAME |
TNUM |
HOURS |
COURS |
|
2001 |
Физика |
4001 |
34 |
2 |
|
2002 |
Химия |
4002 |
68 |
2 |
|
2003 |
Математика |
4003 |
68 |
2 |
|
2004 |
Философия |
4005 |
17 |
3 |
|
2005 |
Экономика |
4004 |
17 |
4 |
(5 row(s) affected)
Следующий пример использования хранимых процедур будет использовать в процессе работы передаваемые параметры.
Пример. Необходимо создать процедуру, которая увеличит значение стипендии на определенный процент при указании суммы, для которой будет произведена данная индексация.
Для решения данной задачи создадим новую хранимую процедуру IND_STIP_KF со следующим SQL-кодом:
CREATE PROCEDURE IND_STIP_КF
(@KF_INDEX REAL, @FOR_SUM SMALLMONEY )
AS
UPDATE STUDENTS
SET STIP = STIP * @KF_INDEX
WHERE STIP = @FOR_SUM
Здесь следует обратить внимание на использование переменных-параметров, принимаемых процедурой. Так, каждая переменная внутри хранимой процедуры описывается следующим образом: @ имя_переменной тип_ данных. Если в процедуру передается несколько параметров, то они указываются через запятую в скобках после ее имени. В нашем случае в процедуру передаются переменные @KF_INDEX (коэффициент, на который будет увеличиваться сумма стипендии) и @FOR_SUM (сумма стипендии, для которой будет произведено изменение).
Проверим работу данной процедуры на примере. С этой целью осуществим ее запуск для следующего случая: необходимо установить 20-процентную надбавку к стипендии студентам, у которых сумма стипендии равняется 25.5
SQL-команда, выполняющая запуск процедуры IND_STIP_KF выглядит следующим образом:
ЕХЕС IND_STIP_KF @KF_INDEX=1.2, @FOR_SUM==25.5
SELECT * FROM STUDENTS
При этом в окне утилиты SQL Server Query Analyzer отобразится следующая информация:
(2 row(s) affected)
|
SNUM |
SFAM |
SIMA |
SOTCH |
STIP |
|
3412 |
Поляков |
Анатолий |
Алексеевич |
30.6000 |
|
3413 |
Старова |
Любовь |
Михайловна |
17.0000 |
|
3414 |
Гриценко |
Владимир |
Николаевич |
. 0000 |
|
3415 |
Котенко |
Анатолий |
Николаевич |
.0000 |
|
3416 |
Нагорный |
Евгений |
Васильевич |
30.6000 |
(5 row(s) affected)
Использование команды SELECT при запуске не является обязательным. В нашем случае она употребляется для проверки произведенных операций.
Представленные выше процедуры не полностью отражают преимущества использования хранимых процедур. Максимально оценить достоинства данной технологии можно используя, так называемые операторы управления.
Следующая конструкция позволяет определить выполнение операций в зависимости от определенного условия:
IF выражение
операторы
[ELSE]
[IF выражение] операторы
Например, необходимо выполнить операцию индексирования стипендии студента только в том случае, если им посещались занятия по определенному предмету. Для этого в хранимую процедуру будут передаваться три параметра: @SNUM_PM - номер студенческого билет, @PNUM_PM - код предмета и @IND_KF -процент индексации стипендии. SQL-код создания данной процедуры IND_STIP_PREDMET будет иметь следующий вид:
CREATE PROCEDURE IND_STIP_PREDMET
(@S3STUM_PM INT,
@PNUM_PM SMALLINT,
@IND_KF REAL)
AS
IF EXISTS (SELECT SNUM, PNUM FROM USP
WHERE SNUM = @SNUM_PM
AND PNUM = @PNUM_PM)
UPDATE STUDENTS
SET STIP = STIP * @IND_KF
При этом следует обратить внимание на использование ключевого слова EXISTS, благодаря чему проверяется наличие данный, обусловленных предикатом.
Для проверки работоспособности данной процедуры осуществите ее запуск дважды следующим образом:
ЕХЕС IND_STIP_PREDMET @SNUM_PM = 3412,
@PNUM_PM = 2001, @IND_KF = 2
и
ЕХЕС IND_STIP_PREDMET @SNUM_PM = 3414,
@PNUM_PM = 2003, @ IND_KF = 2
В результате первого запуска увеличится стипендия студента Полякова Анатолия Алексеевич в два раза. Второй запуск процедуры не приведет к каким-либо изменениям из-за отсутствия оценки по математике у студента Гриценко Владимира Николаевича.
Если имеется необходимость в использовании нескольких подряд идущих операторов, то в этом случае необходимо воспользоваться следующей конструкцией:
BEGIN
операторы
END
Например, если в приведенной процедуре IND_STIP_PREDMET потребуется добавить операцию удаления информации об оценке студента, удовлетворяющей представленному условию, то текст этой процедуры будет иметь следующий вид:
CREATE PROCEDURE IND_STIP_PREDMET
(@SNUM__PM INT,
@PNUM_PM SMALLINT,
@IND_KF REAL)
AS
IF EXISTS (SELECT SNUM, PNUM FROM USP
WHERE SNUM = @SNUM_PM
AND PNUM = @PNUM_PM)
BEGIN
UPDATE STUDENTS
SET STIP = STIP * @IND_KF
DELETE FROM USP
WHERE PNUM = @PNUM_PM
AND SNUM = @SNUMJPM
END
Рассмотрим еще несколько структур, расширяющих возможности использования хранимых процедур.
Циклическое выполнение операций в хранимых процедурах удобно организовывать с помощью следующей структуры:
WHILE
логическое выражение
операторы
Для изучения возможностей данной конструкции, рассмотрим простой пример нахождения значения факториала числа:
CREATE PROCEDURE FACTORIAL @N INT
AS
DECLARE @X INT
DECLARE @I INT
SELECT @I = 2
SELECT @X = 1
WHILE @I <= @N
BEGIN
SELECT @X = @X * @I
SELECT @I = @I + 1
END
PRINT ‘Получен факториал:’
PRINT @X
В данном случае нам потребовались две дополнительные переменные, для использования которых используется директива DECLARE. При этом, если необходимо присвоить какое-либо значение данным переменных, используется ключевое слово SELECT. Оператор PRINT позволяет выдать текстовое сообщение на устройство вывода, в нашем случае на экран.
В операторе WHILE можно также использовать ключевое слово BREAK, которое позволяет прервать выполнение этого цикла. Его обычно используют при определении условия. Например, в нашем случае можно внутри цикла контролировать превышение допустимого значения переменной используемого типа, в результате чего система выведет курсор выполнения процедуры за пределы цикла. Здесь также может использоваться ключевое слово CONTINUE, что позволяет продолжить выполнение операторов, содержащихся внутри конструкции WHILE.
В хранимых процедурах также можно использовать метки и оператор перехода между ними GOTO. Рассмотренный выше пример с использованием данной возможности будет иметь следующий вид:
CREATE PROCEDURE GOTOFACTORIAL @N INT
AS
DECLARE @X INT
DECLARE @I INT
SELECT @I = 1
SELECT @X = 1
МЕТКА:
SELECT @X = @X * @I
SELECT @I = @I + 1
IF @I <= @N GOTO МЕТКА
PRINT ’Получен факториал:’
PRINT @X
В хранимых процедурах используется также конструкция CASE, реализующая выбор одного из нескольких значений. Рассмотрим использование этой возможности на простом примере: в процедуру передается числовое значение, в зависимости, от которого система устанавливает ставку стипендии студента.
CREATE PROCEDURE PROVERKA @N TINYINT
AS
BEGIN
DECLARE @X REAL
SELECT @X =
CASE @N
WHEN 1 THEN 17
WHEN 2 THEN 25.50
WHEN 3 THEN 34
ELSE 0
END
PRINT 'Установлена стипендия:'
PRINT @X
END
Использование оператора RETURN в хранимых процедурах позволяет завершить работу запроса или процедуры, а также передать значение вызывающей подпрограмме.
В хранимых процедурах часто используются так называемые системные переменные, которые представляют пользователю определенную информацию о системе SQL-сервер.
