- •Кафедра экономической информатики
- •Базы данных
- •Содержание
- •Введение
- •Лабораторная работа №1. Логические и физические модели данных
- •Методические указания
- •Задание к работе
- •Раздел I. Создание сущностей в eRwin
- •Раздел II. Создание связей между сущностями, подмножеств модели и хранимых отображений. Переход к физической модели данных
- •Раздел III. Выполнение операции прямого проектирования
- •Раздел IV. Выполнение операции обратного проектирования
- •Лабораторная работа №2. Усложненные диаграммы «сущность-связь»
- •Методические указания
- •Задание к работе
- •Раздел I. Создание сущностей логической модели
- •Раздел II. Создание связей между сущностями и иерархии наследования
- •Раздел III. Выполнение вариантов трансформы категориальной связи
- •Раздел IV. Выполнение методов синхронизации системного каталога базы данных и текущей модели
- •Лабораторная работа №3. Работа в среде субд «ms sql Server 2005»
- •Методические указания
- •Задание к работе
- •Раздел I. Создание базы данных и ее объектов
- •Раздел II. Управление пользователями и правами доступа к данным
- •Лабораторная работа №4. Создание базы данных и ее объектов с помощью команд языка Transact-sql
- •Методические указания и задания к выполнению
- •Раздел I. Создание базы данных и ее объектов
- •Раздел II. Ввод данных в таблицы базы данных
- •Insert into Заказ (КодКлиента, КодТовара, Количество)
- •Inner join Поставщик
- •Inner join Товар
- •Раздел III. Управление пользователями и правами доступа к данным.
- •Раздел IV. Анализ полученных результатов
- •Лабораторная работа №5. Манипулирование данными с помощью команд языка Transact-sql
- •Методические указания
- •Раздел I. Выборка данных из таблиц и представлений.
- •Раздел II. Обновление данных в таблицах и представлениях.
- •Раздел III. Удаление данных из таблиц и представлений.
- •Раздел IV. Изменение структуры таблицы.
- •Раздел V. Удаление таблицы из базы данных.
- •Задание к работе
- •Лабораторная работа №6. Программирование на языке Transact-sql
- •Методические указания
- •Раздел I. Основы программирования на языке Transact-sql.
- •Раздел II. Создание и работа с хранимыми (на сервере) процедурами.
- •If @Страна is not null
- •If @Город is not null
- •If @Город is not null
- •Insert into Валюта
- •Values(@Код, @Имя, @Шаг, @Курс)
- •If @Страна is not null
- •If @Город is not null
- •Into ##Регион
- •Раздел III. Создание и работа с определяемыми пользователем функциями.
- •Insert @rowset (КодРегиона, Страна, Область, Город)
- •Задание к работе
- •Лабораторная работа №7. Курсоры и триггеры в языке Transact-sql
- •Методические указания
- •Раздел I. Использование курсоров в языке Transact-sql
- •If @НачалоИнтервала is null
- •If @КонецИнтервала is null
- •Раздел II. Создание триггеров в языке Transact-sql.
- •If update(ДатаЗаказа)
- •If update(Цена)
- •If update(Цена)
- •Inserted.Цена * Валюта.КурсВалюты
- •Задание к работе
- •Литература Основная
- •Базы данных
- •220013, Минск, п. Бровки, 6.
Раздел V. Удаление таблицы из базы данных.
Синтаксис команды удаления таблицы (см. [1], стр. 970):
DROP TABLE table_name
Однако, прежде чем удалить таблицу из базы данных, необходимо разорвать все связи этой таблицы с ее дочерними таблицами, если такие имеются. В противном случае удалить таблицу будет невозможно.
Например, требуется удалить таблицу Товар. Сначала необходимо провести анализ, есть ли таблицы, для которых таблица Товар является родительской. Для этого можно, например, использовать системную хранимую процедуру sp_fkeys, позволяющую получить информации о связях между таблицами посредством первичных и внешних ключей, которая имеет следующий синтаксис (см. [1], стр. 979):
sp_fkeys [ @pktable_name = ] 'pktable_name'
[ , [ @pktable_owner = ] 'pktable_owner' ]
[ , [ @pktable_qualifier = ] 'pktable_qualifier' ]
{ , [ @fktable_name = ] 'fktable_name' }
[ , [ @fktable_owner = ] 'fktable_owner' ]
[ , [ @fktable_qualifier = ] 'fktable_qualifier' ]
/* Информация о связях родительской таблицы Товар с ее дочерними таблицами */
EXEC sp_fkeys 'Товар'
GO
Теперь ясно, что у таблицы Товар имеется одна дочерняя таблица – таблица Заказ. Та же информация подтверждается, если проанализировать с помощью процедуры sp_fkeys, какие родительские таблицы имеются у таблицы Заказ:
/* Информация о связях дочерней таблицы Заказ с ее родительскими таблицами */
EXEC sp_fkeys @fktable_name = 'Заказ'
GO
После этого становится ясно, что для удаления из базы данных таблицы Товар, нужно выполнить следующие две команды:
/* Удаление из базы данных таблицы Товар */
ALTER TABLE Заказ DROP CONSTRAINT FK_Заказ_Товар -- первая команда
DROP TABLE Товар -- вторая команда
GO
Примечание. Сначала была разорвана связь между таблицами Товар и Заказ путем удаления в последней ограничения внешнего ключа FK_Заказ_Товар. Только после этого была удалена таблица Товар.
Задание к работе
Предварительно выполните следующие действия.
Закройте (без сохранения данных) текущее окно Query и удалите базу данных Склад_ХХХ.
Загрузите сценарий из файла D:\Work\X7230ХХХ\script.sql и создайте базу данных Склад_ХХХ заново.
Обновите данные на панели Object Explorer и сделайте базу данных Склад_ХХХ видимой.
Закройте окно со сценарием script.sql и откройте новое пустое окно Query, предназначенное для формирования сценария выполнения задания к лабораторной работе.
Выборка данных из таблиц и представлений
1. Из таблицы Клиент выберите все строки, для которых значение поля ФИОРуководителя содержит подстроку «гор» и значение поля КодРегиона не принадлежит диапазону от 101 до 200 или неизвестно.
2. Из таблицы Поставщик выберите все строки, для которых значение поля УсловияОплаты не равно «Предоплата» или значение поля КодРегиона не попадает в интервал значений от 101 до 200 и не попадает в интервал значений от 301 до 400.
3. Из таблицы Регион выберите все строки, относящиеся к России (но не связанные с городом «Москва») или к Беларуси (но не связанные с городами «Минск» и «Гомель»).
4. Из таблицы Товар выберите все строки, связанные с валютой «Доллары США», для которых значение цены лежит в диапазоне от 200 до 800, а также все строки, связанные с валютой «Евро», для которых значение цены лежит в диапазоне от 100 до 500 или неопределено.
5. В таблице Заказ найдите все те строки, для которых значение поля Количество не определено или не попадает в интервал значений от 2 до 20. Однако на экран наряду с полями КодКлиента, КодТовара и КодПоставщика выведите также поля ИмяКлиента, Наименование и ИмяПоставщика, которые снабдят малоинформативные коды содержательными наименованиями.
6. В таблице Заказ найдите все строки, относящиеся к поставщикам из России или Украины, а из них, в свою очередь, выберите те строки, для которых с момента заказа прошло более 45 дней. Кроме того, в полученном наборе строк дополните столбцы КодТовара и КодКлиента столбцами Наименование и ИмяКлиента, расшифровывающими коды товаров и клиентов соответственно. Результирующий набор строк отсортируйте по полю ДатаЗаказа в порядке убывания, далее (для совпадающих значений), – по полю ИмяКлиента и, далее (если и здесь будут совпадения), - по полю Количество в порядке убывания.
7. Из представления Запрос1 выберите все те строки, для которых одновременно выполняются 2 следующих условия:
- значение поля Наименование содержит в себе подстроку «тер» или «тор» или же заканчивается буквой «а»;
- значение поля Количество попадает в диапазон значений от 5 до 10 или значение поля ЕдиницаИзм равно «штука» или «литр».
Обновление данных в таблицах
1. В таблице Клиент замените имя клиента «ГП ”Верас”» на «ГП ”Верас‑М”», а фамилию ее руководителя сделайте неопределенной.
2. В таблице Поставщик в поле УсловияОплаты установите значение «По договору поставки» для всех поставщиков, названия которых заканчиваются буквой «н», «т», «л» и не начинаются префиксом «ЗАО» или «ОАО».
3. В таблице Товар во всех записях, где цена от 100000 до 1000000 белорусских рублей, замените код валюты на «RUR», а цену уменьшите в 285 раз, а во всех записях, где цена больше 1000000 белорусских рублей, замените код валюты на «USD», а цену уменьшите в 9100 раз.
4. В таблице Заказ обновите поле СрокПоставки следующим образом: если дата заказа раньше 15 октября текущего года, то срок поставки будет равен дате заказа, увеличенной на 14 дней, однако, после 15 октября срок поставки должен быть больше даты заказа на 10 дней. Если же значение поля КодПоставщика не определено, то срок поставки должен быть равен дате заказа, увеличенной на 20 дней.
Удаление данных из таблиц
1. Добавьте приведенные ниже данные в соответствующие таблицы базы данных с помощью команды INSERT.
Таблица Валюта
КодВалюты |
ИмяВалюты |
ШагОкругления |
КурсВалюты |
GRV |
Украинские гривны |
0.01 |
250 |
Таблица Товар
КодТовара |
Наименование |
ЕдиницаИзм |
Цена |
КодВалюты |
Расфасован |
666 777 888 |
ПК-клавиатура Разъем USB Принтер Lexmark |
штука штука штука |
2630 135 12790 |
GRV GRV GRV |
Да Да Да |
Таблица Заказ
КодКлиента |
КодТовара |
Количество |
ДатаЗаказа |
СрокПоставки |
КодПоставщика |
4 5 3 5 |
666 777 888 666 |
17 5 14 9 |
по умолчанию по умолчанию по умолчанию по умолчанию |
по умолчанию по умолчанию по умолчанию по умолчанию |
345 234 456 345 |
Теперь удалите из таблицы Валюта строку с кодом валюты GRV (Украинские гривны).
Примечание. Предварительно проанализируйте свойства связей между указанными выше таблицами, в частности, разрешено или запрещено каскадное (CASCADE) удаление данных в таблицах Товар и Заказ. Свойства связей между таблицами задаются в команде CREATE TABLE или в команде ALTER TABLE.
Изменение структуры таблиц
1. Внесите такие изменения в таблицу Товар, чтобы для выполнения предыдущего задания, связанного с удалением строки из таблицы Валюта, достаточно было использовать только одну команду удаления данных из таблицы Валюта.
2. Внесите изменения в нужные таблицы так, чтобы для выполнения задания, связанного с удалением строки из таблицы Валюта, требовалось бы обязательное удаление данные из всех трех таблиц (Заказ, Товар, Валюта).
Удаления таблиц из базы данных
1. Удалите из базы данных таблицу Регион.
2. Удалите из базы данных таблицу Поставщик.
3. Используя литературные источники, изучите самостоятельно команду удаления представления (VIEW) из базы данных и удалите существующее представление Запрос1.
Сохраните текущий сценарий в файле D:\Work\X7230ХХХ\script2.sql. Затем удалите базу данных Склад_ХХХ. Для этого в ее контекстном меню выберите команду Delete и затем в появившемся окне Delete Object установите флажок Close Existing Connections.