Лекции.Орг


Поиск:




Для чего необходимо связывание?

Какая связь между сущностями и стрелками?

Как создать отчет о связывании?

Опишите процесс связывания.

5. Какие ассоциации задаются для сущностей?

6. Что означает ассоциация IRUN?

7. Для чего служит кнопка Migrate на закладке Arrow Data?

8. Как сформировать отчет о связывании?

9. Какие поля можно отразить в отчете?

10. Как задать действия применимые к атрибутам?


Лабораторная работа №5

«Генерация схемы базы данных в MS ACSESS 2000»

 

Цель: научится создавать базу данных в MS ACSESS 2000 путем генерации схемы данных из Erwin 4.1.

 

Для генерации схемы БД из ERwin необходимо её открыть.

Перейти к вкладке Physical (Физическая), выбрав нужный пункт из выпадающего списка на панели инструментов (рис.1).

Рисунок 1. – Переход к физической модели.

 

В меню Database выбрать пункт Choose Database (рис.2).

Рисунок 2. – Меню Database.

 

В открывшемся диалоговом окне выбрать в разделе Target Desktop DBMS выбрать Access, в разделе Access Version из выпадающего списка выбрать 2000 (рис. 3). Нажать ОК.

Рисунок 3. – Диалоговое окно Target Server.

Создать пустую базу данных Access (Пуск/Программы/ Microsoft Office/ Microsoft Access 2000). Сохранить и закрыть её.

В меню Tools выбрать пункт Forward Engineer/Schema Generation… (рис.4).

Рисунок 4. – Меню Tools.

В открывшемся диалоговом окне Access Schema Generation нажать Generate.

 

Рисунок 5. – Диалоговое окно Access Schema Generation.

 

В появившемся диалоговом окне Access Connection в поле User Name ввести admin. Нажать кнопку Browse рядом с полем Database и найти ранее созданную базу данных Access. После этого нажать Connect (рис. 6).

Рисунок 6. – Диалоговое окно Access Connection.

Появится диалоговое окно Generate Database Schema, в котором отражаются результаты. При возникновении ошибки генерация приостанавливается. Для продолжения необходимо выбрать Continue. Чтобы при возникновении ошибки процесс генерации не останавливался, необходимо снять метку Stop If Failure (рис. 7).

Нажать ОК. Открыв свою базу данных Access можно просмотреть результат генерации.

Рисунок 7. – Диалоговое окно Generate Database Schema.

 

После генерации необходимо открыть созданную базу данных и занести всю необходимую информацию в таблицы Access.

Таблица 1. Сотрудники библиотеки

Сотрудники библиотеки

табельный номер фамилия имя отчество Номер отдела дата рождения должность
100001 Юрченко Тамара Степановна 10 19.09.1946 директор
100002 Воронина Людмила Евгеньевна 10 21.02.1953 зам. Директора
110003 Иванова Елена Ивановна 11 05.06.1950 нач. отделов обслужи
110004 Герасимович Татьяна Леонидовна 11 19.11.1978 Ведущий библиотекарь
110005 Титова Светлана Ивановна 11 25.10.1965 Библиотекарь 1 катег
110006 Антоненко Ольга Валентиновна 11 22.10.1983 Библиотекарь 2 катег
110007 Старовойтова Алеся Владимировна 11 19.01.1984 Библиотекарь
120008 Литвинова Татьяна Васильевна 12 13.03.1958 зав. Оттд. Периодики
120009 Лионенко Инна Ивановна 12 15.05.1974 вед библиотекарь
120010 Пилипенко Тамара Борисовна 12 17.10.1954 вед библиотекарь
130011 Новикова Светлана Николаевна 13 10.04.1960 Зав. Отд. Библиограф
130012 Михайлова Юлия Юрьевна 13 04.04.1984 Библиограф
130013 Войтова Елена Николаевна 13 03.08.1962 Библиограф
140014 Юрова Людмила Вадимовна 14 12.09.1964 зав. Отд. Комплектов
140015 Василевская Елена Андреевна 14 23.07.1968 вед библиотекарь
140016 Алейникова Александра Алексеевна 14 06.03.1978 Библиотекарь 1 катег
140017 Богданова Светлана Петровна 14 16.12.1982 библиотекарь

 

Запросы.

После заполнения приступаем к созданию запросов.

Пример: пусть нам необходимо получить информацию о книгах, которыми пользовался какой-либо студент. Информация должна содержать имя и фамилию студента, название книги, её автора, номер отдела, где хранится книга

Схема данных представлена на рисунке 9.

Проанализируем запрос. Информация о студентах хранится в таблице «Студенты», информация о его пользовании библиотекой – в таблице «Пользование библиотекой2», здесь же хранится информация о шифре книги, которой пользовался студент. Информация об экземплярах находится в таблице «Экземпляр», а информация об авторе и названии книги – в «Книги».

Все перечисленные таблицы необходимо включить в запрос.

Выбираем в разделе «Объекты» пункт «Запросы». Создаем запрос в режиме конструктора.

1. Выбираем таблицы, с помощью которых будет реализован запрос.

2. Выбираем, какие поля из выбранных таблиц будут выводиться на экран.

3. Задаем условия для выполнения запроса. При запуске запроса будет необходимо ввести имя и фамилию студента. Выбираем в меню «Запросы» пункт «Параметры». В появившемся окне заносим имя параметра и его тип (рис. 10).

 

Рисунок 9 – Схема данных

Рисунок 10 – Создание параметров запроса

4. В столбцах, значение которых будет зависеть от параметров в поле «Условие отбора» в квадратных скобках пишем соответствующий параметр. (Рис.11)

Рисунок 11 – Вид созданного запроса в режиме конструктора

 

Запрос готов (рис. 12). Сохраняем и запускаем.

Рисунок 12 – Результат запроса

Формы:

Формы создаются для удобства ввода новой информации в базу данных. Они могут быть созданы как для таблиц, так и для запросов.

Выбираем в разделе «Объекты» пункт «Формы». Создаем формы с помощью мастера форм.

Изменять формы можно в режиме конструктора.

Кнопочные формы

Пример создания кнопочной формы.

На одной странице кнопочной формы можно разместить не более 8 объектов. Поэтому для построения кнопочной формы для базы библиотеки разобьем таблицы на три группы:

· «Литература», сюда войдут таблицы «Книга», «Экземпляры», «Списанные экземпляры», «Замена экземпляров», «Периодические издания»;

· «Сотрудники и читатели» – «Студенты», «Преподаватели», «Сотрудники библиотеки»;

· «Пользование библиотекой и заказ лит-ры» – таблицы «Пользование библиотекой1», «Пользование библиотекой2», «Пользование библиотекой3», «Заказы».

На первой странице главной кнопочной формы кроме этих групп разместим кнопку «Выход из приложения», а в страницах групп добавим возможность подниматься на уровень вверх.

 

Отчеты

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

Для этого в отчет необходимо включить таблицы «Пользование библиотекой2» (Дата выдачи, Дата приема), «Студенты» (Имя, Фамилия, Отчество), «Книги» (Автор, Название).

 

    Пользование библиотекой

             Имя Егор

             Фамилия Маханьков

             Отчество Геннадьевич

Дата выдачи Дата приема                        Автор Название

12.12.2007                Хомченко Г.П.   Пособие по химии

 

Вопросы:

1. На каком уровне производится генерация схемы данных?

2. Как можно выбрать базу данных, в которую будет произведена генерация?

3. Как установить связь с базой данных MS ACCESS?

4. Опишите процесс генерации схеме базы данных?

5. Какая команда выполняет генерацию базы данных?

6. Для чего необходимы отчеты?

7. Для чего используются формы в MS ACCESS?

8. Как создать кнопочную форму в MS ACCESS?

9. Как создать запрос с параметром в MS ACCESS?

10.  Существует ли операция, обратная операции генерации схемы базы данных?

 

 


Лабораторная работа №6

«Генерация схемы базы данных в MS SQL SERVER.»

 

Цель: научится создавать базу данных MS SQL SERVER путем генерации её схемы из Erwin 4.1.

 

Для генерации схемы БД из Erwin необходимо её открыть.

Перейти к вкладке Physical (Физическая), выбрав нужный пункт из выпадающего списка на панели инструментов (рис.1).

Рисунок 1. – Переход к физической модели.

 

В меню Database выбрать пункт Choose Database (рис.2).

Рисунок 2. – Меню Database.

 

В открывшемся диалоговом окне выбрать в разделе Target SQL DBMS выбрать SQL Server, в разделе SQL Server Version из выпадающего списка выбрать 2000 (рис. 3). Нажать ОК. На вопрос «Would you like to convert databases type from Access 2000 to SQL Server 2000? This is not undoable» ответить Yes и не снимать метку Convert Domain Datatypes.

Рисунок 3. – Диалоговое окно Target Server.

 

На сервере с помощью преподавателя создать базу данных.

В меню Tools выбрать пункт Forward Engineer/Schema Generation… (рис.4).

Рисунок 4. – Меню Tools.

В открывшемся диалоговом окне SQL Server Schema Generation нажать Generate (рис. 5). (Если необходимо сохранить скрипт создания базы данных, то до нажатия кнопки Connect, следует нажать Report. Erwin предложит выбрать файл для сохранения скрипта, после указания имени файла и расширения, нажать ОК.)

 

Рисунок 5. – Диалоговое окно SQL Server Schema Generation.

 

В открывшемся окне SQL Server Connection ввести:

в поле User Name – имя пользователя;

в поле Password – свой пароль;

в поле Database – имя базы данных;

в поле Server Name– имя сервера.

Нажать Connect (рис. 6).

 

Рисунок 6. – Диалоговое окно SQL Server Connection.

 

Появится диалоговое окно Generate Database Schema, в котором отражаются результаты. При возникновении ошибки генерация приостанавливается. Для продолжения необходимо выбрать Continue. Чтобы при возникновении ошибки процесс генерации не останавливался, необходимо снять метку Stop If Failure (рис. 7). Нажать ОК.

Рисунок 7. – Диалоговое окно Generate Database Schema.

Вопросы:

1. На каком уровне производится генерация схемы данных?

2. Как установить связь с базой данных?

3. Опишите процесс генерации схемы базы данных?

4. Какая команда выполняет генерацию базы данных?

5. Как получить скрипт создания базы данных?

6. Какая информация хранится в скрипте?

7. Как отключить остановку генерации при возникновении ошибок?

8. Как изменить текущую базу данных?

9. Почему генерацию нельзя проводить на логическом уровне?

10.


Лабораторная работа №7

«Создание источника данных OBDC. Связь с таблицами»

 

Чтобы получить доступ к базе данных SQL Server необходимо определить источник данных. Источник данных ODBC – это ссылка на внешнюю базу данных. Для каждой базы данных сервера, с которой работает Access, должен быть создан источник данных. К источника данных обращаются по именам. Создать источник данных позволяет программа – администратор ODBC.

Администратор ODBC позволяет настраивать и использовать три типа источников данных:

Пользовательский источник данных User DSN. Такие источники данных могут применяться только одним пользователем, работающим на данном компьютере.

Системный источник данных SYSTEM DSN - Предназначен для всех пользователей и системных служб на данном компьютере.

Файловый источник данных FILE DSN – предназначен для получения доступа к базе данных многими пользователями разных компьютеров сети, на которых установлены одинаковые драйверы.

Создание User DSN

1. Выполните команду Пуск – Настройка – Панель управления –Администрирование – Источники данных (ODBC).

В открывшемся окне Администратора источников данных ODBC на вкладке Драйверы будут представлены все установленные драйверы ODBC. Убедитесь, что на вашем компьютере установлен ODBC драйвер SQL Server.

Рисунок 8. – Окно Администратора источников данных ODBC вкладка Драйверы

 

2. Перейдите на вкладку Пользовательский DSN. Первоначально на ней нет источников данных для SQL Server. Нажмите кнопку Добавить. В открывшемся окне Создание нового источника данных выберите драйвер SQL Server, для которого создается источник, и нажмите кнопку Готово.

Рисунок 10. – Создание нового источника данных

 

3. Включается мастер создания нового источника данных.

ü В первом окне мастера введите:

· В поле Имя - имя источника данных, например Istok, которое будет использоваться при определении источника данных во время подключения приложения к базе данных сервера;

· В поле Описание введите комментарий Лабораторная работа, который поможет определить назначение базы данных, используемой в качестве источника данных.

· В списке Сервер укажите сервер A 518-1, с которым нужно соединиться для получения доступа к базе данных.

Рисунок 11. – Образец заполнения.

ü Во втором окне мастера выберите способ проверки прав доступа пользователя к SQL Server при подключении к нему. К SQL Server можно подключаться по доверительному соединению, при котором пользователь, зарегистрировавшийся в сети Windows NT и представленный в списке пользователей сервера, не проверяется дополнительно. Этот режим задается при выборе переключателя Проверка подлинности учетной записи SQL Server. Включите переключатель «Получить данные, используемые по умолчанию, от SQL Server». В поле «Пользователь» введите свою фамилию, в поле «Пользователь» введите свой пароль.

Рисунок 12. – Проверка подлинности пользователя.

ü В третьем окне мастера введите имя базы данных сервера, которая будет задана по умолчанию при использовании создаваемого источника данных. Конкретное имя базы данных указывает преподаватель.

ü Значения остальных параметров в окне Мастера задаются по умолчанию.

4. Протестируйте новый источник данных, нажав кнопку Проверить источник данных. Результаты тестирования отобразятся на экране.

5. После выполнения перечисленных действий в окне Администратора источников данных ODBC на вкладке Пользовательский DSN в списке появится строка с именем нового источника данных Istok.

Создание связи с таблицами баз данных SQL Server

Одним из способов использования данных SQL Server является связь с таблицами его баз данных. Связанные таблицы, оставаясь на сервере в формате источника, отображаются в окне базы данных Access. Эти таблицы могут быть использованы наряду с локальными таблицами базы данных при создании запросов, форм, отчетов средствами Access. Связанные таблицы можно просматривать и в режиме конструктора, однако никаких изменений в структуре таблицы сделать нельзя.

Для создания связи с внешними таблицами в новой пустой базе данных Access выполните команду Файл – Внешние данные – Связь с таблицами. Для создания связи с таблицами из внешней базы данных ODBC, размещенной на SQL Server, в открывшемся окне Связь, выберите в списке Тип файлов строку ODBC Databases ().

 

Рисунок 13. – Выбор типа связи

 

В следующем окне Выбор источника данных выберите источник данных ODBC Istok, обеспечивающий подключение к нужному серверу и базе данных (Рис. 14).

В окне регистрации пользователя включите флажок «Использовать доверительное соединение».

Рисунок 14. – Выбор источника данных

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

После выбора таблиц и выполнения процедуры связывания, выбранные таблицы сервера будут отображены в списке таблиц окна базы данных. Связанные таблицы могут отображаться в режиме таблицы и в режиме конструктора. Однако нельзя модифицировать структуру связанной таблицы.

   

Вопросы:

1. Какие существуют типы источников данных ODBC?

2. Как создается пользовательский DNS?

3. Для чего создается системный DNS?

4. Какой драйвер должен быть подключен на компьютере для создания пользовательского DNS?

5. Какие виды идентификации можно использовать?

6. Как протестировать созданный источник данных?

7. Как установить связь с таблицами?

8. Что необходимо сделать, чтобы в связанную таблицу можно было добавлять данные?

9. Обязательно ли все таблицы с базы данных попадут в текущую базу?

10. Можно ли делать изменения в структуре таблиц с помощью Access?

 


Лабораторная работа №8

«Создание хранимых процедур»

 

Цель: изучить хранимые процедуры и научиться самостоятельно создавать их.

 

Хранимые процедуры имеют очень много общего с обычными процедурами, широко используемыми в различных языках программирования. Определение хранимой процедуры заключается в исполнении следующей команды:

CREATE PROCEDURE] procedure_name [;number]

[ {^parameter data_type} [VARYING] [= default] [OUTPUT] ] [,...n]

[WITH { RECOMPILE

| ENCRYPTION

| RECOMPILE. ENCRYPTION } ]

[FOR REPLICATION]

AS sql_statement [...n]

Синтаксис имеет следующее назначение:

procedure_name — имя создаваемой процедуры. Используя префиксы sp_, # и ##, можно определить создаваемую процедуру как системную или временную. При этом, однако, необходимо позаботиться и о размещении процедуры в соответствующей системной базе данных, поскольку команда CREATE PROCEDURE создает хранимую процедуру в текущей базе данных. Поэтому перед созданием процедуры необходимо выполнить команду USE, чтобы сделать требуемую базу данных текущей;

number — параметр определяет идентификационный номер хранимой процедуры, однозначно определяющий ее в группе процедур;

(^parameter — определяет имя параметра, который будет использоваться создаваемой хранимой процедурой для передачи входных или выходных данных. Параметры, определяемые при создании хранимой процедуры, являются локальными переменными, поэтому несколько хранимых процедур могут иметь абсолютно идентичные параметры;

к data_type — определяет, к какому типу данных должны относиться значения параметра описываемой процедуры. Для определения параметров можно использовать любые типы данных;

OUTPUT — использование этого ключевого слова определяет указанный па­раметр как выходной;

  VARYING — ключевое слово, которое используется совместно с параметром, относящимся к типу данных cursor. Определяет, что в качестве выходного параметра будет представлено результирующее множество;

default — позволяет определить для параметра значение по умолчанию, которое хранимая процедура будет использовать в случае, если при ее вызове указанный параметр был опущен. 

RECOMPILE — ключевое слово, предписывающее системе создавать план выполнения процедуры при каждом ее вызове;

  FOR REPLICATION — процедура, определенная с использованием данного ключевого слова, предназначена исключительно для осуществления процесса репликации. Вы не можете сочетать это ключевое слово с ключевым словом WITH RECOMPILE;

  ENCRYPTON — если при определении процедуры было использовано данное ключевое слово, то текст процедуры непосредственно перед записью в системную таблицу syscomments будет зашифрован. Вы можете прибегнуть к шифрованию, если необходимо скрыть от пользователя особенности реализации хранимой процедуры;

AS — ключевое слово, определяющее начало кода хранимой процедуры. После этого ключевого слова следуют команды Transact-SQL, которые и составляют непосредственно тело процедуры (sql statement). Здесь можно использовать любые команды, включая вызов других хранимых процедур, за исключением команд, начинающихся с ключевого слова CREATE.

Примеры

1. Список выдач книг за текущий день.

CREATE PROCEDURE CpicokVidach

AS

SELECT /*Перечисляем поля, которые будут выведены в результате запроса */

Пользование_библиотекой2.Табельный_номер, COUNT(Пользование_библиотекой2.Дата_выдачи)        

FROM /*указываем имя таблицы из которых выбираются записи*/

Пользование_библиотекой2

WHERE /*задаем условие отбора*/

Пользование_библиотекой2.Дата_выдачи=(SELECT GETDATE())

GROUP BY /*производится группировка по указанному полю*/

Табельный_номер

/*SELECT GETDATE() позволяет получить текущую дату (год, месяц, число)

COUNT (<поле>) возвращает количество записей какого-либо поля*/

 

2. Количество экземпляров какой-либо книги.

CREATE PROCEDURE KolExzemplarov

/*Объявляем необходимые переменные*/

@ISBN varchar(20)

AS

/* Следующая конструкция проверяет, существуют ли записи в таблице «Книги» с заданным ISBN */

IF not EXISTS (SELECT * FROM Книга WHERE ISBN = @ISBN)

RETURN 0 /*Вызывает конец процедуры KolExzemplarov */

SELECT Экземпляр.ISBN

INTO TEMP1 /*Сохраняет выбранные поля во временной таблице Temp 1*/

FROM Экземпляр

WHERE ISBN = @ISBN

SELECT COUNT(ISBN) /* Count подсчитывает количество неповторяющихся записей поля ISBN */

FROM TEMP1

 

3. Список книг, которыми пользовался какой-либо студент

CREATE PROCEDURE CpicokKnigCtudenta

@Chit_nom int /*Объявляем необходимые переменные*/

AS SELECT Студенты.Имя, Студенты.Фамилия, Пользование_библиотекой2.Шифр, Книга.Автор, Книга.Название

FROM /*указываем имена таблиц, из которых выбираются записи*/

Книга, Экземпляр,Студенты, Пользование_библиотекой2

WHERE (Студенты.Читательский_номер = Пользование_библиотекой2.Читательский_номер) AND (Экземпляр.Шифр = Пользование_библиотекой2.Шифр) AND (Экземпляр.ISBN =Книга.ISBN)

/* AND позволяет задать в операторе WHERE несколько условий, которые должны выполняться одновременно*/

4. Удаление из таблицы «Студенты». Допустимо, если в таблице «Пользование библиотекой2» нет ссылающихся записей.

CREATE PROCEDURE DeleteStudent

@Chit_nom int        /*Объявляем необходимые переменные*/

AS         /*Проверяем, если ссылающиеся записи, если записей нет, разрешается удаление.*/

IF not EXISTS (SELECT * FROM Пользование_библиотекой2 WHERE Читательский_номер=@Chit_nom)

DELETE /*Оператор удаления*/

 FROM Студенты    /*Имя таблицы, откуда нужно удалить*/

WHERE /*Условие удаления – удаляем строку, для которой значение поля Читательский_номер совпадает с нужным*/

Читательский_номер=@Chit_nom

 

5. Вставка в таблицу «Заказы». Разрешена, если в таблицах «Книга» и «Преподаватели» есть записи, на которые будет ссылаться новая запись.

PROCEDURE NewZakaz

@Kolvo int,                       /*Объявляем необходимые переменные*/

@data_zakaza datetime,

@Chit_nomer int,

@ISBN varchar(20)

AS /*Проверяем, есть ли запись в таблице «Заказы» с такими же значениями ключевых полей, как у новой записи*/

IF EXISTS (SELECT * FROM Заказы WHERE ISBN = @ISBN AND Читательский_номер=@Chit_nomer)

RETURN 0 /*Если есть, завершаем выполнение процедуры*/

IF EXISTS (SELECT * FROM Преподаватели WHERE Читательский_номер = @Chit_nomer)

/*Проверили, есть ли в «Преподаватели» соответствующая запись*/

IF EXISTS (SELECT * FROM Книга WHERE ISBN = @ISBN)

/*Проверили, есть ли в «Книга» соответствующая запись*/

INSERT INTO Заказы /*Указываем таблицу, куда вставляем запись*/

VALUES (@Kolvo,@data_zakaza,@Chit_nomer, @ISBN)   /* Указываем какие значения*/

 

6. Обновление таблицы «Студенты». Изменение фамилии студента.

CREATE PROCEDURE UpdateStudent

 @Chit_nom int,                                  /* Объявляем необходимые переменные */

 @Fam varchar(20)

 AS

IF EXISTS (SELECT * FROM Студенты             /* Проверяем, существуют ли студенты,*/

WHERE Читательский_номер = @Chit_nom) /*читательский номер которых равен искомому*/

UPDATE Студенты                                      /*Если такие есть обновляем «Студенты»

SET Фамилия=@Fam                         /*полю фамилия присваиваем новое значение*/

WHERE Читательский_номер = @Chit_nom /*если  читательский номер записи равен искомому*/

7. Вставка в таблицу «Пользование библиотекой2». Разрешается, если есть в таблицах «Студенты», «Сотрудники_библиотеки» и «Экземпляр» соответствующие записи.

ALTER PROCEDURE NewPolzovanieStydentov

@Chit_nomer int,                                /*Объявляем необходимые переменные*/

@data_vidachi datetime,

@data_priema datetime,

@tab_nomer int,

@Shifr varchar(20)

AS

IF EXISTS (SELECT * FROM Пользование_библиотекой2 /*Проверяем, нет ли уже в таблице */

WHERE Шифр = @Shifr AND                   /*записи с таким же значением первичного ключа*/

Читательский_номер=@Chit_nomer)

RETURN 0                                                    /* если есть, завершается процедура*/

IF EXISTS (SELECT * FROM Студенты             /*проверяем наличие соответствующей записи в*/

WHERE Читательский_номер = @Chit_nomer)            /*таблице «Студенты»*/

IF EXISTS (SELECT * FROM Экземпляр            /*проверяем наличие соответствующей записи в*/

 WHERE Шифр = @Shifr)                                     /*таблице «Экземпляр»*/

IF EXISTS (SELECT * FROM Сотрудники_библиотеки /* проверяем наличие соответствующей */

WHERE табельный_номер = @tab_nomer) /* записи в таблице «Сотрудники_библиотеки»*/

INSERT                                               /* если условия выполняются, добавляем*/

INTO Пользование_библиотекой2             /*в таблицу новые значения*/

VALUES (@Chit_nomer,@data_vidachi,@data_priema,@tab_nomer,@Shifr)

 

8. Вставка в таблицу «Сотрудники_библиотеки». Проверяется, наличие соответствующей записи в поле номер-отдела в таблице «Отделы».

CREATE PROCEDURE NewSotrudnik

 @Tab_nom int,                          /*Объявляем необходимые переменные*/

 @Fam varchar(20),

 @Name varchar(20),

 @Sec_name varchar(20),

 @data_rogd datetime,

 @Dolgn varchar(20),

 @Nom_otd int

AS

IF EXISTS (SELECT * FROM Сотрудники_библиотеки       /*Проверяем, нет ли уже в таблице */

WHERE Табельный_номер = @Tab_nom) /*записи с таким же значением первичного ключа*/

RETURN 0                                                                      /* если есть, завершается процедура*/

IF EXISTS (SELECT * FROM Отделы        /*Проверяем, есть ли уже в таблице «Отделы» */

WHERE Номер_отдела = @Nom_otd)        /*записи с таким же значением поля номер_отдела*/

INSERT                                                         /* если условие выполняется, добавляем*/

INTO Сотрудники_библиотеки                                               /*в таблицу новые значения*/

VALUES (@Tab_nom,@Fam, @Name, @Sec_name, @data_rogd, @Dolgn, @Nom_otd)

 

9. Сколько существует должностей в библиотеке.

CREATE PROCEDURE KolDolgn

AS SELECT COUNT (DISTINCT Сотрудники_библиотеки.должность)

FROM Сотрудники_библиотеки /* COUNT (DISTINCT <поле>) подсчитывает количество разноименных значений какого-либо поля в таблице*/

10. Обновление таблицы «Отделы». Изменился начальник отдела.

ALTER PROCEDURE UpdateOtdel

@Nom_otdela int,

@Fam_New_Nach_otd varchar(20),

@Tab_Nom_New_Nach_otd int

AS

IF not EXISTS (SELECT * FROM Сотрудники_библиотеки /*Условие проверяет, есть ли в */

WHERE табельный_номер = @Tab_Nom_New_Nach_otd    /* библиотеке сотрудник с искомыми*/

AND фамилия=@Fam_New_Nach_otd)                         /*фамилией и табельным номером*/

RETURN 0                                                                      /* если нет, завершается процедура*/

IF EXISTS (SELECT * FROM Отделы                /*Условие проверяет, есть ли в библиотеке*/

WHERE Номер_отдела = @Nom_otdela)                                                  /*искомый номер отдела*/

UPDATE Отделы 

SET фамилия_начальника_отдела=@Fam_New_Nach_otd   /*меняем значение поля «фамилия начальника отдела» на новое*/

UPDATE Отделы

SET табельный_номер_начальника=@Tab_Nom_New_Nach_otd /*меняем значение поля «табельный номер начальника отдела» на новое*/

WHERE Номер_отдела = @Nom_otdela              /*меняем только для записи, у которой значение «номер_отдела» равно искомому*/

 

Вопросы:

1. Что такое хранимая процедура?

2. Чем хранимая процедура отличается от обычной процедуры?

3. С помощью какой команды можно создать хранимую процедуру?

4. С помощью какой команды можно изменять хранимую процедуру?

5. Какие стандартные виды хранимых процедур существуют?

6. Опишите структуру хранимой процедуры.

7. Для чего используется функция COUNT?

8. Как описываются переменные, используемые в процедуре?

9. Как вызвать хранимую процедуру?

10. Для чего необходим оператор AS?


Лабораторная работа №9

«Триггеры»

 

Цель: изучить триггеры и научиться самостоятельно создавать их.

 

Триггер – это специальный тип хранимых процедур, который запускается автоматически при выполнении тех или иных действий с данными таблицы. Каждый триггер привязывается к конкретной таблице.

Существует три типа триггеров в зависимости от команд, на которые они реагируют:

1) Триггеры на вставку.

2) Триггеры на обновление.

3) Триггеры на удаление.

Для одной таблицы допускается создание нескольких однотипных триггеров.

Для создания триггера используется следующая команда Transact SQL:

CREATE TRIGGER trigger_name

ON TABLE

[WITH ENCRYPTION]

{FOR {[DELETE] [,] [INSERT] [,] [UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

sql_statement [...n]

}  

Trigger_name – задает имя триггера, с помощью которого он будет распознаваться хранимыми процедурами и командами Transact SQL. Имя триггера должно быть уникальным в пределах БД.

TABLE – имя таблицы БД, к которой будет привязан триггер.

WITH ENCRYPTION – при указании этой опции сервер выполняет шифрование кода триггера.

[DELETE] [,] [INSERT] [,] [UPDATE] – эта конструкция определяет, на какие автоматы будет реагировать триггер. При создании триггера должно быть указано хотя бы одно из этих ключевых слов, допускается создание триггера, реагирующего на две или три команды.

WITH APPEND – указание этого ключевого слова требуется для обеспечения совместимости с более ранними версиями SQL-сервер.

NOT FOR REPLICATION – запрещает запуск триггера при модификации таблиц с помощью репликации.

sql_statement – определяет набор команд, которые будут выполняться при запуске триггера.

Второй вариант данной команды:

CREATE TRIGGER trigger_name ON TABLE

[WITH ENCRYPTION]

{FOR { [[INSERT] [,] [UPDATE]}

[WITH APPEND]

[NOT FOR REPLICATION]

AS

{ IF UPDATE (column)

[ { AND/OR }

UPDATE(column) ]

[..n]}

sql_statement [...n]}}

FOR { [[INSERT] [,] [UPDATE] – эта инструкция определяет, при выполнении какой команды будет запускаться триггер.

IF UPDATE (column) – использование этого параметра позволяет выполнить триггер при модификации конкретной колонки таблицы.

AND/OR UPDATE(column) – применение совпадает с предыдущим параметром, если необходимо выполнить запуск триггера при модификации нескольких колонок. Аргумент column задает имя колонки, при модификации которой будет производиться запуск триггера. Ключевое слово AND предписывает запускать триггер только в том случае, если были модифицированы обе колонки, указанные в этой и в предыдущей конструкции. При использовании ключевого слова OR триггер будет выполнен при выполнении изменений в любой из колонок. Допускается использование нескольких конструкций AND/OR UPDATE(column).

Для изменения триггера используется команда ALTER TRIGGER.

Примеры

1. Триггер, который будет запрещать удаление записей таблицы «Пользование библиотекой», если текущий пользователь не владелец базы данных и если поле «дата выдачи» содержит какое-либо значение.

CREATE TRIGGER udalenie                                 /* Обьявляем имя триггера */

ON Пользование_библиотекой2 /*Указываем имя таблицы, с которой будет связан триггер*/

FOR DELETE /*Указываем операцию, на кот. будет срабатывать триггер (здесь на удаление)*/

AS

IF (SELECT count(*)                                                                                /* проверяет */

from Пользование_библиотекой2 / *записи из таблицы «Пользование библиотекой»*/

where Пользование_библиотекой2.дата_выдачи is not null)>0 /*условие проверяет наличие записи в поле «дата выдачи». Если count возвращает значение отличное от нуля (означает, что запись есть) то первое условие IF не выполнено*/

AND (CURRENT_USER <> 'dbo') /*вызывается функция определения имени текущего пользователя и проверяется, владелец ли он*/

BEGIN      

PRINT 'у вас нет прав на удаление этой записи' /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION                               /*откат (отмена) транзакции*/

END

 

2. Проверяет правильность номера отдела. Существует лишь 5 отделов, которым присваиваются номера от 10 до 14 включительно.

CREATE TRIGGER dobavlenie

ON Отделы

FOR INSERT

AS

DECLARE @@f int                            /*Объявляем переменную*/

Set @@f=10                                         /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Отделы, inserted

WHERE Отделы.Номер_отдела = inserted.Номер_отдела)

Set @@f=0

IF EXISTS (SELECT * FROM Отделы, inserted

WHERE inserted.Номер_отдела>14 OR inserted.Номер_отдела<10) /*Если номер отдела не >14 или <10, то такой отдел не существует*/

Set @@f=0                   /*Меняем значение переменной*/

 

If @@f=0                 /*если f =0, значит были ошибки*/

BEGIN

PRINT 'Неверно введены данные'      /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION            /*откат (отмена) транзакции*/

END

/* inserted – временная таблица, куда заносятся добавляемые данные*/

 

3. Триггер, который записывает при удалении записей из таблицы «Преподаватели» в отдельную таблицу информацию о дате удаления, пользователе,

Перед созданием такого триггера необходимо создать таблицу DeletedItems, куда будет производится запись:

CREATE TABLE DeletedItem (

     [Читательский_номер] [int] NOT NULL, /*объявляем поля таблицы*/

    [имя] [varchar] (25) NULL,

    [отчество] [varchar] (75) NULL,

[фамилия] [varchar] (25) NULL,

    [должность] [varchar] (35) NULL,

     [Имя_пользователя] [varchar] (50) NULL,

     [Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Сам триггер выглядит следующим образом;

CREATE TRIGGER deletedby

ON Преподаватели                    /*Связываем триггер с таблицей Преподаватели*/

FOR DELETE

AS

INSERT INTO DeletedItem     

(Читательский_номер,имя,отчество, /*указываем, какие поля нужно вставить*/

фамилия,должность,Имя_пользователя,Дата_удаления)

SELECT Читательский_номер,имя,отчество,фамилия, должность,

SYSTEM_USER,                                  /*функция определяет текущего пользователя*/

getdate()                                      /*функция возвращает текущую дату*/

FROM deleted /* deleted – временная таблица, куда заносятся удаляемые данные*/

 

4. Триггер, который записывает при добавлении записей в таблицы «Сотрудники_Библиотеки» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу InsertedItemSotrydniki, куда будет производится запись:

CREATE TABLE InsertedItemSotrydniki

(

       [табельный_номер] [int] NOT NULL,  /*объявляем поля таблицы*/

[фамилия] [varchar] (25) NULL,

       [имя] [varchar] (25) NULL,

       [отчество] [varchar] (75) NULL,

    [Дата_рождения] [datetime] NULL,

    [должность] [varchar] (35) NULL,

      [Имя_пользователя] [varchar] (50) NULL,

      [Дата_добавления] [datetime] NULL

) ON [PRIMARY]

Сам триггер выглядит следующим образом;

CREATE TRIGGER infoInsertSotrud

ON Сотрудники_библиотеки    /*Связываем триггер с таблицей Сотрудники_библиотеки */

FOR INSERT

AS

INSERT INTO InsertedItemSotrydniki (Табельный_номер, /*указываем, какие поля нужно вставить*/

фамилия,имя,отчество,Дата_рождения,    должность,Имя_пользователя,Дата_добавления)

SELECT Табельный_номер,фамилия,имя,отчество,Дата_рождения,должность,

SYSTEM_USER,                                          /*функция определяет текущего пользователя*/

getdate()                                                         /*функция возвращает текущую дату*/

FROM inserted /* inserted – временная таблица, куда заносятся добавляемые данные*/

5. Триггер, который записывает при изменении записей в таблице «Студенты» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу UpdatedStudents, куда будет производится запись:

CREATE TABLE UpdatedStudents

(

   [читательский_номер] [int] NOT NULL, 

    [фамилия] [varchar] (25) NULL,

   [Имя_пользователя] [varchar] (50) NULL,

   [Дата_добавления] [datetime] NULL

) ON [PRIMARY]

Триггер выглядит следующем образом:

 

CREATE TRIGGER infoUpdateStudent

ON Студенты                      /*Связываем с таблицей*/

FOR UPDATE

AS

INSERT INTO UpdatedStudents (Читательский_номер, /*указываем, какие поля нужно вставить*/

фамилия,Имя_пользователя,Дата_добавления)

SELECT Читательский_номер,фамилия,             /*указываем откуда*/

SYSTEM_USER,                                /*функция определяет текущего пользователя*/

getdate()                                               /*функция возвращает текущую дату*/

FROM updated                 /*updated – временная таблица, куда заносятся данные*/

 

6. Триггер запрещает изменять в таблице «Пользование_библиотекой2» запись полей «дата_приема» и «дата выдачи» в воскресенье.

ALTER TRIGGER proverka ON Пользование_библиотекой2

FOR UPDATE

AS

IF UPDATE(дата_приема)                           /*Проверяет, какое поле обновляется*/

AND datename(dw,GETDATE()) in ('Sunday') /*Проверяет, является ли день воскресеньем*/

BEGIN

PRINT 'В воскресение нельзя принимать книги'

ROLLBACK TRANSACTION

END

IF UPDATE(дата_выдачи)                           /*Проверяет, какое поле обновляется*/

AND datename(dw,GETDATE()) in ('Sunday') /*Проверяет, является ли день воскресеньем*/

BEGIN

PRINT 'В воскресение нельзя принимать книги'

ROLLBACK TRANSACTION

END

 

/* datename (dw, GETDATE ()) – GETDATE ()получает текущую дату, datename (dw,<дата>) получает название дня недели*/

7. Триггер, который записывает при удалении записей из таблицы «Сотрудники_библиотеки» в отдельную таблицу информацию о дате удаления, пользователе,

Перед созданием такого триггера необходимо создать таблицу DeletedSotrudLibrary, куда будет производится запись:

CREATE TABLE DeletedSotrudLibrary (

       [Табельный_номер] [int] NOT NULL, /*объявляем поля таблицы*/

    [имя] [varchar] (25) NULL,

    [фамилия] [varchar] (25) NULL,

    [отчество] [varchar] (75) NULL,

    [дата_рождения] [datetime] NULL,

    [должность] [varchar] (35) NULL,

    [номер_отдела] [int] NOT NULL,

      [Имя_пользователя] [varchar] (50) NULL,

      [Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Триггер:

CREATE TRIGGER deletesotrud

ON Сотрудники_библиотеки    /* Связываем с таблицей */             

FOR DELETE

AS

INSERT INTO DeletedSotrudLibrary /* Указываем таблицу, куда будет производиться запись */ 

(Табельный_номер,имя,фамилия,отчество,дата_рождения, /*Пречисляем поля таблицы*/

должность,номер_отдела, Имя_пользователя,Дата_удаления)

SELECT                                                                 /*Причисляем вносимые значения*/

Табельный_номер, имя, фамилия, отчество, дата_рождения, должность, номер_отдела,

SYSTEM_USER,    getdate()                                          

FROM deleted /*deleted – временная таблица, куда заносятся удаляемые данные*/

 

8. Триггер, который записывает при добавлении записей в таблицы «Преподаватели» в отдельную таблицу информацию о дате удаления, пользователе.

Перед созданием такого триггера необходимо создать таблицу I nsertedItemPrepdavateli, куда будет производится запись

CREATE TABLE InsertedItemPrepdavateli

(

   [Читательский_номер] [int] NOT NULL, /*объявляем поля таблицы*/

    [имя] [varchar] (25) NULL,

    [отчество] [varchar] (75) NULL,

    [фамилия] [varchar] (25) NULL,

    [должность] [varchar] (35) NULL,

  [Имя_пользователя] [varchar] (50) NULL,

  [Дата_удаления] [datetime] NULL

) ON [PRIMARY]

Триггер:

CREATE TRIGGER infoInsertPred

ON Преподаватели

FOR INSERT

AS

INSERT INTO InsertedItemPrepdavateli

(Читательский_номер, имя, отчество, фамилия,должность, Имя_пользователя, Дата_удаления)

SELECT Читательский_номер, имя, отчество, фамилия, должность,

SYSTEM_USER, getdate()                                         

FROM inserted 

 

9. Триггер, запрещающий ввод значения в поле «год_поступления», если оно превышает номер текущего года.

CREATE TRIGGER proverka_Studentov ON Студенты FOR INSERT

AS

DECLARE @@t int                            /*Объявляем переменную*/

Set @@t=5                                 /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Студенты, inserted

WHERE Студенты.год_поступления = inserted.год_поступления)

Set @@t=0

IF EXISTS (SELECT * FROM Студенты, inserted

WHERE inserted.год_поступления>YEAR(GETDATE())) /*Проверяем, больше ли значения вводимого года, чем у текущего*/

Set @@t=0                   /*Если да, то меняем значение переменной */

If @@t=0                 /*если f=0, значит были ошибки*/

BEGIN

PRINT 'Неверно введен год поступления'            /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION            /*откат (отмена) транзакции*/

END

10. Триггер, запрещающий обновление значения в поле «год_отчисления», если оно превышает номер текущего года.

CREATE TRIGGER proverka_otchislenia_Studentov

ON Студенты

FOR UPDATE

AS

DECLARE @@t int                            /*Объявляем переменную*/

Set @@t=5                                 /*Присваиваем ей значение*/

IF NOT EXISTS (SELECT * FROM Студенты, inserted

WHERE Студенты.год_окончания = inserted.год_окончания)

Set @@t=0

IF EXISTS (SELECT * FROM Студенты, inserted

WHERE inserted.год_окончания>YEAR(GETDATE())) /*Проверяем, больше ли значения вводимого года, чем у текущего*/

Set @@t=0                   /*Меняем значение переменной*/

If @@t=0                 /*если f=0, значит были ошибки*/

BEGIN

PRINT 'Неверно введен год отчисления'              /*выдача сообщения о неудаче операции*/

ROLLBACK TRANSACTION            /*откат (отмена) транзакции*/

END

 

Вопросы:

1. Что такое триггер?

2. Чем хранимая процедура отличается от триггера?

3. С помощью какой команды можно создать триггер?

4. С помощью какой команды можно изменять триггер?

5. Какие стандартные виды триггеров существуют?

6. Опишите структуру триггера.

7. Для чего используется функция ROLLBACK TRANSACTION?

8. Как описываются переменные, используемые в триггером?

9. Как вызвать триггер?

10. Для чего предназначен триггер с оператором FOR INSERT?


Лабораторная работа №10

«Представления»

 

Цель: изучить представления и научиться самостоятельно создавать их.

 

Представление (View) для конечных пользователей выглядит как таблица, но при этом само не содержит данных, а лишь представляет данные, расположенные в таблице. Физически представление реализовано в виде SQL-запроса, на основе которого производится выборка данных из одной или нескольких таблиц или представлений.

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

При обращении к представлению сервер проверяет правильность всех ссылок в запросе. Проверяется, существуют ли объекты, требующиеся для выполнения запроса, определяющего представление. Если одна из таблиц, на которые ссылается запрос, была уничтожена, то представление будет нельзя использовать и при попытке обратиться к нему пользователи получат сообщение об ошибке.

Создание представлений с использованием Transact - SQL

CREATE VIEW view_name [(column [,...n])]

[WITH ENCRYPTION]

AS

select_statement

[WITH CHECK OPTION]

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

column — имя колонки, которое будет использоваться в представлении. Максимальная длина имени составляет 128 символов. По умолчанию имена колонок в представлении соответствуют именам колонок в исходных таблицах. Явное указание имени колонки требуется при использовании вычисляемых колонок или при объединении нескольких таблиц, имеющих колонки с одинаковыми именами. Имена колонок перечисляются через запятую в соответствии с их порядком в представлении. Имена колонок можно указывать в команде SELECT, определяющей представление.

WITH ENCRYPTION - использование этого параметра предписывает серверу шифровать код SQL-запроса. Это гарантирует, что пользователи не смогут просмотреть код запроса и использовать его. Если при определении представления необходимо скрыть имена исходных таблиц и колонок, а также алгоритм объединения данных, то необходимо использовать эту опцию.

select_statement — код запроса SELECT, выполняющий выборку, объединение и фильтрацию строк из исходных таблиц и представлений. Можно использовать команду SELECT любой сложности со следующими ограничениями:

1) Нельзя создавать новую таблицу на основе результатов, полученных в ходе выполнения запроса, то есть запрещается использование параметра INTO.2) Нельзя проводить выборку данных из временных таблиц, то есть нельзя использовать имена таблиц, начинающихся на # или ##.

В запрос нельзя включать операции вычисления и группировки, то есть запрещается указание параметров ORDER BY, COMPUTE и COMPUTE BY.

Для удаления представления используется команда Transact SQL DROP VIEW{view […n]}. За один раз можно удалить несколько представлений.

Примеры

1.Вывод ограниченной информации о студентах с фамилией, оканчивающейся на «ов».

CREATE VIEW infoStudent                          /*Указываем имя представления*/

AS

SELECT         /*Указываем, какие поля будут выведены*/

 Студенты.Имя, Студенты.Фамилия, Студенты.факультет, Студенты.специальность

FROM Студенты          /*Из какой таблицы*/

WHERE Студенты.Фамилия LIKE ‘[]ов’

2. Информация о замене экземпляров по программированию на С++.

CREATE VIEW infoZamena

AS

SELECT         /*Указываем, какие поля, из каких таблиц будут выведены*/

Книга.Автор, Книга.Название, Экземпляр.Шифр, Замена_экземпляров.Номер_акта_замены

FROM           /*Указываем таблицу, и связанные с ней при помощи оператора INNER JOIN таблицы, из которых выбираются связанные данные. После операнда ON указываем, по каким полям связаны две таблицы*/

(Книга INNER JOIN Экземпляр ON Книга.ISBN =Экземпляр.ISBN)

INNER JOIN Замена_экземпляров ON Экземпляр.Шифр = Замена_экземпляров.Шифр

WHERE Книга.Название LIKE '%C++'         /*Выбираются только                                                       те книги, в названии которых присутствует “ C ++” */

3. Информация о списанных экземплярах по программированию на Delphi.

CREATE VIEW infoCpicanie

AS

SELECT         /*Указываем, какие поля, из каких таблиц будут выведены*/

Книга.Автор, Книга.Название, Экземпляр.Шифр, Списанные_книги.причина_списания, Списанные_книги.номер_протокола_списания, Списанные_книги.Табельный_номер_списавшего

FROM                                                  /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN (Экземпляр INNER JOIN Списанные_книги ON Экземпляр.Шифр = Списанные_книги.Шифр) ON Книга.ISBN = Экземпляр.ISBN

WHERE Книга.Название LIKE '%Delphi'              /*Выбираются только                                                 те книги, в названии которых присутствует “ Delphi */

4. Информация о преподавателях и их заказах на литературу, количество книг должно быть от 10 до 20 или от 25 до 30.

CREATE VIEW infoZakazi        /*Объявляем имя представления*/

AS

SELECT                  /* Указываем, какие поля таблиц будут выведены*/

Преподаватели.Фамилия,Преподаватели.Имя, Преподаватели.Отчество, Книга.Автор, Книга.Название,Заказы.Количество

FROM                                                                                       /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN (Преподаватели INNER JOIN Заказы ON Преподаватели.Читательский_номер = Заказы.Читательский_номер)

ON Книга.ISBN = Заказы.ISBN

WHERE (Заказы.Количество BETWEEN 10 AND 20) OR (Заказы.Количество BETWEEN 25 AND 30)                     /* 10<количество заказов<20 или                                                                           25<количество заказов<30 */

5. Информация о книгах, которыми пользуется студент, и табельный номер сотрудника отдела обслуживания выдавшего книги. Номер отдела обслуживания 11.

CREATE VIEW infoOPolzovaniiStudentov

AS

SELECT                            /* Указываем, какие поля таблиц будут выведены*/

Студенты.Имя, Студенты.Фамилия, Книга.Автор, Книга.Название, Сотрудники_библиотеки.табельный_номер

FROM                               /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой2 ON Экземпляр.Шифр = Пользование_библиотекой2.Шифр) INNER JOIN

Студенты ON Пользование_библиотекой2.Читательский_номер = Студенты.Читательский_номер) INNER JOIN

Сотрудники_библиотеки ON Пользование_библиотекой2.Табельный_номер = Сотрудники_библиотеки.табельный_номер

WHERE Сотрудники_библиотеки.табельный_номер LIKE '10[]'   /*Табельный номер сотрудников должен начинаться с «11»*/

 

 

6. Информация о книгах, которыми пользуется преподаватель и табельный номер сотрудника отдела обслуживания выдавшего книги. Номер отдела обслуживания 11.

CREATE VIEW infoOPolzovaniiPrepodovatelej

AS

SELECT /* Указываем, какие поля таблиц будут выведены*/

Преподаватели.Имя, Преподаватели.Фамилия, Книга.Автор, Книга.Название,Сотрудники_библиотеки.табельный_номер

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

(((Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN) INNER JOIN

Пользование_библиотекой3 ON Экземпляр.Шифр = Пользование_библиотекой3.Шифр) INNER JOIN

Преподаватели ON Пользование_библиотекой3.Читательский_номер = Преподаватели.Читательский_номер) INNER JOIN

Сотрудники_библиотеки ON Пользование_библиотекой3.Табельный_номер = Сотрудники_библиотеки.табельный_номер

WHERE Сотрудники_библиотеки.табельный_номер LIKE '10[]'   /*Табельный номер сотрудников должен начинаться с «11»*/

 

7.Информация о отделах 11 и 12 и работающих в них сотрудниках.

CREATE VIEW Otdeli

AS

SELECT /*Указываем какие поля будут выбраны*/

Отделы.номер_отдела, Отделы.название_отдела, Сотрудники_библиотеки.фамилия,

Сотрудники_библиотеки.имя,Сотрудники_библиотеки.отчество

FROM /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Сотрудники_библиотеки ON Отделы.Номер_отдела = Сотрудники_библиотеки.Номер_отдела

GROUP BY номер.отдела         /*По какому полю будут сгруппированы поля*/

WHERE Отделы.номер_отдела BETWEEN 10 AND 13   /*Выбираются отделы, номер которых находится между 10 и 13*/

 

8.Информация о месте хранения периодических изданий название которых содержит в себе слово «вестник», но при этом д.б. исключены периодические издания, первое слово которых начинается на «Э», например «Экономический вестник».

CREATE VIEW INFOPeriodika

AS

SELECT         /*Указываем какие поля будут выбраны*/

Периодические_издания.Название, Периодические_издания.Дата_издания, Отделы.Название_отдела, Отделы.Номер_отдела

FROM            /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Отделы INNER JOIN Периодические_издания ON Отделы.Номер_отдела = Периодические_издания.Номер_отдела

WHERE Периодические_издания.Название LIKE '[^Э] %вестник%'

/*[^Э] запрещает начинаться первому слову на «Э», % вестник% – указывает на то, что оставшаяся часть названия должна содержать слово «вестник»*/

 

9. Полная информация об экземпляре, который был издан с 2000 до текущего года

CREATE VIEW FullInfoEkzemplar

AS

SELECT         /*Указываем какие поля будут выбраны*/

Экземпляр.шифр,Книга.Автор,Книга.Название,Книга.Год_издания,Книга.Издательство,Экземпляр.Предметная_область, Экземпляр.Номер_отдела, Экземпляр.Отметка_о_списании, Экземпляр.Отметка_о_замене

FROM            /*Указываем таблицу, и связанные с ней таблицы, из которых выбираются связанные данные.*/

Книга INNER JOIN Экземпляр ON Книга.ISBN = Экземпляр.ISBN

WHERE Книга.Год_издания BETWEEN 2000 AND YEAR (GETDATE())

/* GETDATE () возвращает текущую дату, YEAR (<дата>) – год <даты>*/

 

10. Информация о наличии книги в библиотеке

CREATE VIEW InfoAboutBook

AS

SELECT                 /*Указываем какие поля будут выбраны*/

Книга.ISBN, Экземпляр.Шифр, Экземпляр.Номер_отдела,

Пользование_библиотекой2.Дата_выдачи,Пользование_библиотекой2.Дата_приема

FROM            /*Указываем таблицу, и связанные с ней



<== предыдущая лекция | следующая лекция ==>
Опишите процесс добавления внешних сущностей на диаграмму. | Оформление выпускной квалификационной работы
Поделиться с друзьями:


Дата добавления: 2018-11-12; Мы поможем в написании ваших работ!; просмотров: 214 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Лучшая месть – огромный успех. © Фрэнк Синатра
==> читать все изречения...

771 - | 736 -


© 2015-2024 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.