Разработка и эксплуатация удаленных баз данных

advertisement
АВТОНОМНАЯ НЕКОММЕРЧЕСКАЯ ОБРАЗОВАТЕЛЬНАЯ ОРГАНИЗАЦИЯ
ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
« ИНДУСТРИАЛЬНЫЙ ИНСТИТУТ »
Кафедра информационных систем и программирования
ФОНД ОЦЕНОЧНЫХ СРЕДСТВ
ПО УЧЕБНОЙ ДИСЦИПЛИНЕ
«РАЗРАБОТКА И ЭКСПЛУАТАЦИЯ УДАЛЕННЫХ БАЗ ДАННЫХ»
Рассмотрены и утверждены на заседании
кафедры информационных систем и программирования
,
протокол №___от «_____» __________ 201_ г.
Зав. кафедрой___________/ М.В. Кузнецова /
УТВЕРЖДАЮ:
Заведующий кафедрой информационных систем и программирования
__________________ Д.В.Тюпин
(подпись, расшифровка подписи)
протокол №___от «_____» __________ 201_ г.
6.1. Перечень вопросов, выносимых на экзамен
1. Режимы работы с базой данных, их характеристика. ПК-5, ПК-4, ПК-2
2. Модель «клиент – сервер». ПК-5, ПК-4, ПК-2
3. Структура типичного приложения, работающего с БД. ПК-5, ПК-4, ПК-2
4. Основные принципы технологии «клиент – сервер». ПК-5, ПК-4, ПК-2, ОК-2
5. Характеристика модели файл – сервера. ПК-5, ПК-4, ОК-2
6. Характеристика модели удалённого доступа к данным. ПК-5, ПК-2
7. Достоинства и недостатки модели удалённого доступа к данным. ПК-5, ПК-4, ПК-2
8. Характеристика модели сервера баз данных. ПК-5, ПК-4, ПК-2
9. Характеристика модели активного сервера баз данных. ПК-5, ПК-4, ПК-2
10.Функции активного сервера баз данных. ПК-5, ПК-4, ПК-2
11.Структура модели активного сервера баз данных. ПК-5, ПК-4, ПК-2
12.Трёхуровневая модель сервера баз данных. ПК-5, ПК-4, ПК-2
13.Структура трёхуровневой модели сервера баз данных. ПК-5, ОК-2
14.Недостатки трёхуровневых моделей серверов баз данных. ПК-5, ПК-4, ПК-2
15.Взаимодействие серверных и клиентских процессов в однопотоковой серверной архитектуре.
ПК-5, ПК-4, ПК-2
16.Характеристика многопотоковой односерверной архитектуры. ПК-5, ОК-2
17.Характеристика архитектуры виртуального сервера. ПК-5, ПК-4, ПК-2
18.Характеристика многопотоковой мультисерверной архитектуры. ПК-5, ПК-4, ПК-2
19.Характеристика типов параллелизма. ПК-5, ПК-4, ПК-2
20.Выполнение запроса при вертикальном параллелизме. ПК-5, ПК-4, ПК-2
21.Выполнение запроса при горизонтальном параллелизме. ПК-5, ПК-4, ПК-2
22.Выполнение запроса при гибридном параллелизме. ПК-5, ПК-4, ПК-2
23.Характеристика понятия транзакции, типы транзакций. ПК-5, ПК-4, ПК-2
24.Характеристика понятия транзакции, свойства транзакций. ПК-5, ПК-4,ОК-2
25.Характеристика понятия транзакции, варианты завершения транзакций. ПК-5, ПК-4, ПК-2
26. Понятие журнала транзакций, его функции. ПК-5, ПК-4, ПК-2
27.Два варианта ведения журнальной транзакции, их достоинства и недостатки. ПК-5, ПК-4, ПК-2
28. Характеристика ситуаций, при которых требуется восстановление базы данных.
ПК-5, ПК-4, ПК-2
29.Структура журнала транзакций. ПК-5, ПК-4, ПК-2
30. Ведение журнала транзакций по принципу отложенных изменений. ПК-5, ПК-2
31.Ведение журнала транзакций с немедленным выполнением изменений в базе данных.
ПК-5, ПК-4, ПК-2
32.. Механизм восстановления базы данных при сбое. ПК-5, ПК-4, ПК-2
2
33. Защита базы данных на уровне пользователя. ПК-5, ПК-4, ПК-2
34. Структура рабочей группы. ПК-5, ПК-2
35.Ограничения при создании рабочих групп и регистрации пользователей в базе данных.
ПК-5, ПК-4, ПК-2
36.Характеристика файла рабочей группы. ПК-5, ПК-4, ПК-2
37.Характеристика типов прав доступа. ПК-5, ПК-4
38.Установка защиты базы данных на уровне пользователя. ПК-5, ПК-4, ПК-2
39.Манипуляция с файлами рабочей группы. ПК-5, ПК-4, ПК-2
40.Функции администратора рабочей группы. ПК-5, ПК-4
41.Технология активации окна входа в систему базы данных. ПК-5, ПК-4, ПК-2
42.Определение прав пользователей и рабочих групп. ПК-5, ПК-4, ПК-2
43.Шифрование базы данных. ПК-5, ПК-4,
44.Скрытие объектов базы данных. ПК-5, ПК-4, ПК-2
45.Репликация базы данных. ПК-5, ПК-4, ПК-2
46.Функции репликации базы данных. ПК-4, ПК-2
47.Образование основной реплики базы данных. ПК-5, ПК-4, ПК-2
48.Синхронизация базы данных. ПК-5, ПК-4, ПК-2
49.Отличия и преимущества удалённых баз данных. ПК-5, ПК-4, ПК-2
50.Понятие локальной сети, сервера, рабочей станции. ПК-4, ПК-2
51.Преимущества и недостатки, место применения двухзвенной и трёхзвенной архитектуры.
ПК-5, ПК-4, ПК-2
52.Приёмы графического проектирования базы данных. ПК-5, ПК-4
53.Просмотр и модификация созданной структуры базы данных. ПК-5, ПК-4, ПК-2
54.Команды по созданию и перемещению файла базы данных. ПК-5, ПК-4, ОК-2
55.Назначение и структура файлов базы данных. ПК-5, ПК-4, ПК-2
56.Команды по созданию, модификации и удалению таблицы. ПК-5, ПК-4, ПК-2
57.Команды по созданию, просмотру, перестройке и удалению индексов. ПК-5, ПК-4, ПК-2
58.Вывод на экран справки о структуре таблицы. ПК-5, ПК-4, ПК-2
59.Формирование, редактирование и выполнение запроса на выборку данных.
ПК-5, ПК-4, ПК-2
60.Различные методы сортировки, поиска и фильтрации данных. ПК-5, ПК-4, ПК-2
61.Назначение и виды отчётов. Мастер отчётов и конструктор отчётов. ПК-5, ПК-4, ПК-2
62.Простые и сложные запросы на выборку (сортировка, группировка. вычисляемые поля.
составные операторы выборки) ПК-5, ПК-4, ОК-2
1.2 Образцы тестовых заданий для самостоятельной работы
Самостоятельная работа по теме Реляционный способ доступа к базе данных
Цель работы:
Организовать реляционный доступ к базе данных и осуществить отбор данных в
таблице с помощью оператора Select структурированного языка запросов SQL.
Основные понятия:
Оператор Select.
Реляционный способ доступа к базе данных основывается на операциях с группами
записей. Для задания операций используются средства структурированного языка
запросов SQL. Отбор данных заключается в выборке из таблиц полей и записей,
удовлетворяющих заданным условиям.
Результат выполнения запроса называют выборкой. Для осуществления выборки
применяется операция Select. Синтаксис оператора Select:
Select [distinct] <список полей или *>
From <список таблиц>
[Where <условие отбора>]
3
[Order by <список полей, по которым производится сортировка>]
[Group by <список полей, по которым производится группировка>]
[Having <условие группировки>]
[Union <вложенный оператор Select для объединения с данным>]
Distinct – означает что в выборку попадают записи с неповторяющимися значениями
поля, рядом с которым указано данное ключевое слово.
From – определяет таблицы, из которых выполняется выборка.
Where – задает критерии (условия) отбора, которым должны удовлетворять записи в
результирующем наборе данных.
Order by – содержит список полей, определяющих порядок сортировки записей
результирующего набора данных.
Group by – позволяет выделить группы записей в результирующем наборе данных.
Группой называется набор записей с одинаковыми значениями в полях, перечисленных
после
опции
Group by.
Having – используется совместно с опцией Group by для отбора записей внутри групп.
Форма представления условия отбора, задаваемого после ключевого слова WHERE.
Это условие определяет критерий, по которому отбираются записи. Оператор Select
отбирает только те записи, в которых заданное условие истинно. Условие может включать
имена полей (кроме вычисляемых полей), константы, логические выражения, содержащие
арифметические операции, логические операции and, or, not и операции отношения:
=
равно
>
больше
>=
больше или равно
<
меньше
<=
меньше или равно
!= или < >
Like
не равно
наличие заданной последовательности символов
between ... and
диапазон значений
in
соответствие элементу множества
Операция Like имеет синтаксис:
<поле> LIKE '<последовательность символов>'
Эта операция применима к полям типа строк и возвращает true, если в строке
встретился фрагмент, заданный в операции как <последовательность символов>.
Заданным символам может предшествовать и их может завершать символ процента «%»,
который означает — любое количество любых символов. Если символ процента не указан,
то заданная последовательность символов должна соответствовать только целому слову.
Например, условие
Fam LIKE 'A%'
означает, что будут отобраны все записи, начинающиеся с заглавной русской буквы
«А» (операция Like различает строчные и прописные символы). Условию
Fam LIKE
'Иванов%' будут удовлетворять фамилии «Иванов» и «Иванова», а
условию
Fam LIKE '%ван%'
кроме этих фамилий будет удовлетворять, например, фамилия «Иванников».
Операция between ... and имеет синтаксис:
4
<поле> between <значение> and <значение>
и задает для указанного поля диапазон отбираемых значений. Например, оператор
SELECT Fam, Year_b FROM Pers
WHERE Year_b BETWEEN 1960 AND 1970
отберет записи сотрудников в заданном диапазоне возраста.
Операция In имеет синтаксис:
<поле> in (<множество>)
и отбирает записи, в которых значение указанного поля является одним из элементов
указанного множества.
Элемент оператора Select, начинающийся с ключевых слов ORDER BY, определяет
упорядочивание (сортировку) записей. После этих ключевых слов следует список полей,
определяющих сортировку. Можно указывать только поля, фигурирующие в списке
отобранных (в списке после ключевого слова SELECT).
Если в списке сортировки указано только одно поле, то сортировка производится по
умолчанию в порядке нарастания значений этого поля. Если желательно располагать
результаты по убыванию значений, то после имени поля добавляется ключевое слово
DESC:
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Year_b DESC
Если в списке после ORDER BY перечисляется несколько полей, то первое из них —
главное и сортировка проводится прежде всего по значениям этого поля. Записи,
имеющие одинаковое значение первого поля упорядочиваются по значениям второго поля
и т.д. Например, оператор
SELECT Dep, Fam, Year_b FROM Pers ORDER BY Dep, Fam
сортирует записи прежде всего по отделам (значениям поля Dep), а внутри каждого
отдела — по алфавиту.
После ключевого слова Select в оператор могут вставляться ключевые слова
DISTINCT или ALL. Первое из них означает, что в результирующий набор данных не
включаются повторяющиеся записи. Повторяющимися считаются те записи, в которых
совпадают значения полей, перечисленных в списке оператора Select. Ключевое слово
ALL означает включение всех записей. Оно подразумевается по умолчанию, так что
вставлять его в оператор не имеет смысла.
Использование SQL – запросов в приложении Delphi.
В зависимости от способа формирования SQL – запроса могут быть:
- статические запросы;
- динамические запросы.
Статические запросы формируются при разработке приложения и в процессе
выполнения приложения не могут изменяться. Они записываются в свойстве SQL
компонента Query. Статический запрос может быть динамически настраиваемым с
помощью параметров.
Динамические настройки статического запроса: во время выполнения приложения
в его тексте можно использовать параметры – переменные, перед именами которых в
тексте запроса ставится двоеточие. А в процессе выполнения приложения вместо
параметра подставляется его значение, например:
статический запрос, динамически настраиваемый через параметры:
значение свойства SQL компонента Query1:
select Fam, Dolg, Oclad from Person where Oclad >= :prmOclad
Динамическая настройка статического запроса через параметры:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.ParamByName(‘prmOclad’).Value := StrToFloat(Edit1.Text);
5
Query1.Open;
end;
Все параметры, введенные в статическом запросе в свойстве SQL, находятся в виде
массива в свойстве Params набора данных (Query1). Это свойство позволяет получить
доступ к каждому параметру при разработке и выполнении приложения. На этапе
разработки можно вызвать редактор параметров в инспекторе объектов.
Тип каждого параметра необходимо указать в свойстве DataType. Например, для
prmOclad необходимо указать тип ffFloat. Перед выполнением запроса вместо параметра
необходимо подставить его значение из поля ввода Edit1, как это показано в примере
динамической настройки статического запроса.
Задавать значение параметра можно двумя способами: обращаясь по имени
параметра или по его номеру, например:
Query1.Params.ParamByName(‘Year_b’).AsInteger := 1965;
Query1.Params[1] .AsInteger := 1965;
Динамические запросы формируются или изменяются при выполнении
приложения. Такой запрос применяется, когда его текст зависит от действий
пользователя. Например, при управлении сортировкой набора данных:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘Select * from Person’);
case RadioGroup1.ItemIndex of
0: str := ‘order by fam’;
1: str := ‘order by podr’;
end;
Query1.SQL.Add(str);
Query1.Open;
end;
Пример динамически формируемого запроса:
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(‘Select Fam, Dolg, Oclad from Person’);
Query1.SQL.Add(‘where oclad>=’+Edit1.Text);
Query1.Open;
end;
Пример выполнения работы:
Использование статического запроса.
Например, необходимо получить выборку, содержащую информацию о количестве
сотрудников по годам рождения. Для этого необходимо сформировать запрос с
группировкой по годам и применением агрегатной функции Count (количество). Для
получения данной выборки можно сформировать следующий SQL запрос:
select Year_b, count(*) from Person group by Year_b order by Year_b
Программная реализация получения данной выборки может быть выполнена
следующим образом:
6
На главной форме Form1 (Unit1) разместить компоненты: Button1, Query1,
DataSource1, DBGrid1, DBNavigator1.
В свойстве DatabaseName компонента Query1 указать псевдоним базы данных.
В свойство SQL компонента Query1 ввести выше приведенный текст запроса.
Связать компонент DataSource1 с компонентом Query1 при помощи свойства
DataSet.
Связать компоненты DBGrid1 и DBNavigator1 с компонентом DataSource1 при
помощи свойства DataSource.
В свойство Caption компонента Button1 ввести текст «Выполнить запрос».
Написать обработчик события OnClick кнопки Button1 следующим образом
procedure TForm1.Button1Click(Sender: TObject);
begin
if Query1.Active then
Query1.Close;
Query1.Open;
end;
Для ввода и изменения значения свойства SQL компоненты Query1 следует
модернизировать форму, добавив компоненту Edit1, в которую будет вводиться запрос
Select.
Написать обработчик события OnClick кнопки Button1 следующим образом
procedure TForm1.Button1Click(Sender: TObject);
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add(Edit1.Text);
Query1.Open;
end;
Задание:
1. Создать таблицу Person, содержащую список сотрудников предприятия с указанием
фамилии (Fam), имени (Name), отчества (Otch), оклада (Oclad), должности (Dolz),
подразделения (Podr), год рождения (Year_b), пол (Sex) и другие данные. Для создания
таблицы использовать программу Database DeskTop. Для доступа к таблице создать
псевдоним средствами BDE Administrator. Для ввода данных в таблицу использовать
программу SQL Explorer.
2. Для таблицы Person написать следующие запросы:
1) получить выборку всех записей таблицы;
2) вывести фамилии сотрудников - инженеров;
3) вывести список всех должностей;
4) вывести фамилии и подразделения всех сотрудников, у которых оклад больше 3000
рублей;
5) вывести фамилии всех сотрудников – инженеров, у которых оклад меньше 3000
рублей;
6) вывести фамилии всех сотрудников сгруппированных по подразделениям;
7) вывести список сотрудников по алфавиту, содержащий следующие поля: Fam;
Name; Otch; Dolz; Podr.
8) Вывести записи, относящиеся к женщинам, родившимся после 1960 года
7
9) Вывести записи сотрудников в заданном диапазоне возраста (с 1960 по 1970 год)
10) Вывести записи сотрудников из указанного множества (Иванов, Петров, Сидоров,
Кузнецов).
3. Реализовать выше перечисленные выборки из таблицы Person с помощью компонента
Query и компонента визуализации dbGrid в приложении Delphi. Использовать как
статические, так и динамические запросы.
Контрольные вопросы:
Как реализуется реляционный способ доступа к базам данных?
Какие средства используются для операций с группами записей?
Какой оператор обеспечивает формирование выборки?
Как обеспечить получение выборки с неповторяющимися записями?
Сформируйте запросы для получения следующих выборок из таблицы Tovar (name,
vid_tov, kol, cena)
- список всех видов товаров;
- список всех наименований товаров с указанием количества и цены, упорядоченных
по наименованиям в алфавитном порядке;
- список товаров сгруппированных по видам;
- список товаров с указанием общей стоимости товара одного наименования.
6. Какой компонент используется в Delphi для создания запросов к удаленной базе
данных?
7. Нарисуйте схему связи компонента визуализации DBGrid с компонентом Query и
таблицей базы данных?
8. Как создать статический запрос?
9. Что такое динамический запрос?
10. Объясните способ применения параметров при создании запросов с помощью
компонента Query.
1.
2.
3.
4.
5.
Содержание отчета:
Отчет должен содержать:
- цель работы;
- основные определения и понятия
- описание выполнения примера;
- описание выполнения задания :
o описание таблицы person
o запросы
o описания реализации запросов в приложении
- вывод о проделанной работе.
Список литературы:
1. Гофман В.Э., Хомоненко А.Д. Delphi 7. СПб: БХВ – Санкт-Петербург, 2000
2. Архангельский А.Я. Программирование в Delphi 5 – М.: ЗАО «Издательство БИНОМ»,
2000
3. Хомоненко А.Д., Цыганков В.М., Мальцев М. Г. Базы данных. – СПб.: КОРОНА
принт, 2000
Самостоятельная работа по теме Создание серверной части приложения: alias, файл
базы данных, таблицы
8
Цель работы:
Приобретение навыков в определении необходимого размера базы данных и
журнала транзакций. Создание основы серверной части приложения и управление базой
данных: создание и удаление базы данных, создание и удаление таблиц базы данных,
создание, модификация и удаление столбцов таблицы.
Основные понятия:
В процессе создания базы данных создается структура хранилища данных, включающая,
по крайней мере, один файл данных и один файл журнала транзакций. Перед тем как
создавать базу данных, необходимо понять, как Microsoft SQL Server 7.0 хранит данные и
для чего ведется журнал транзакций.
Размещение данных на физическом уровне.
Основные сведения о файле БД
• при создании базы данных в нее копируется БД model, в которой содержатся системные
таблицы. Следовательно, минимальный размер базы данных равен или превышает размер
БД model;
• данные хранятся в 8-килобайтовых блоках непрерывного дискового пространства,
называемых страницами (pages). Отсюда следует, что 1 Мб дискового пространства
может содержать 128 страниц базы данных;
• одна запись не может занимать несколько страниц. Отсюда следует, что максимальный
объем данных одной записи — 8 060 байт (фактически — 8 192 плюс дополнительные 132
байта, отведенные для служебной информации). Максимальный объем, отведенный для
всех записей страницы, — 8 094 байт;
• таблицы, прочие объекты базы данных, а также индексы хранятся в экстентах. Экстент
(extent) представляет собой 8 последовательных страниц или 64 кб. Следовательно, на 1
Мб дискового пространства размещается 16 экстентов базы данных. В одном экстенте
могут храниться несколько небольших объектов, числом до восьми; такой экстент
называется смешанным (mixed). Когда объем таблицы достигает 8 странниц, эта таблица
использует собственные однородные экстенты (uniform extent);
• файлы журнала транзакций содержат информацию, необходимую для восстановления
базы данных в случае отказа системы. По умолчанию размер журнала транзакций
составляет 25% oт размера файла данных. Это соотношение можно изменить в
соответствии с требованиями приложения.
Создание базы данных при помощи оператора CREATE DATABASE
Создание базы данных — это процесс указания имени базы и определения размеров и
размещения файлов базы данных. Новая база данных представляет собой копию БД
9
model— любые параметры базы данных model копируются в новую БД. По умолчанию
базы данных имеют право создавать только те пользователи, которым назначены роли
sysadmin и dbcreator. Однако другим пользователям также можно предоставить
полномочия на создание баз данных.
CREATE DATABASE имя_базы_данных [ON
[PRIMARY] (NAME = логическое_имя_файла,
FILENAME='физическое_имя_файла'
[, SIZE = размер]
[, MAXSIZE – максимальный_размер]
[, FILEGROWTH = шаг_приращения_размера] ) [,... n]
]
[LOGON
(NAME = логическое_имя_файла,
FILENAME =' физическое_имя_файла'
[, SIZE = размер] )
[,...n]
]
[FOR RESTORE]
При создании базы данных можно задать следующие параметры:
• PRIMARY— указывает файлы основной группы файлов, которая содержит все
системные таблицы баз данных. Кроме того, здесь также содержатся объекты,
непривязанные к пользовательским группам файлов (о пользовательских группах - далее в
этой главе). В любой базе данных должен быть лишь один основной файл данных. Он
служит отправной точкой БД и указывает на все прочие ее файлы. Стандартное
расширение имени основного файла данных — .mdf. Если ключевое слово PRIMARY
опушено, основным файлом становится первый файл в операторе;
• FILENAME — задает физическое имя и путь к файлу. В пути (физическое_имя_файла)
необходимо указать папку локального диска сервера, на котором установлен SQL Server;
• SIZE — указывает размер файла: в мегабайтах, тогда используется суффикс МБ (по
умолчанию), или в килобайтах — в этом случае применяется суффикс КВ. Минимально
возможное значение — 512 кб. Размер основного файла данных по умолчанию равен
размеру основного файла БД model. Если файл журнала не указан, создается
стандартный файл журнала, размер которого равен 25% суммарного размера всех
файлов данных. По умолчанию размер дополнительных файлов данных или файла
журнала равен 1 Мб.
Параметр SIZE задает минимальный размер файла. Файл может увеличиваться, однако
его нельзя сжать так, чтобы его объем стал меньше заданного минимального размера.
Уменьшить минимальный размер файла можно, выполнив оператор DBCC
SHRINKFILE;
• MAXSIZE — указывает максимальный размер файла: в мегабайтах, тогда используется
суффикс MB (по умолчанию), или в килобайтах — в этом случае применяется суффикс
КВ. Если размер не указан, файл будет увеличиваться до полного заполнения диска;
• FILEGROWTH — залает шаг приращения размера файла. Если SQL Server необходимо
увеличить размер файла, он увеличит его на значение, заданное параметром
FJLEGROWTH, причем ноль означает запрет увеличения размера. Значение указывается в
мегабайтах (по умолчанию), в килобайтах или в процентах. По умолчанию (если параметр
FILEGRQWTH не определен) — шаг приращения равен 10% (в процентах), а его
минимальное значение — 64 кб. Указанный Вами размер округляется до ближайшего
числа, кратного 64 кб.
10
Удаление базы данных
Если база данных больше не нужна, ее можно удалить. При этом также будут удалены
используемые базой файлы. По умолчанию право на удаление базы данных принадлежит
ее владельцу и пользователям — членам постоянной роли сервера sysadmin: это право
нельзя делегироваться другим ролям.
Удалить базу данных можно с помощью SQL Server Enterprise Manager или оператора
DROP DATABASE.
Синтаксис
DROP DATABASE имя_базы_данных [, ... /?]
Создание и удаление таблиц
При создании таблицы необходимо указать ее имя, имена полей и их типы данных. Имена
полей должны быть уникальны в пределах таблицы, однако в различных таблицах одной
базы данных допустимо использовать одинаковые имена полей. Для каждого поля
требуется указать тип данных либо, при необходимости, другие параметры.
Создание таблиц
CREATE TABLE имя_таблицы
(имя_поля тип_данных [ NULL | NOT NULL]
[,…n] )
Удаление таблицы
При удалении таблицы уничтожается ее определение, данные в ней и сведения о правах
доступа к этой таблице.
Перед удалением таблицы необходимо удалить все ее связи с другими объектами.
Чтобы просмотреть эти зависимости, выполните системную сохраненную процедуру
sp_depends.
Кроме того, необходимо уничтожить все проекции, основанные на удаляемой
таблице, явно выполнив оператор DROP VIEW.
DROP TABLE имя_таблицы
Генерация значений полей
SQL Server позволяет автоматически генерировать значения полей с помощью свойства
IDENTITY или функции NEWID с типом данных uniqueindeniifier.
Свойство IDENTITY
Для создания полей, содержащих сгенерированные системой последовательные числовые
значения, идентифицирующие каждую строку таблицы, можно использовать свойство
IDENTITY (такие поля называются полями IDENTITY). Поле IDENTITY обычно служит
первичным ключом.
Автоматическая генерация ключей средствами SQL Server, а не клиентским
приложением, может повысить производительность. Это также
упрощает
программирование, сохраняет значения первичных ключей компактными и способствует
устранению «узких» мест при выполнении пользовательских транзакций.
CREATE TABLE таблица
(имя_поля, числовой_тип_данных
IDENTITY [(начальное_значение, шаг)] [NOT NULL]
[,…n] )
Добавление поля
При добавлении поля тип данных указывают точно так же, как и при создании таблицы.
ALTER TABLE таблица
ADD имя_поля тип_данных[ NULL \ NOT NULL] [,...n]
11
Например:
ALTER TABLE sales
ADD commission money NULL
Удаление поля
Удаленные поля нельзя восстановить. Перед удалением поля необходимо удалить все
связанные с ним индексы и ограничения.
ALTER TABLE таблица
DROP COLUMN имя_поля
Например:
ALTER TABLE sales
DROP COLUMN customer_name
Изменение поля
Поля можно модифицировать, например, изменить их тип данных.
ALTER TABLE таблица
ALTER COLUMN имя_поля новый_тип_данных [NULL | NOT NULL]
Например:
ALTER TABLE stores
ALTER COLUMN store_jd smallint
Пример создания серверной части приложения: базы данных, таблиц, alias.
Пусть необходимо разработать базу данных для автоматизации управления
учебным процессом. Для этого необходимо учитывать студентов, дисциплины которые
они изучают, преподавателей ведущих занятия, аудитории и оборудование на котором
занимаются студенты. В результате анализа и моделирования должна получиться некая
концептуальная модель, по которой можно будет разработать структуру таблиц будущей
базы данных. В практической работе № 2 была предложена для создания структуры
таблиц следующая концептуальная модель:
- студент изучает большое число дисциплин;
- преподаватели могут вести несколько дисциплин, но каждую дисциплину ведет только
один преподаватель;
- каждый преподаватель всегда проводит занятия в одной и той же аудитории.
Допустим, получилась следующая структура таблиц:
Таблица 1. Студент (Student)
Имя поля
Тип
Размер Описание
KodStud
int
4 Идентификационный номер (код студента)
Family
varchar(40)
40 Фамилия
Name
varchar(25)
25 Имя
Name2
varchar(30)
30 Отчество
DateR
smalldatetime
4 Дата рождения
KodGroup
smallint
2 Код группы
GodPriem
smallint
2 Год поступления
AdresRod
varchar(100)
100 Адрес родителей
Telephon
varchar(10)
10 Телефон родителей
AdresStud
varchar(100)
100 Адрес места жительства
Diplom
varchar(16)
16 Номер выданного диплома
DateDip
smalldatetime
4 Дата выдачи диплома
MedPolis
bit
1 Признак получения медицинского полиса
StudBilet
int
4 Номер студенческого билета
Zachet
int
4 Номер зачетной книжки
Размер записи
342
12
Таблица 2. Преподаватель (Lector)
Имя поля
Тип
Размер Описание
KodLector
smallint
2 Идентификационный номер (код преподавателя)
Family
varchar(40)
40 Фамилия
Name
varchar(25)
25 Имя
Name2
varchar(30)
30 Отчество
Telephon
varchar(10)
10 Телефон
Adres
varchar(100)
100 Адрес места жительства
KodRoom
tinyint
1 Код аудитории
Размер записи
208
Таблица 3. Специальность (Special)
Имя поля
Тип
Размер Описание
KodSpec
smallint
2 Код специальности
Name
varchar(150)
150 Наименование
Srok
tinyint
1 Количество лет обучения
Размер записи
153
Таблица 4. Дисциплина (Discipline)
Имя поля
Тип
Размер Описание
KodDis
smallint
2 Код дисциплины
Name
varchar(100)
100 Наименование
KodLector
smallint
2 Код преподавателя
Размер записи
104
Таблица 5. Оценки (Result)
Имя поля
Тип
Размер Описание
KodStud
int
4 Код студента
KodDis
smallint
2 Код дисциплины
Ball
tinyint
1 Оценка
Размер записи
7
Таблица 6. Аудитория (Room)
Имя поля
Тип
Размер Описание
KodRoom
tinyint
1 Код аудитории
Nomer
varchar(8)
8 Номер
Name
varchar(100)
100 Наименование
Размер записи
109
Таблица 7. Учебный план (Lesson)
Имя поля
Тип
Размер Описание
KodSpec
smallint
2 Код специальности
KodDis
smallint
2 Код дисциплины
Kurs
tinyint
1 Курс
Semestr
tinyint
1 Семестр
Nomer
varchar(10)
10 Обозначение дисциплины
TimeS
smallint
2 Количество часов в семестр
TimeN
tinyint
1 Количество часов в неделю
TimeP
tinyint
1 Количество часов практики в семестр
Audit
tinyint
1 Форма контроля
Размер записи
21
Таблица 8. Группа (Group)
Имя поля
Тип
Размер Описание
KodGroup
smallint
2 Код группы
Group
varchar(10)
10 Обозначение группы
13
KodSpec
smallint
2 Код специальности
Размер записи
14
Оценка размера базы данных: количество дисциплин на специальности не более 60,
количество специальностей не более 30, количество обучающихся студентов не более
1000, количество преподавателей не более 100, срок службы базы данных не более 20 лет,
следовательно размер базы данных =
20*(1000*(342+14+60*7)+100*208)+30*(60*104+153+60*3*21)+100*109 = 16290090 = 16
MB
Создаем базу данных Tehnikum:
Create database Tehnikum on Primary
( Name = Teh_data,
FileName = ‘c:\Program Files\Microsoft SQL Server\MSSQL\data\tehnikum.mdf’,
Size = 16 MB,
MaxSize = 32 MB,
FileGrowth = 25 %)
Log on
( Name = Teh_log,
FileName = ‘c:\Program Files\Microsoft SQL Server\MSSQL\data\tehnikum.ldf’,
Size = 4 MB,
MaxSize = 8 MB,
FileGrowth = 1 MB)
Создание таблиц:
Create Table Student
(KodStud int IDENTITY NOT NULL,
Family varchar(40) NOT NULL,
Name varchar(25) NOT NULL,
Name2 varchar(30) NOT NULL,
DateR smalldatetime NULL,
KodGroup smallint NOT NULL,
GodPriem smallint NOT NULL,
AdresRod varchar(30) NOT NULL,
Telephon varchar(10) NULL,
AdresStud varchar(100) NULL,
Diplom varchar(16) NULL,
DateDip smalldatetime NULL,
MedPolis bit NULL,
StudBilet int NULL,
Zachet int NULL)
Create Table Lector
(KodLector smallint IDENTITY NOT NULL,
Family varchar(40) NOT NULL,
Name varchar(25) NOT NULL,
Name2 varchar(30) NOT NULL,
Telephon varchar(10) NULL,
Adres varchar(100) NULL,
KodRoom tinyint NULL)
Create Table Special
(KodSpec smallint NOT NULL,
Name varchar(150) NOT NULL,
Srok tinyint NULL)
Create Table Discipline
14
(KodDis smallint NOT NULL,
Name varchar(100) NOT NULL,
KodLector smallint NOT NULL)
Create Table Result
(KodStud int NOT NULL,
KodDis smallint NOT NULL,
Ball tinyint NULL)
Create Table Room
(KodRoom tinyint IDENTITY NOT NULL,
Nomer varchar(8) NOT NULL,
Name varchar(100) NULL)
Create Table Lesson
(KodSpec int NOT NULL,
KodDis smallint NOT NULL,
Kurs tinyint NULL,
Semestr tinyint NULL,
Nomer varchar(10) NOT NULL,
TimeS smallint NOT NULL,
TimeN tinyint NULL,
TimeP tinyint NULL,
Audit tinyint NULL)
Create Table Group
(KodGroup smallint IDENTITY NOT NULL,
KodSpec smallint NOT NULL,
Group varchar(10) NOT NULL)
Задание:
4. Рассчитайте размер будущей базы данных в соответствии с вариантом задания;
5. Создайте базу данных минимального размера в соответствии с вариантом задания;
6. В созданной базе данных создайте и модифицируйте таблицы в соответствии с
вариантом задания
7. С помощью программы BDE administrator создайте alias для доступа к созданной базе
данных
Контрольные вопросы:
11. Как хранятся данные в базах данных и журналах транзакций?
12. Как оценить размер базы данных?
13. Какие типы файлов баз данных Вы знаете? Приведите пример.
14. Синтаксис оператора создания базы данных. Приведите пример.
15. Синтаксис оператора удаления базы данных. Приведите пример.
16. Синтаксис оператора создания таблицы базы данных. Приведите пример.
17. Синтаксис оператора удаления таблицы базы данных. Приведите пример.
18. Какие таблицы создаются автоматически при создании базы данных?
19. Какое назначение у ключевого слова IDENTITY?
20. Какое назначение у ключевого слова NULL?
21. Синтаксис оператора добавления столбца таблицы базы данных. Приведите пример.
22. Синтаксис оператора удаления столбца таблицы базы данных. Приведите пример.
15
Содержание отчета:
Отчет должен содержать:
- цель работы;
- описание выполнения примера;
- описание выполнения задания;
- вывод о проделанной работе.
Список литературы:
4. Гофман В.Э., Хомоненко А.Д. Delphi 5. СПб: БХВ – Санкт-Петербург, 2000
5. Архангельский А.Я. Программирование в Delphi 5 – М.: ЗАО «Издательство БИНОМ»,
2000
6. Хомоненко А.Д., Цыганков В.М., Мальцев М. Г. Базы данных. – СПб.: КОРОНА
принт, 2000
7. Реализация баз данных Microsoft SQL Server 7.0. Учебный курс: официальное пособие
Microsoft для самостоятельной подготовки / пер. с англ. – М.: Издательско-торговый
дом «Русская Редакция», 2000
8. Фронковяк Д., Гарсия М., Уолен Э. Руководство администратора Microsoft SQL Server
7.0 / пер. с англ. – М.: Издательско-торговый дом «Русская Редакция», 2000
9. Лекции по дисциплине «Разработка и эксплуатация удаленных баз данных».
Самостоятельная работа по теме
Визуальное проектирование структуры базы данных
Цель работы:
1. ознакомиться с инструментальным средством SQL Server Enterprise Manager
2. создать базу данных при помощи SQL Server Enterprise Manager
3. создать таблицы базы данных при помощи SQL Server Enterprise Manager
4. осуществить просмотр информации о базе данных
5. построить диаграмму базы данных
Основные понятия:
Создание базы данных может быть выполнено пользователем при наличии у него
соответствующих полномочий, устанавливаемых системным администратором. Для
создания базы данных можно использовать SQL Server Enterprise Manager или команду
Tranzact-SQL CREATE DATABASE.
16
Рис. 1. SQL Server Enterprise Manager. Контекстное меню папки Databases.
Для создания базы данных с помощью SQL Server Enterprise Manager выполняют
следующие действия:
1. запуск программы SQL Server Enterprise Manager, выбор и подключение сервера,
выделение папки DATABASES. На правой панели программы отображается окно
базы данных.
2. выполнение команды ACTION/NEW DATABASES или открытие контекстного
меню (Рис 1) и выбор команды New Database.
3. в открывшемся диалоговом окне свойств задание параметров базы данных: имени,
местоположения файлов, первоначального размера, возможности автоматического
увеличения размера.
Рассмотрим один из предложенных способов: Щелкните правой кнопкой мыши
на папке Databases в окне SQL Server Enterprise Manager. На экране появится контекстное
меню, показанное на рис. 1. Выполнение команды New Database приводит к появлению
диалогового окна, представленного на рис. 2, открытого на вкладке General (основное).
17
Рис. 2. Диалоговое окно свойств создаваемой базы данных.
На этой вкладке необходимо ввести имя создаваемой базы данных в поле Name (имя). При
этом в списке Databases files (файлы базы данных) автоматически отображается имя и
путь файла базы данных, его размер и принадлежность группе (рис. 3). Все эти параметры
можно изменить.
Рис. 3. Создание базы данных в диалоговом окне.
При необходимости для базы данных можно использовать несколько файлов. В нижней
части вкладки General можно установить свойства отдельно для каждого файла базы
данных – File Properties (свойства файла). Установив флажок Automatically grow file
(автоматическое увеличение файла), вы избавляете себя от необходимости отслеживать
размер базы данных. Два переключателя File growth (рост файла) и Maximum file size
(максимальный размер файла) позволяют определить, соответственно, на сколько будет
увеличиваться размер файла – в абсолютных (In megabytes) или относительных (By
percent) единицах, и его максимальный размер - Unrestricted file growth (неограниченный
рост) или Restricted file growth (MB) (ограничить размер … мегабайтами).
Рис. 4. Вкладка определения параметров журнала транзакций диалогового окна свойств
базы данных
18
Затем выберите вкладку Transaction Log (журнал транзакций), вид которой показан на рис.
4. Все рассказанное по поводу файлов данных в полной мере относится и к файлам
транзакций. Обратите внимание, что для журнала транзакций уже заданы имя и путь
файла, поскольку мы их определили на предыдущей вкладке.
Удаление базы данных с помощью SQL Server Enterprise Manager предполагает
выполнение следующих действий:
1. Активируйте SQL Server Enterprise Manager и выберите сервер, на котором
находится база данных.
2. Щелкните мышью имя базы данных, которую хотите удалить.
3. Нажмите кнопку Delete Database на панели инструментов. Или щелкните правой
клавишей на имени базы данных и выберите в контекстном меню команду Delete.
Появляется окно сообщений, запрашивающее подтверждение необходимости
удаления базы данных. Нажмите кнопку Yes, и база данных будет удалена, или No,
если вы все-таки решили ее сохранить.
Для создания таблицы с помощью SQL Server Enterprise Manager надо выполнить
следующие действия:
1. выбрать базу данных, в которой предполагается создание таблицы
2. задать команду Table меню Manage
3. в открывшемся одноименном диалоговом окне указать имена столбцов таблицы,
определив для каждого столбца тип данных, при необходимости размер,
допустимость значения NULL и значения по умолчанию DEFAULT
4. сохранить таблицу (SAVE TABLE), указав ее имя в специальном окне.
SQL Server Enterprise Manager представляет богатый графический интерфейс для
определения таких параметров таблиц, как типы данных, размер значений столбцов и
многих других.
Для того чтобы начать работать с таблицами, запустите SQL Server Enterprise Manager и
выберите сервер, с которым будете работать. Затем раскройте дерево баз данных и ту базу
данных, в которую нужно добавить новую таблицу (рис. 5).
19
Рис. 5. Дерево баз данных. Выделенный компонент Tables.
Выделите компонент Tables (таблицы) (рис. 5) и либо щелкните на нем правой кнопкой
мыши и выберите в появившемся контекстном меню пункт New Table (новая таблица),
либо нажмите кнопку New на панели инструментов. После этого появляется диалоговое
окно, в котором можно задать имя новой таблицы (Рис. 6).
Рис. 6. Перед созданием новой таблицы необходимо задать ее имя
После задания имени таблицы можно приступать к формированию ее структуры. На Рис.
7 приведен пример таблицы.
При создании нового столбца таблицы для него необходимо определить тип данных. Это
может быть как любой системный, так и созданный вами тип данных. Тип данных
задается с помощью раскрывающегося списка столбца Datatype (тип данных) диалогового
окна. Использование списка гарантирует выбор только допустимого типа данных. На
основании выбранного типа данных автоматически определяется атрибут Length (длина),
а в необходимых случаях также Precision (точность) и Scale (масштаб) (Рис. 7).
Рис. 7. Окно для определения столбцов таблицы
Помимо имени столбца и приписанного ему типа данных здесь же можно определить
некоторые другие параметры:
 Allow Nulls – флажок, позволяющий игнорировать ввод значения в столбец;
 Default Value – значение по умолчанию, записываемое в столбец, если для него не
задано никакое конкретное значение;
 Identity – этот флажок может быть установлен только при создании и означает, что при
добавлении в таблицу строки, не нужно вводить никакие значения в столбец,
поскольку значения для него вводятся автоматически путем сложения значения в
предыдущей строке с приращением, указанным в свойстве Identity Increment. Значение
20
для первой строки также задается при создании таблицы, в свойстве Identity Seed; это
свойство можно определять для числовых типов данных (int, smallint, tinyint,
decimal(p,0), numeric(p,0)), кроме того, нельзя устанавливать флажок Allow Nulls;
 IsRowGrid – говорит о том, что столбец используется как глобальный уникальный
идентификатор для строк; тип данных при этом должен быть uniqueidentifier.
Если отпала необходимость в каком либо столбце таблицы, его можно удалить, для чего
выделите соответствующую строку, нажмите на ней правую кнопку мыши и в
появившемся контекстном меню выберите команду Delete Column (удалить столбец) или
просто нажмите кнопку Delete.
После завершения разработки таблицы, для ее сохранения нажмите кнопку со значком
дискеты.
Сведения о базе данных называются метаданными.
Просмотр информации о базе данных в SQL Server Enterprise Manager осуществляется
следующим образом:
1. выделяется необходимая база данных, нажать правую кнопку мыши
2. на правой панели вверху щелкнуть Space Allocated и просмотреть сведения о
пространстве базы данных и журнала
3. на правой панели вверху щелкнуть заголовок Tables$Indexes и просмотреть
сведения о пространстве таблиц и индексов.
Системные сохраненные процедуры, выводящие сведения о базах данных и их
параметрах.
Системная сохраненная
процедура
sp_dboption
sp_helpdb
sp_helpdb
имя_базы_данных
sp_spaceused
[имя_объекта]
Описание
процедуры
Выводит все доступные параметры
Создает отчет по всем базам сервера. Выводит имя БД,
сведения о ее размере, владельце, идентификаторе, дате
создания и статусе
Создает отчет о конкретной базе данных. Выводит имя БД,
сведения о ее размере, владельце, идентификаторе, дате
создания и статусе. Кроме того, предоставляет сведения о
каждом файле данных и файле журнала
Отображает сведения о дисковом пространстве, используемом
текущей БД или таблицей в текущей БД
Для изменения базы данных в SQL Server Enterprise Manager используется команда
Properties контекстного меню, открытого по правой кнопке мыши для выбранной базы
данных.
1. В столбце File name в пустой строке вводится имя дополнительного файла данных.
Каталог для файла создается и назначается автоматически и файлу присваивается
расширение .ndf.
2. В поле Space Allocated устанавливается значение начального размера нового
файла.
3. Для задания шага приращения размера файла в группе File Growth помечается
переключатель In megabytes и изменяется числовое значение
21
4. Для разрешения неограниченного увеличения размера файла значение Maximum
file size устанавливается по умолчанию Unrestricted filegrowth.
Создание диаграммы базы данных осуществляется с помощью нового средства Database
Diagrams. Диаграммы отображают столбцы, содержащиеся внутри таблиц, связи между
таблицами, а также индексы и условия на значения , имеющиеся у этих таблиц. После
соединения с базой данных, с помощью диаграммы можно:
 Просматривать таблицы и связи между ними
 Выполнять сложные операции по модификации физической структуры базы данных.
При этом объекты не сохраняются непосредственно в базе данных, пока вы этого не
сделаете явным образом, поэтому здесь возможно проведение любых экспериментов
 Сохранять сценарий изменений, содержащий код Transact-SQL
 Создавать, редактировать и удалять объекты базы данных, такие как таблицы и их
столбцы, связи между таблицами, индексы, условия на значения, хранимые
процедуры, триггеры и представления
Задание:
8. Выполнить пример операций создания, удаления и модификации базы данных и
таблиц базы данных.
Описание примера выполнения задания.
Создание базы данных Technikum (описание базы данных в практической работе №3) с
помощью инструментального средства SQL Server Enterprise Manager
1. запуск программы SQL Server Enterprise Manager, выбор и подключение сервера
db_server, выделение папки DATABASES. На правой панели программы
отображается окно базы данных.
2. открытие контекстного меню и выбор команды New Database.
3. в открывшемся диалоговом окне свойств задание параметров базы данных: имени,
местоположения файлов, первоначального размера, возможности автоматического
увеличения размера.
Создание таблиц базы данных Technikum:
1. выбрать базу данных Technikum в раскрывающемся списке на главной панели
инструментов SQL Server Enterprise Manager. База данных Technikum стала
текущей.
2. для базы данных Technikum выделить компонент Tables и в контекстном меню
выбрать пункт New Table. В диалоговом окне задать имя новой таблицы.
3. в открывшемся окне Design Table указать имена столбцов таблицы, определить для
каждого столбца тип данных с помощью раскрывающегося списка столбца
Datatype, при необходимости размер, допустимость значения NULL и значения по
умолчанию DEFAULT
4. сохранить таблицу (SAVE TABLE).
Просмотр информации о базе данных Technikum в SQL Server Enterprise Manager.
1. выделяется база данных, нажать правую кнопку мыши
22
2. на правой панели вверху щелкнуть Space Allocated и просмотреть сведения о
пространстве базы данных и журнала
3. на правой панели вверху щелкнуть заголовок Tables$Indexes и просмотреть
сведения о пространстве таблиц и индексов.
4. перейдите к SQL Server Query Analyzer и выполните следующие сохраненные
процедуры для просмотра информации о базах данных:
 EXEC sp_helpdb
список всех баз данных
 EXEC sp_helpdb Technikum информация о базе данных Technikum
 USE Technikum
выбор базы данных Technikum
 EXEC sp_spaceused
информация о пространстве базы данных Technikum
 EXEC sp_spaceused student информация о пространстве, используемом таблицей
student базы данных Technikum
Построение диаграммы базы данных Technikum.
 Запустите SQL Server Enterprise Manager, раскройте в его окне папку DataBases и базу
Publisher
 Щелкните правой кнопкой мыши на Database Diagrams и в появившемся контекстном
меню выберите команду New Database Diagram, что приведет к запуску мастера
диаграмм. Нажмите кнопку Next.
 Во втором окне мастера выделите необходимые таблицы после чего нажмите кнопку
Add, чтобы включит эти таблицы в диаграмму.
 Следующее окно мастера спрашивает о том, кто будет располагать таблице в окне,
если сразу нажмете кнопку Next – это за вас сделает SQL Server
9. Выполнить следующие операции для базы данных соответствующего варианта.
Структура базы данных и таблиц базы данных по вариантам была определена в ходе
выполнения практической работы №3.
Операции:
а) Создать базу данных с помощью SQL Server Enterprise Manager
б) Создать таблицы базы данных с помощью SQL Server Enterprise Manager
в) Осуществить просмотр информации о базе данных и ее таблиц с помощью
сохраненных процедур
г) Провести модификацию базы данных и таблиц с помощью SQL Server Enterprise
Manager
д) Построить диаграмму базы данных с помощью Database Diagrams.
Варианты:
Вариант 1.База данных «Магазин».
Таблицы:
«Товар»
 Код товара
 Наименование товара (60 символов)
 Единица измерения (3 симв)
 Цена по накладной (12,2 знака)
 Цена розничная (12,2 знака)
23
«Склад»
 Код товара
 Количество
 Стеллаж
«Реализация»
 Код товара
 Дата реализации
 Количество
«Приход»
 Код товара
 Дата поступления
 Количество
Вариант 2.База данных «Библиотека».
Таблицы:
«Литература»
 Код книги
 Код автора
 Наименование (100 символов)
 Код темы
 Аннотация
«Читатель»
 Код читателя
 Фамилия
 Имя
 Отчество
 Адрес
 Номер читательского билета
«Автор»
 Код автора
 Фамилия
 Имя
 Отчество
«Тематика»
 Код темы
 Наименование
«Карточка учета»
 Код читателя
 Код книги
 Инвентарный номер
 Дата выдачи
 Дата возврата
Контрольные вопросы:
23. Назовите три типа файлов базы данных Microsoft SQL Server.
24. Какие системные базы данных создаются при установке Microsoft SQL Server?
25. В чем заключается особенность системной базы данных model?
26. Какие приложения можно использовать для работы с Microsoft SQL Server?
24
27. Что собой представляет хранилище данных в Microsoft SQL Server, какова его
структура?
28. Что такое журнал транзакций? Каков его размер?
29. Какое назначение у ключевого слова IDENTITY?
30. Что означает ключевое слово NULL / NOT NULL?
31. Какие средства позволяют осуществлять просмотр информации о базе данных?
32. Какие Вы знаете системные сохраненные процедуры?
33. Как построить диаграмму базы данных?
34. Для чего используются диаграммы базы данных?
Содержание отчета:
Отчет должен содержать:
- цель работы;
- описание выполнения примера;
- описание выполнения задания;
- вывод о проделанной работе.
Список литературы:
1. Ю.Тихомиров Microsoft SQL Server 7.0 – СПб.: БХВ – Санкт-Петербург, 2000
2. Архангельский А.Я. Программирование в Delphi 5 – М.: ЗАО «Издательство БИНОМ»,
2000
3. Хомоненко А.Д., Цыганков В.М., Мальцев М. Г. Базы данных. – СПб.: КОРОНА
принт, 2000
4. Лекции по дисциплине «Разработка и эксплуатация удаленных баз данных».
Задание:
Вариант 1.База данных «Магазин».
Задание 1. Напишите запрос для просмотра движения (поступление и расход) указанного
товара (код товара).
Задание 2. Напишите запрос для поиска товара по наименованию.
Таблицы:
«Товар»
 Код товара
 Наименование товара (60 символов)
 Единица измерения (3 симв)
 Цена по накладной (12,2 знака)
 Цена розничная (12,2 знака)
«Склад»
 Код товара
 Количество
 Стеллаж
«Реализация»
 Код товара
 Дата реализации
 Количество
25
«Приход»
 Код товара
 Дата поступления
 Количество
Вариант 2.База данных «Библиотека».
Задание 1. Напишите запрос для просмотра всех книг, которые брал указанный читатель
(код читателя).
Задание 2. Напишите запрос для поиска читателя по фамилии, имени и отчеству.
Таблицы:
«Литература»
 Код книги
 Код автора
 Наименование (100 символов)
 Код темы
 Аннотация
«Читатель»
 Код читателя
 Фамилия
 Имя
 Отчество
 Адрес
 Номер читательского билета
«Автор»
 Код автора
 Фамилия
 Имя
 Отчество
«Тематика»
 Код темы
 Наименование
«Карточка учета»
 Код читателя
 Код книги
 Инвентарный номер
 Дата выдачи
 Дата возврата
Контрольные вопросы:
1. Каково назначение инструкции Select?
2. Каково назначение ключевого слова where?
3. Каково назначение ключевой фразы order by?
4.
5.
6.
7.
8.
9.
Каково назначение функции year?
Каким образом задается имя вычислимого поля?
Синтаксис и назначение операции between … and.
Синтаксис и назначение операции in.
Синтаксис и назначение операции like.
Какова схема взаимодействия визуальных компонентов с базой данных?
26
10. Каким образом связывается визуальный компонент с источником данных?
11. Каково назначение компонента database?
12. Каково назначение компонента Query?
13. Какой компонент удобнее использовать для работы с локальной базой данных?
14. Какой компонент удобнее использовать для работы с серверной базой данных?
Содержание отчета:
Отчет должен содержать:
- цель работы;
- описание выполнения примера;
- описание выполнения задания;
- вывод о проделанной работе.
Задание к практической работе
1. Выполнить следующий пример:
Построить приложение, демонстрирующее режим кэширования, вид которого показан на
рис. 1.
Приложение должно работать следующим образом:
 Индикатор «Кэширование» переключает режим кэширования.
 Кнопка «Фиксация» (ее имя bApplyUpdates) фиксирует все сделанные изменения в
базе данных.
 Кнопка «Отмена» (ее имя bCancelUpdates) отменяет сделанные изменения.
 Когда приложение закрывается, надо проверить, не работало ли оно в режиме
кэширования изменений, и не было ли сделано изменений, которые не зафиксированы
в базе данных. Если были, то следует спросить пользователя о необходимости их
сохранения и при положительном ответе зафиксировать изменения.
Рис. 1. Вид главной формы примера.
Расположите необходимые компоненты на главной форме (Рис.1.) и в модуле данных
(Рис.2.)
27
Рис. 2. Пример модуль данных приложения демонстрирующего кэширование изменений
Создайте запрос к таблице «Студент» базы данных. В свойстве SQL компонента Query1
запишите «Select * from Student order by Family, Name, Name2» (Рис.3) и установите
свойство CachedUpdates в True. Подключить к главной форме модуль данных, используя
команду меню «File | Use unit». Набор данных (компонент Query1) связать с визуальным
компонентом отображения данных главной формы DBGrid1 с помощью компонента
DataSource1, и с базой данных с помощью компонента Database1.
В приложение можно ввести глобальную переменную modif, которая будет фиксировать
наличие не сохраненных изменений. Ее можно объявить в модуле данных:
var modif: Boolean = false;
Рис. 3. Создание простого запроса к таблице «Студент» базы данных.
Для события OnClick индикатора «Кэширование» надо предусмотреть обработчик:
procedure TfrMain.CheckBox1Click(Sender: TObject);
begin
if dm.Query1.CachedUpdates then
begin
if modif then
if MessageDlg(' В набор данных внесены изменения.'+#13+
'Записать и х в базу данных?',
mtInformation,[mbOk, mbCancel] ,0) = mrOk then
dm.Database1.ApplyUpdates([dm.Query1] )
else
dm.Database1.Commit;
modif:= false;
end;
dm.Query1.CachedUpdates:= not dm.Query1.CachedUpdates;
bApplyUpdates.Enabled:= dm.Query1.CachedUpdates;
28
bCancelUpdates.Enabled:= dm.Query1.CachedUpdates;
end;
Обработчик события OnClick индикатора «Кэширование» изменяет режим кэширования
таблицы, делает доступными или недоступными в зависимости от режима кнопки
«Фиксация» (ее имя bApplyUpdates) и «Отмена» (ее имя bCancelUpdates). Если
выключается режим кэширования и данные были изменены (переменная modif = true), по
решению пользователя, изменения фиксируются в базе данных или отменяются, после
чего, переменная modif получает значение false.
Для события onAfterEdit компонента Query1 создается следующий обработчик, который
фиксирует в переменной modif факт редактирования записи:
procedure Tdm.Query1AfterEdit(DataSet: TDataSet);
begin
if Query1.CachedUpdates then modif:=true;
end;
Обработчик события OnClick кнопки «Фиксация» может иметь вид:
procedure TfrMain.bApplyUpdatesClick(Sender: TObject);
begin
dm.Query1.ApplyUpdates;
dm.Query1.CommitUpdates;
modif := false;
end;
Обработчик события OnClick кнопки «Отмена» может иметь вид:
procedure TfrMain.bCancelUpdatesClick(Sender: TOb ject);
begin
dm.Query1.CancelUpdates;
modif := false;
end;
В обоих случаях переменная modif сбрасывается в false, фиксируя отсутствие не
сохраненных изменений.
Обработчик события закрытия главной формы onCloseQuery должен иметь вид:
procedure TfrMain.F ormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
if dm.Query1.CachedUpdates and modif
then
case Application.MessageBox('Сохранить изменения в базе данных?',
'Подтвердите сохранение изменений',
MB_YESNOCANCEL+MB_ICONQUESTION) of
IDYES: dm.Query1.ApplyUpdates ;
IDCANCEL: CanClose:=false;
IDNO: dm.Query1.CancelUpdates;
end;
end;
При наличии не сохраненных изменений пользователю задается вопрос «Сохранять
изменения в базе данных?». При положительном ответе изменения сохраняются методом
ApplyUpdates. При отрицательном – изменения отменяются методом CancelUpdates. Если
при получении запроса пользователь нажал кнопку «Отмена» (Cancel), то приложение не
закрывается (CanClose задается равным false).
29
Но для того, чтобы, как отмечалось ранее, вносились изменения в базу данных
необходимо подключит к набору данных (Query1) компонент UpdateSQL1 (установите
свойство компонента Query1 UpdateObject равным имени введенного компонента
UpdateSQL1).
Затем необходимо задать свойства компонента UpdateSQL1 DeleteSQL, InsertSQL,
ModifySQL. Эти свойства содержат соответственно запросы, которые должны
выполняться при удалении, вставке или модификации записи. Эти запросы можно
записать обычным способом, вручную. А можно воспользоваться редактором UpdateSQL
(рис. 4.)
Рис. 4. Редактор UpdateSQL
В левом окне Key Fields надо выделить поля, по которым программа будет распознавать
модифицируемую или удаляемую запись.
В правом окне Update Fields надо выделить поля, значения которых будут задаваться при
модификации или вставке записи.
После того, как вы выделили в этих окнах поля, нажмите кнопку «Generate SQL».
Рис. 5. Результат генерации запросов на изменение набора данных.
Откомпилируйте приложение, сохраните его и выполните.
2. Подробно описать работу примера.
30
3. Усовершенствовать программу своего варианта, разработанную во время
выполнения задания 1 практической работы № 4, для внесения изменений в
полученный набор данных в результате выполнения данного запроса.
4. В отчет записать полученный текст запросов на изменение набора данных (задание
3), полученных в результате генерации в компоненте UpdateSQL или написанных
вручную.
Контрольные вопросы:
1. Каким образом осуществляется пересылка записи в базу данных?
2. Какое свойство информирует, в каком состоянии находится набор данных? Укажите
значение состояния редактирования.
3. Какое свойство информирует, в каком состоянии находится набор данных? Укажите
значение состояния добавления записи.
4. Какие методы немедленно модифицируют таблицу базы данных?
5. Для чего применяется режим кэширования?
6. Какой компонент отвечает за внесение изменений в таблицы базы данных
осуществленных в наборе данных?
7. Синтаксис запроса на изменение данных. Пример
8. Синтаксис запроса на добавление записи. Пример
9. Синтаксис запроса на удаление записи. Пример
10. Опишите средства генерации запросов на изменение данных.
Содержание отчета:
Отчет должен содержать:
- цель работы;
- описание выполнения примера;
- описание выполнения задания;
- вывод о проделанной работе.
Вариант 1.
База данных «Магазин» (срок работы 10 лет, номенклатура 1000, реализация в день 100).
Таблицы:
«Товар»
 Код товара
 Наименование товара (60 символов)
 Единица измерения (3 симв)
 Цена по накладной (12,2 знака)
 Цена розничная (12,2 знака)
«Склад»
 Код товара
 Количество
 Стеллаж
«Реализация»
 Код товара
 Дата реализации
 Количество
«Приход»
31



Код товара
Дата поступления
Количество
Вариант 2.
База данных «Библиотека» (срок работы 10 лет, номенклатура 10000, читатели 500,
реализация 10 в день). Таблицы:
«Литература»
 Код книги
 Код автора
 Наименование (100 символов)
 Код темы
 Аннотация
«Читатель»
 Код читателя
 Фамилия
 Имя
 Отчество
 Адрес
 Номер читательского билета
«Автор»
 Код автора
 Фамилия
 Имя
 Отчество
«Тематика»
 Код темы
 Наименование
«Карточка учета»
 Код читателя
 Код книги
 Инвентарный номер
 Дата выдачи
 Дата возврата
Задание:
10. Выполните следующий пример создания сохраненной процедуры.
Создание хранимой процедуры InsertRows средствами Enterprise Manager:
 Раскройте базу данных и выберите папку Stored Procedures. Выберите из контекстного
меню команду New Stored Procedure. Откроется окно Stored Procedure Properties (Рис.
1.).
32
Рис. 1. Окно создания сохраненной процедуры
11. Создайте сохраненную процедуру в соответствии с вариантом задания
Вариант 1. Для базы данных «Магазин» создайте сохраненную процедуру для
просмотра движения (поступление и расход) указанного товара (код товара).
Вариант 2. Для базы данных «Библиотека» создайте сохраненную процедуру для
просмотра всех книг, которые брал указанный читатель (код читателя).
Пример выполнения: Для базы данных «Библиотека» создается сохраненная
процедура Overdue_books, выводящая список всех просроченных книг.
Таблицы:
«Литература» (Knigi)
 Код книги (Kod)
 Код автора (KodAvt)
 Наименование (100 символов) (Name)
 Код темы (KodTem)
 Аннотация (Prim)
«Читатель» (Client)
 Код читателя (Kod)
 Фамилия (Fam)
 Имя (Name)
 Отчество (Name2)
 Адрес (Adres)
 Номер читательского билета (Num)
«Автор» (Avtor)
 Код автора (Kod)
 Фамилия (Fam)
 Имя (Name)
 Отчество (Name2)
«Тематика» (Tema)
33
 Код темы (Kod)
 Наименование (Name)
«Карточка учета» (Uchet)
 Код читателя (KodClient)
 Код книги (KodKnigi)
 Инвентарный номер (InvNum)
 Дата выдачи (Date1)
 Дата возврата (Date2)
В результате анализа структуры базы данных и архитектуры таблиц получается
следующая сохраненная процедура:
CREATE PROCEDURE overdue_books
@report_date datetime
AS
if isNull(@report_date,convert(datetime,’10000101’)) =
convert(datetime,’10000101’)
SET @report_date = GETDATE()
select
k.Name as Kniga,
k.InvNum,
c.Fam+’ ‘+c.Name+’ ‘+c.Name2 as Client,
u.Date1
from Uchet u
left outer join Knigi k on k.Kod = u.KodKnigi
left outer join Client c on c.Kod = u.KodClient
where isNull(u.Date2,Date1+30)<@report_date
order by k.Name, u.date1
GO
Данная сохраненная процедура создается выше описанным способом. Затем ее
необходимо выполнить на сервере, чтобы убедиться в правильности работы. Для этого:
 Откройте SQL Server Query Analyzer.
 Убедитесь, что вы работаете с базой данных «Библиотека» (Library).
 Выполните процедуру, выполнив команду
EXEC overdue_books @report_date = ‘20041123’
или
EXEC overdue_books GetDate()
 Убедитесь в ее правильной работе
 В случае неправильной работы, исправьте ошибку и выполните процедуру,
чтобы убедиться в правильности работы.
12. Отредактируйте и выполните приложение, созданное во время практической работы №
6, для выполнения сохраненной процедуры, созданной в соответствии с вариантом
задания.
 Установите в модуль данных компонент StoredProc1. Свяжите его с
компонентом DataBase1, установив значение свойства DataBaseName в «bd».
34
Свяжите компонент с созданной сохраненной процедурой, установив значение
свойства StoredProcName в «overdue_books». Свяжите компонент с объектом
визуализации, установив свойство DataSet компонента DataSource1 в
«StoredProc1».
Рис. 6. Модификация приложения, разработанного во время выполнения
практической работы № 6 (размещение компонентов)
Рис. 7. Модификация приложения, разработанного во время выполнения
практической работы № 6 (установление связей между объектами)
35
Рис. 8. Модификация приложения, разработанного во время выполнения
практической работы № 6 (результат установления связей)
 Установите в модуль данных компонент UpdateSQL2 и свяжите его с
компонентом StoredProc1, установив свойство UpdateObject компонента
StoredProc1 в «UpdateSQL2».
 Выполните приложение.
Контрольные вопросы:
1. Какие существуют типы хранимых процедур?
2. Для чего применяется системная хранимая процедура?
3. Какие действия позволяют сократить сетевой трафик между клиентским приложением
и MS SQL Server?
4. Какие существуют преимущества использования хранимых процедур по сравнению с
запросами?
5. Каким образом создается сохраненная процедура?
6. Синтаксис объявления переменных и присвоения значений переменным. Приведите
примеры.
7. Каким образом можно изменить сохраненную процедуру?
8. Сколькими способами может возвращаться результат выполненной хранимой
процедуры? Перечислите их.
9. Синтаксис условного оператора. Приведите пример.
10. Каким образом можно удалить сохраненную процедуру?
11. Синтаксис оператора цикла. Приведите пример.
12. Каким образом предоставляется разрешение выполнять сохраненную процедуру?
Содержание отчета:
Отчет должен содержать:
- цель работы;
- описание выполнения примера;
- описание выполнения задания;
- вывод о проделанной работе.
Задание:
36
13. Выполните следующий пример создания триггера.
Создание триггера tr_Real для таблицы «Реализация» базы данных «Магазин» средствами
Enterprise Manager:
«Товар» (Tovar)
 Код товара (KodTov)
 Наименование товара (NameTov)
 Единица измерения (EdIzm)
 Цена по накладной (Cena1)
 Цена розничная (Cena2)
«Склад» (Sklad)
 Код товара (KodTov)
 Количество (Kol_vo)
 Стеллаж (Stelag)
«Реализация» (Realiz)
 Код товара (KodTov)
 Дата реализации (DateR)
 Количество (Kol_voR)
«Приход» (Prihod)
 Код товара (KodTov)
 Дата поступления (DateP)
 Количество (Kol_voP)
«Настройки» (Servis)
 Рабочая дата (RabDate)
Пусть необходимо создать триггер, контролирующий возможность внесения изменений в
таблицы «приход» и «расход». Для обеспечения достоверности учета, ввод данных, за
указанную дату, в данные таблицы должен быть разрешен только до тех пор, пока для
данной даты не подведен баланс в книге расхода и прихода. «Рабочая дата» это дата,
которая является следующей за последней датой подведения баланса из книги расхода и
прихода. В соответствие с выше изложенным, вносить изменения в таблицу «Реализация»
(Realiz) можно только тогда, когда дата реализации больше или равна «Рабочей дате»,
либо меньше или равна текущей (функция GetDate() Transact-SQL). Ниже приведен код
данного триггера:
CREATE TRIGGER tr_Real
ON Realiz
FOR Insert, Update, Delete
AS
/*Примечание: Если необходимо описать переменную внутри триггера,
укажите в начале триггера оператор SET NOCOUNT ON – это
предотвратит возврат данных в приложение. Оператор SET NOCOUNT
определяет, будет ли возвращаться сообщение о количестве обработанных
записей таблицы в ходе выполнения запроса или оператора (сообщение вида
«23 rows affected») */
SET NOCOUNT ON
/* Объявление необходимых локальных переменных */
DECLARE @RabDate datetime
/* Найти информацию о «Рабочей дате» */
SELECT @RabDate = isNull(RabDate, GetDate()) FROM Servis
SET @RabDate = isNull(@RabDate, GetDate())
/* Проверить критерий отказа и в случае необходимости послать
сообщение об ошибке */
37
if exists( SELECT * FROM Inserted
WHERE not (DateR between @RabDate and GetDate()) )
or exists( SELECT * FROM Deleted
WHERE not (DateR between @RabDate and GetDate()) )
begin
/* Примечание: всегда сначала производите откат. Вы можете не
знать, какого рода ошибка обработки произошла, что может
вызвать неоправданно продолжительное время бло кировки */
ROLLBACK TRAN
RAISERROR(‘Вносить изменения можно только, в том случае пока
дата не закрыта. Попробуйте изменить рабочую дату.’
end
Создание триггера очень похоже на объявление хранимой процедуры и имеет следующий
синтаксис:
CREATE TRIGGER имя_триггера
ON таблица
[WITH ENCRYPTION]
{
{FOR {[DELETE] [,] [INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
Инструкция_SQL [, …n]
}
|
{FOR {[INSERT] [,] [UPDATE] }
[WITH APPEND]
[NOT FOR REPLICATION]
AS
{ IF UPDATE (столбец_i) [{AND | OR} UPDATE (столбец_j)]
[…n] }
|
{
IF
(COLUMNS_UPDATE()
{побитовый_оператор}
битовая_маска)
{оператор_сравнения} битовая_маска_столбца […n]
}
Инструкция_SQL [, …n]
}
}
Рассмотрим параметры:
имя_триггера – должно соответствовать стандартным соглашениям об именах объектов
SQL Server и быть уникальным в базе данных
таблица - название таблицы, для которой создается триггер
WITH ENCRYPTION – эта опция дает разработчикам возможность запретить
пользователям читать текст триггера после его загрузки на сервер. Подобная опция очень
удобна для приложений третьих фирм, которые встраивают SQL Server в свои продукты и
не хотят, чтобы клиенты вторгались в их код. В этом случае SQL Server сохраняет текст
триггера в системном каталоге таблицы Syscoments. Применяйте опцию WITH
ENCRYPTION с большой осторожностью: если исходный текст триггера
теряется, восстановить его из зашифрованной таблицы невозможно.
38
FOR DELETE,INSERT,UPDATE – это ключевые слова, определяющие операцию
модификации таблицы, при выполнении которой будет активирован триггер; должно быть
обязательно указано хотя бы одно слово.
WITH APPEND – эта опция необходима, только если установленный уровень
совместимости не превышает 65 и используется при создании дополнительных триггеров,
при уровне совместимости 70 надобность в этой опции отпадает.
NOT FOR REPLICATION – показывает, что триггер активизируется только при
модификации таблицы в процессе репликации.
AS – ключевое слово, задающее начало определения триггера.
Контрольные вопросы:
1. Какие существуют типы триггеров?
2. Для каких таблиц нельзя создавать триггеры?
3. Что называется триггером?
4. Какие операции называются событиями изменения данных?
5. Опишите назначение применения триггеров.
6. Что означают ключевые слова NOT FOR REPLICATION?
7. Что означают ключевые слова SET NOCOUNT ON?
8. Когда запускается триггер?
9. В каких системных таблицах сохраняются значения полей до модификации и после?
10. В чем сходство и различие назначения триггеров и «условий на значения»?
Задание.
Рассмотреть и выполнить приложение, демонстрирующее режим кэширования, вид
которого показан на рис.
39
Выполнение примера.
Индикатор Кэширование переключает режим кэширования. Кнопка Фиксация
фиксирует все сделанные изменения в базе данных. Кнопка Отмена отменяет сделанные
изменения. Когда приложение закрывается, надо проверить, не работало ли оно в режиме
кэширования и не было ли сделано изменений, которые не зафиксированы в базе данных.
Если были, то следует спросить пользователя о необходимости их сохранения и при
положительном ответе зафиксировать изменения.
Коды этого приложения достаточно простые. В свойстве SQL компонента Queryl
запишите «Select * from Pers» и установите свойство CachedUpdates в true. В приложение
можно ввести глобальную переменную modif, которая будет фиксировать наличие не
сохраненных изменений. Ее можно объявить как:
var modif:boolean = false;
Для события OnClick индикатора Кэширование надо предусмотреть обработчик:
Queryl.CachedUpdates:= not Queryl.CachedUpdates;
BApplyUpdates.Enabled:= Queryl.CachedUpdates;
BCancelUpdates.Enabled:= Queryl.CachedUpdates;
if Queryl.CachedUpdates then modif:=false;
Он изменяет режим кэширования таблицы, делает доступными или недоступными в
зависимости от режима кнопки Фиксация (ее имя — BApplyUpdates) и Отмена (ее имя —
BCancelUpdates) и, если включается режим кэширования, то сбрасывается в false значение
modif.
Для события AfterEdit компонента Queryl можно предусмотреть обработчик:
if Queryl.CachedUpdates then modif:=true;
который фиксирует в переменной modif факт редактирования записи.
Обработчик события OnClick кнопки Фиксация имеет вид
Queryl.ApplyUpdates; Queryl.CommitUpdates; modif:=false;
Обработчик события OnClick кнопки Отмена имеет вид
Queryl.CancelUpdates; modif:=false;
В обоих обработчиках переменная modif сбрасывается в false, фиксируя отсутствие
не сохраненных изменений.
if Queryl.CachedUpdates and modif then
case Application.MessageBox(
'Сохранить изменения в базе данных?',
'Подтвердите сохранение изменений',
MB_YESNOCANCEL+MB_ICONQUESTION) of
IDYES: Queryl.ApplyUpdates;
IDCANCEL: CanClose:=false;
IDNO: Queryl.CancelUpdates;
end;
При наличии не сохраненных изменений пользователю задается вопрос «Сохранить
изменения в базе данных?». При положительном ответе изменения сохраняются методом
ApplyUpdates. При отрицательном — изменения отменяются методом CancelUpdates. Если
при получении запроса пользователь нажал кнопку Отмена, то приложение не
закрывается (CanClose задается равным false).
Вроде бы все сделано. Но запустите свое приложение, и увидите, что оно, увы, не
работает. Отредактировать запись или вставить новую запись невозможно. А из кнопок
навигатора доступны только кнопки навигации. Причина всего этого была указана ранее
— Query с запросом Select создает таблицу только для чтения.
Теперь давайте исправим наше приложение. Поместите на него компонент
UpdateSQL со страницы библиотеки Data Access. Чтобы связать его с приложением,
40
установите в компоненте Queryl свойство UpdateObject равным имени введенного
компонента UpdateSQLl. Это имя вы можете выбрать из выпадающего списка в свойстве
UpdateObject.
Теперь можно задавать свойства компонента UpdateSQLl. Этих свойств, кроме Name
и Tag, всего 3: DeleteSQL, InsertSQL и ModifySQL. Они содержат соответственно запросы,
которые должны выполняться при удалении, вставке или модификации записи. Эти
запросы можно записать обычным образом, вручную. А можно воспользоваться
редактором UpdateSQL, который вызывается двойным щелчком на UpdateSQLl или при
выделенном UpdateSQLl вызывается из всплывающего меню. Окно этого редактора имеет
вид, представленный на рис. 3.15. Первая страница Options Редактора UpdateSQL,
представленная на рисунке, содержит два окна Key Fields и Update Fields.
В левом окне Key Fields надо выделить поля, по которым программа будет
распознавать модифицируемую или удаляемую запись. Можно выделить все поля, что
гарантирует максимально возможную надежность распознавания, но можно ограничиться
выбором нескольких наиболее важных полей. При работах с очень большими таблицами
это сэкономит время выполнения запроса. Для выбора совокупности полей можно нажать
клавишу Ctrl и, не отпуская ее, выбрать курсором мыши нужные поля.
В правом окне Update Fields надо выделить поля, значения которых будут задаваться
при модификации или вставке записи. Обычно целесообразно выделить в этом окне все
поля, хотя, конечно, могут быть случаи, когда не все поля надо задавать.
Рис.3.15. Окно редактора UpdateSQL
После того, как вы выделили в этих окнах поля, нажмите кнопку Generate SQL.
После этого вам будет показана вторая страница SQL редактора UpdateSQL, на которой
вы можете просмотреть сгенерированные запросы для модификации (Modify), вставки
(Insert) и удаления (Delete) записи. После щелчка на ОК эти запросы перенесутся в
свойства DeleteSQL, InsertSQL и ModifySQL, где вы их можете, дополнительно
отредактировать.
При всех выделенных полях запрос ModifySQL будет иметь вид:
update Pers
set
NUM = :NUM,
DEP = :DEP,
FAM = :FAM,
NAM = :NAM,
PAR = :PAR,
YEAR_B = :YEAR_B,
41
SEX = :SEX,
AGE = :AGE,
CHARACT = :CHARACT,
PHOTO = :PHOTO
where
NUM = :OLD_NUM and DEP = :OLD_DEP and
FAM = :OLD_FAM and NAM = :OLD_NAM and
PAR = :OLD_PAR and YEAR_B = :OLD_YEAR_B and
SEX = :OLD_SEX and AGE = :OLD_AGE and
CHARACT = :OLD_CHARACT and PHOTO = :OLD_PHOTO
В нем в разделе Set указана установка всех полей в значения, задаваемые
соответствующими параметрами с именами, тождественными именам полей. В этот
раздел включаются те поля, которые вы выделили в окне Update Fields редактора
UpdateSQL. Заполнение этих параметров при выполнении соответствующих команд
приложения вам не потребуется: все это сделают автоматически методы компонента
UpdateSQL. В разделе Where содержатся условия, по которым идентифицируется
модифицируемая запись. В этих условиях используются параметры с именами,
тождественными именам полей, но с префиксом OLD_. Эти параметры — прежние
значения соответствующих полей, которые были получены компонентом до модификации
записи. В условия Where включены те поля, которые вы выделили в окне Key Fields
редактора UpdateSQL.
Естественно, что в зависимости от приложения вы можете заменить эти
автоматически сгенерированные имена параметров на другие или вообще использовать
запросы без параметров. Только имейте в виду, что значения автоматически
сгенерированных параметров в дальнейшем будут автоматически загружаться из
объектов-полей, а если вы от них откажетесь, то и соответствующие значения должны
будете задавать сами.
Запросы в свойствах DeleteSQL и InsertSQL строятся по такому же принципу.
Запустите теперь приложение, и вы увидите, что оно стало работать. Можно
редактировать записи, удалять, вставлять новые записи, управлять кэшированием.
В данном случае все получилось так просто, поскольку соответствующие методы
работы с UpdateSQL автоматически выполняются компонентами DBNavigator и DBGrid. В
некоторых других приложениях эти методы надо вызывать явно.
Метод
Apply(UpdateKind: TUpdateKind)
обеспечивает загрузку значений всех необходимых параметров и выполнение одного из
запросов компонента UpdateSQL. Какого именно — определяется параметром UpdateKind,
который может принимать значения ukModify, uklnsert или ukDelete, что соответствует
выполнению запроса, хранящегося в свойствах ModifySQL, InsertSQL и DeleteSQL.
Например, оператор
UpdateSQLl-Apply(ukModify)
вызовет выполнение запроса, содержащегося в свойстве ModifySQL.
Если нужный запрос SQL не содержит параметров, то эффективнее вызвать метод
ExecSQL(UpdateKind: TUpdateKind)
который тоже обеспечивает выполнение указанного запроса, но без предварительной
загрузки значений параметров. Наконец, метод
SetParams(UpdateKind: TUpdateKind)
обеспечивает загрузку значений параметров указанного запроса SQL без его выполнения.
Таким образом, метод Apply — это просто последовательное выполнение методов
SetParams и ExecSQL.
Контрольные вопросы:
42
1.
2.
3.
4.
5.
6.
Что такое транзакция?
Для чего необходимо кэшировать изменения данных?
Каким свойством компонента Query определяется режим кэширования?
Какой метод обеспечивает передачу данных в базу данных?
Какой метод очищает буфер кэша?
Что позволяет выполнить компонент UpdateSQL?
Задание для примера:
1. Создать простой отчет для приложения, созданного на предыдущей практической
работе.
Задание:
14. Выполните следующий пример резервного копирования базы данных.
Чтобы вызвать утилиту SQL Server Backup, воспользуйтесь одним из следующих
способов:
- раскройте сервер на левой панели Enterprise Manager, затем раскройте папку
Management, Щелкните правой кнопкой мыши Backup и выберите в контекстном меню
команду Backup A Database;
- раскройте сервер на левой панели Enterprise Manager, а затем щелкните правой
кнопкой мыши папку Database. В контекстном меню выберите АН Tasks, а затем —
команду Backup Database;
- раскройте сервер на левой панели Enterprise Manager и выберите папку Database. На
правой панели щелкните правой кнопкой мыши базу данных, выберите в контекстном
меню Аll Tasks, а затем — команду Backup Database.
43
Download