
- •Оглавление
- •Раздел 4. Проектирование реляционных баз данных. 113
- •Раздел 5. Определение структур данных и обслуживание баз данных. 114
- •Введение
- •Раздел 1. Основы теории баз данных Тема 1: Базы данных и информационные системы. Основные понятия.
- •Понятия базы данных и информационные системы.
- •Архитектура информационной системы.
- •Понятия базы данных и информационные системы.
- •Архитектура информационной системы.
- •Тема 2: Банки данных. Системы управления базами данных.
- •Банки данных. Основные компоненты системы.
- •Классификация субд.
- •Банки данных. Основные компоненты системы.
- •Классификация субд.
- •Раздел 2. Реляционная алгебра Тема1: Реляционная алгебра. Классические операции теории множеств.
- •Тема 2: Специальные операции теории множеств.
- •Раздел 3. Модели данных. Тема 1: Классические модели данных.
- •Сетевая модель представления данных.
- •Реляционная модель представления данных.
- •Элементы реляционной модели
- •Тема 2: Связывание таблиц. Целостность связей.
- •Основные виды связи таблиц.
- •Контроль целостности связей.
- •Характеристика видов связей
- •Раздел 4. Проектирование реляционных баз данных. Тема 1: Основные принципы проектирования баз данных.
- •2. Избыточное дублирование данных и аномалии
- •3. Формирование исходного отношения.
- •Тема 2: Метод нормальных форм
- •2. Выявление зависимостей между атрибутами
- •3. Нормальные формы
- •Тема 3: Метод сущность-связь. Этапы проектирования.
- •2.Этапы проектирования
- •3.Пример проектирования бд учебной части.
- •Тема 4: Правила формирования отношений.
- •2. Формирование отношений для связи 1:м
- •3. Формирование отношений для связи м:м
- •Раздел 5. Определение структур данных и обслуживание баз данных. Тема 1: Среда sql*Plus.
- •Функции.
- •2. Основные типы данных
- •3. Арифметические выражения
- •4. Операторы сравнения
- •5. Обработка неопределенных значений
- •6. Функции
- •7. Форматные модели
- •Тема 2: Структуры данных. Создание таблиц.
- •Создание таблиц.
- •3. Создание таблиц
- •Тема 3: Изменение таблиц и ограничений
- •Добавление и изменение столбца.
- •Изменение ограничений.
- •Удаление таблицы. Изменение имени таблицы и добавление комментариев.
- •Тема 4: Операции с ограничениями.
- •Тема 5: Манипулирование данными.
- •1. Вставка новых строк в таблицу
- •2. Копирование строк из другой таблицы
- •3. Обновление строк в таблице
- •4. Удаление строк из таблицы
- •Тема 6: Команда запроса данных. Простой запрос.
- •Тема 7: Сложные запросы.
- •Использование функций для работы с датами при организации запроса.
- •Тема 8: Группировка строк в запросе
- •2. Группы внутри групп.
- •3. Предложение having.
- •Тема 9: Подзапросы.
- •Подзапрос. Его назначение и синтаксис.
- •Однострочные и многострочные подзапросы.
- •Подзапрос. Его назначение и синтаксис.
- •2.Однострочные и многострочные подзапросы.
- •Тема 10: Выборка данных из нескольких таблиц.
- •2. Псевдонимы таблиц.
- •3. Дополнительные условия поиска.
- •4. Внешние соединения.
- •Select таблица.Столбец, таблица.Столбец
- •Тема 11: Создание, изменение и удаление последовательностей.
- •Создание последовательности.
- •2. Изменение и удаление последовательности.
- •3. Генерация значений последовательности.
- •Тема 12: Создание, изменение и удаление представлений.
- •Представления. Создание представлений.
- •Изменение и удаление представлений.
- •Представления. Создание представлений.
- •Изменение и удаление представлений.
- •Тема 13: «Индексы»
- •Понятие индекса. Необходимость использования.
- •Создание и удаление индексов.
- •1. Понятие индекса. Необходимость использования.
- •2. Создание и удаление индексов.
- •Тема 14: «Создание отчетов»
- •2. Форматирование number колонок.
- •3. Оформление Отчета пробелами и итоговыми строками.
- •4. Вычисление итоговых строк при изменении значения колонки.
- •5. Определение заголовков.
- •6. Установка размеров страницы
- •7. Сохранение и Печать Результатов Запроса
- •Тема 15: Управление транзакциями
- •Практикум Раздел 3. Реляционная алгебра.
- •Раздел 4. Проектирование реляционных баз данных.
- •Раздел 5. Определение структур данных и обслуживание баз данных.
- •Библиографический список
Раздел 4. Проектирование реляционных баз данных.
Практическая работа по теме: Метод нормальных форм.
Дано исходное отношение R, которое находится в 1 НФ. Проанализируйте значения атрибутов и выполните процедуру проектирования базы данных, преобразовав исходное отношение R.
ФИО |
Зарплата |
Фирма |
Руководитель |
Отдел |
Товар |
Поставщик |
Стоимость |
Киселев В.М. |
18000 |
Надежда |
Белкин Б.Н. |
Хозтовары |
Посуда |
Cremco |
1000 |
Гурский С.И. |
16000 |
Надежда |
Белкин Б.Н. |
Канцтовары |
Карандаш |
Pencraft |
3 |
Андреева Е.А. |
20000 |
Надежда |
Белкин Б.Н. |
Косметика |
Духи |
Beautex |
1400 |
Левин П.Г. |
22000 |
Мечта |
Томилов А.Н. |
Игрушки |
Машина |
Signal |
250 |
Носов А.П. |
16000 |
Мечта |
Томилов А.Н. |
Игрушки |
Самолет |
Signal |
220 |
Гофман В.Э. |
26000 |
Мечта |
Томилов А.Н. |
Игрушки |
Кукла |
Signal |
370 |
Сорокина Т.В. |
17000 |
Дива |
Александрова Е.Н. |
Косметика |
Помада |
Beautex |
250 |
Белкин Б.Н. |
18000 |
Дива |
Александрова Е.Н. |
Косметика |
Духи |
Beautex |
1200 |
Семин С.В. |
22000 |
Феникс |
Комаров А.П. |
Хозтовары |
Скатерть |
Cremco |
200 |
Григорьев А.Н. |
19000 |
Феникс |
Комаров А.П. |
Игрушки |
Конструктор |
Signal |
200 |
Практическая работа по теме: Проектирование базы данных.
Разработать информационную систему обслуживания библиотеки, которая содержит следующую информацию: названия книг, ФИО авторов, наименования издательств, год издания, количество страниц, количество иллюстраций, стоимость, название филиала библиотеки или книгохранилища, в которых находится книга, количество имеющихся в библиотеке экземпляров конкретной книги, количество студентов, которым выдавалась конкретная книга, названия факультетов, в учебном процессе которых используется указанная книга.
Раздел 5. Определение структур данных и обслуживание баз данных.
Практическая работа по теме: Структуры данных. Создание таблиц
На основе Бланка экземпляра создайте таблицу Lichn_sved:
Имя столбца |
kod |
fam |
name |
data_rd |
Sem_polozh |
Phone |
Тип ключа |
|
|
|
|
|
|
NN/UN |
NN |
NN |
NN |
NN |
NN |
NN |
Таблица FK |
|
|
|
|
|
|
Столбец FK |
|
|
|
FK |
FK |
|
Тип данных и длина |
integer |
varchar2(10) |
varchar2(10) |
date |
varchar2(8) |
char(8) |
Пример данных |
100 101 102 103 104 105 106 |
Иволгин Николаев Сидоров Егоров Васюков Смолина Рейкина |
Иван Петр Николай Василий Василий Валентина Дарья |
02-06-72 10-10-82 09-09-75 10-01-77 26-11-76 25-10-85 30-12-79 |
Женат Женат Холост Женат Женат Замужем Замужем |
12-12-14 12-44-33 24-66-77 55-23-01 56-33-02 70-25-08 05-45-11 |
2. На основе Бланка экземпляра создайте таблицу Podrazhdelen:
Имя столбца |
kod |
fam |
name |
otdel |
Data_prik |
dolzhn |
oklad |
Тип ключа |
|
|
|
|
|
|
|
NN/UN |
NN |
NN |
NN |
NN |
NN |
|
|
Таблица FK |
|
|
|
|
|
|
|
Столбец FK |
|
|
|
|
|
|
|
Тип данных и длина |
integer |
varchar2(10) |
varchar2(10) |
varchar2(6) |
date |
varchar2(15) |
varchar2(10) |
Пример данных |
100 101 102 103 104 105 106 |
Иволгин Николаев Сиоров Егоров Васюков Смолина Рейкина |
Иван Петр Николай Василий Василий Валентина Дарья |
20 10 20 10 30 40 20 |
10-02-2000 10-02-2000 10-02-2000 15-04-2003 20-10-2001 10-03-2003 10-03-2003 |
Менеджер Администратор Менеджер Администратор Бухгалтер Секретарь Менеджер |
5000 5500 5000 3000 4500 2700 5000 |
3. На основе Бланка экземпляра создайте таблицу Bebi:
Имя столбца |
kod |
name |
Data_rozhden |
Тип ключа |
|
|
|
NN/UN |
|
|
|
Таблица FK |
|
|
|
Столбец FK |
|
|
|
Тип данных и длина |
integer |
varchar2(10) |
date |
Пример данных |
104 104 105 103 103 101 106 |
Вика Ваня Петя Оля Настя Витя Наташа |
12-12-95 05-02-97 10-03-96 01-04-99 06-09-01 16-11-02 15-02-03 |
Практическая работа по теме: Операции с ограничениями.
Заполните Бланки Экземпляров недостающей информацией.
Создайте таблицы на основе заполненных вами Бланков экземпляров, не указывая ограничения.
В созданные таблицы добавьте пропущенные ограничения.
На основе Бланка экземпляра создайте таблицу Dolzhn:
Имя столбца |
kod |
fam |
name |
dolzhn |
stazh |
kaf |
Тип ключа |
|
|
|
|
|
|
NN/UN |
|
|
|
|
|
|
Таблица FK |
|
|
|
|
|
|
Столбец FK |
|
|
|
|
|
|
Тип данных и длина |
integer |
varchar2(10) |
varchar2(10) |
varchar2(10) |
number(2) |
number(2) |
Пример данных |
10 20 30 40 |
Иванов Петров Сидоров Егоров |
Иван Петр Николай Василий |
Преп Ст.Преп Преп преп |
5 7 10 5 |
25 25 25 24 |
На основе Бланка экземпляра создайте таблицу Prep:
Имя столбца |
kod |
fam |
name |
predmet |
grup |
vid_zan |
Тип ключа |
|
|
|
|
|
|
NN/UN |
|
|
|
|
|
|
Таблица FK |
|
|
|
|
|
|
Столбец FK |
|
|
|
|
|
|
Тип данных и длина |
integer |
varchar2(10) |
varchar2(10) |
varchar2(10) |
number(3) |
varchar2(8) |
Пример данных |
10 10 20 20 30 30 40 |
Иванов Иванов Петров Петров Сидоров Сидоров Егоров |
Иван Иван Петр Петр Николай Николай Василий |
СУБД ПЛ/1 СУБД Паскаль ПЛ/1 Паскаль ПЭВМ |
256 123 256 256 123 256 244 |
Практика Практика Лекция Практика Лекция Лекция Лекция |
На основе Бланка экземпляра создайте таблицу Oklad:
Имя столбца |
dolzhn |
oklad |
Тип ключа |
|
|
NN/UN |
|
|
Таблица FK |
|
|
Столбец FK |
|
|
Тип данных и длина |
varchar2(10) |
number(3) |
Пример данных |
Преп Ст.Преп |
500 800 |
На основе Бланка экземпляра создайте таблицу Stazh:
Имя столбца |
Stazh |
Dopl_stazh |
Тип ключа |
|
|
NN/UN |
|
|
Таблица FK |
|
|
Столбец FK |
|
|
Тип данных и длина |
number(2) |
number(3) |
Пример данных |
5 7 10 |
100 100 150 |
Практическая работа по теме: «Создание и редактирование таблицы в среде SQL. Манипулирование данными»
Запустить среду SQL plus
Создать таблицу Acont с атрибутами:
Num Last_name First_name Patronymic_name Middle_name Phone_number Country City Zarplat
Тип данных и размер поля определите самостоятельно.
Просмотрите структуру таблицы Acont.
Добавьте в созданную таблицу пять записей произвольными значениями.
Просмотрите таблицу с данными.
Добавьте в таблицу Acont новый столбец Adress.
Обновите строки таблицы, заполнив значения нового атрибута Adress.
Просмотрите обновленную таблицу Acont.
Добавьте в таблицу новый столбец Date_ birth.
Обновите существующие записи таблицы произвольными значениями даты.
Обновите таблицу, указав значение атрибута Zarplat, повысив зарплату всем до 10000 рублей.
Просмотрите таблицу Acont.
Добавьте в таблицу еще пять строк, заполнив все атрибуты собственными значениями.
Практическая работа по теме: Простой запрос.
Выведите содержимое всех столбцов и строк таблиц Lichn_sved, Podrazhdelen и Bebi.
Выполните с таблицей Podrazhdelen следующие действия:
Выведите фамилию и имя всех служащих.
Получите список всех сотрудников с новым столбцом «Зарплата», в котором рассчитана заработная плата по формуле: oklad*1.2+oklad.
Вычислите налог 13% с заработной платы в столбце Налог.
Выведите сведения по столбцам Data_prik, Dolzhn, Oklad; должность должна быть в строке первой.
Предотвратите выборку дубликатов строк из результата предыдущего запроса.
Отсортируйте данные по столбцу Oklad в порядке возрастания.
Отсортируйте данные таким образом, чтобы наибольший оклад в списке был первым.
Выведите фамилию, дату приказа, должность и оклад для всех служащих. Результат отсортируйте по должности, а внутри должности – в порядке убывания фамилий сотрудников.
Выведите фамилию, дату приказа, должность и оклад для менеджеров.
Выведите фамилию, дату приказа, должность и оклад для менеджеров в порядке убывания по фамилии сотрудника.
Выполните с таблицей Lichn_sved следующие действия:
Получите список всех женатых сотрудников;
Выведите имена, фамилии служащих, родившихся в 70-х годах;
Выведите сведения о сотрудниках, родившихся в 1972 году, с помощью метасимволов;
Получите сведения о служащих с кодами 100 и 102;
Выведите фамилии, начинающиеся на букву Е.
Практическая работа по теме: Сложные запросы.
1. Из таблицы Lichn_sved выведите следующую информацию:
Выберите всех женатых сотрудников, которые родились в 80-х годах.
Выберите тех сотрудников, у которых телефон начинается на цифру 1 или цифру 2.
Получите список всех холостяков, которые родились в сентябре.
Выведите фамилии всех сотрудников заглавными буквами.
2. Из таблицы Podrazhdelen выведите следующую информацию:
Выведите информацию о менеджерах и администраторах, у которых оклад равен 5000 рублей и более.
Выведите информацию об инспекторах с окладом более 4300 рублей и администраторах с окладом 5000 рублей.
Получите список всех фамилий сотрудников, три последних символа которых равны «ров», и длины этих фамилий.
Выведите количество рабочих месяцев каждого сотрудника в подразделении.
Из таблицы Bebi выведите следующую информацию:
Выведите возраст (в месяцах) каждого ребенка в отдельном столбце «Возраст».
Выведите даты рождения детей в новом столбце, где месяц отображается словом.
Выведите список детей, которые родились с 1995 по 1999 годы.
Получите список детей, которые родились весной.
Практическая работа по теме: Группировка строк в запросе.
Из таблицы Podrazhdelen выведите следующую информацию:
Выведите код и количество сотрудников, имеющих код 103.
Выведите информацию по должности и окладу обо всех сотрудниках, кроме администратора и соответствующим суммарным окладом за месяц. Отсортируйте результаты запроса по окладу, начиная с наибольшего.
Выведите количество сотрудников по должностям внутри отделов.
Получите номера отделов и среднего оклада для отделов, где средний оклад превышает 4500 рублей.
Выведите должности и общий оклад для всех должностей с окладом более 3000 в месяц, кроме Инспектора ОК. Выходные строки отсортируйте по окладу, начиная с наибольшего.
Составьте запрос для вывода минимального и максимального оклада по всем должностям в алфавитном порядке.
Какова разница между самой высокой и самой низкой заработной платой?
Из таблицы Bebi выведите следующую информацию:
Выведите количество детей у Петрова Петра в отдельном столбце «Дети».
Подсчитайте количество детей у каждого сотрудника.
Получите список старших детей у всех сотрудников.
Практическая работа по теме: Подзапросы.
Из таблицы Podrazhdelen выбрать следующие данные:
Фамилии и должность сотрудников, имеющих такую же должность, как у Сидорова.
Фамилии, имена сотрудников, работающих в том же отделе, где работает сотрудник по фамилии Шторкина.
Фамилии, должности и окладов всех сотрудников с окладом ниже средней.
Фамилии, должности и зарплаты всех сотрудников с зарплатой выше средней.
Список служащих, работающих в отделе 20 или принятых 10 февраля 2002 года (используя многострочный запрос).
Все отделы, где средний оклад выше, чем в отделе 15.
Должность сотрудника, чей средний оклад больше среднего по всем сотрудникам.
Код, имя и фамилию каждого сотрудника, у которого оклад выше среднего и работает в одном отделе с любым сотрудником, фамилия которого содержит букву «р».
Практическая работа по теме «Выборка данных из нескольких таблиц »
Из таблиц Lichn_sved и Bebi выведите следующую информацию:
Имена детей всех сотрудников.
Количество детей у каждого сотрудника.
Из таблиц Lichn_sved и Podrazhdelen выведите следующую информацию:
Выведите информацию о менеджерах и администраторах, родившихся в 70-х годах.
Выведите дату рождения инспекторов с окладом более 4300 рублей и администраторов с окладом 5000 рублей.
Выведите оклад всех женатых сотрудников.
Практическая работа по теме: Создание, изменение и удаление последовательностей.
Задание 1.
Создайте таблицу Gruppa со следующими атрибутами: id, fam, name, data_rd, adress.
Создайте последовательность, которая будет генерировать числа для получения кодов студентов.
Интервал между последовательными номерами равен 5; начальное значение – 1; максимальное значение – 20; циклическая организация не используется.
Заполните таблицу 4 записями.
Просмотрите содержимое таблицы.
Добавьте еще одну запись.
Что произошло? Почему?
Измените последовательность: шаг приращения равен 10; минимальное значение – 30; максимальное значение – 50; режим циклической генерации используется.
Добавьте 4 записи в таблицу.
Просмотрите содержимое таблицы и проанализируйте, каким образом происходит генерация чисел.
Выведите текущее число в последовательности.
Удалите последовательность.
Создайте новую последовательность, самостоятельно выбрав параметры.
Добавьте в таблицу еще 3 записи.
Задание 2:
Какие из следующих команд не приведет к созданию последовательности? Объясните почему.
CREATE SEQUENCE new_seq1 NOMAXVALUE;
CREATE SEQUENCE 2new_seq START WITH 2;
CREATE SEQUENCE new3_seq MIN 1 MAX 100 CYCLE;
CREATE SEQUENCE new_4seq1 INCREMENT BY -1;
Дополнительное задание:
Выведите список всех последовательностей:
Select sequence_name
from user_sequences;
Проверьте параметры последовательности. Это можно сделать в таблице User_SEQUENCES словаря данных.
Практическая работа по теме: Создание, изменение и удаление представлений.
На основе таблицы Podrazhdelen создайте представление Р_1, включающее код служащего, фамилию и номер отдела. Присвойте столбцу с фамилией заголовок «Фамилия».
Выведите на экран содержимое представления Р_1.
В представлении Р_1 для служащего с фамилией "Сидоров" смените номер отдела на 22.
Проверьте, что "Сидоров" теперь приписан к отделу 22.
На основе таблиц Podrazhdelen и Lichn_Sved создайте представление P_LS для вывода данных обо всех служащих отдела 20. Выходные данные должны включать код служащего, фамилию, имя, дату рождения, должность и номер отдела.
Выведете структуру представления P_LS.
Выведете содержимое представления P_LS.
Выведите на экран название каждого отдела и количество служащих в нем.
Добавьте в представление Р_1 данные еще об одном сотруднике: код - генерируемый из последовательности, фамилия - Ветров, Имя - Леонид, должность - Бухгалтер.
Выведете содержимое представления Р_1. Опишите результат.
Выведете содержимое таблицы Podrazhdelen. Опишите результат.
На основе таблицы Podrazhdelen создайте представление Р_2, включающее код служащего, фамилию, должность и оклад. Добавьте предложение WITH READ ONLY.
Добавьте в представление Р_2 данные еще об одном сотруднике: код - генерируемый из последовательности, фамилия - Селезнев, Имя - Андрей, должность - Менеджер. Опишите результат.
Измените представление Р_1 так, чтобы оно содержало данные только о служащих отдела 22. Добавьте ограничение, запрещающее изменять номер отдела.
Выведите содержимое представления Р_1.
В представлении Р_1 верните служащему с фамилией «Сидоров» номер отдела 20. Объясните результат.
Практическая работа по теме: Индексы.
Создайте для таблицы Podrazhdelen индексы (имя индекса и поле определите самостоятельно):
Уникальный
Неуникальный по столбцу внешнего ключа
Создайте для таблицы Lichn_sved уникальный индекс (имя индекса и поле определите самостоятельно)
Выведите из словаря данных индексы и информацию об уникальности для таблиц Podrazhdelen и Lichn_sved.
Удалите ограничение PRIMARY KEY из главной таблицы вашей базы данных.
Еще раз выведите из словаря данных индексы и информацию об уникальности для таблиц Podrazhdelen и Lichn_sved. Что изменилось и почему?
Вновь создайте ограничение PRIMARY KEY для главной таблицы. Убедитесь в том, что ограничение присутствует в словаре данных. Убедитесь в наличии уникального индекса по словарю данных.
Удалите неуникальный индекс по столбцу внешнего ключа из таблицы Podrazhdelen.
Практическая работа по теме: «Создание отчетов».
Напишите команду, позволяющую сохранить результаты в файл.
Создайте Отчет, содержащий сведения о преподавателях из таблицы Prep. Заголовки выведите русскими символами; атрибут vid_zan замените на «Вид занятия» и выведите на двух строках; символ подчеркивания заголовков смените с тире (-) на (*).
Выведите этот же Отчет, уменьшив ширину столбцов Предмет и Группа.
Создайте Отчет о доплатах преподавателям за стаж (таблица Stazh). Используя модель форматов, добавьте знак доллара перед значениями окладов. Каждую запись отделите от другой строкой из тире
Выведите Отчет, содержащий следующие сведения о преподавателях: фамилия, имя и кафедра, на которой он работает. Добавьте верхний заголовок «Сведения о преподавателях», который выровнен по центру, и нижний заголовок «2004-05 уч. год», выровненный по правому краю; организуйте отступ двух строк после верхнего заголовка. Записи отделяться друг от друга строкой из тире не должны.
Установите следующие размеры страницы:
- количество строк перед верхним заголовком: 3;
- количество строк на странице: 10;
- количество символов в строке выберите столько, чтобы Отчет выводился на трех страницах.
Выведите предыдущий Отчет (пункт 5), изменив верхний заголовок следующим образом: выровняйте текст заголовка «Сведения о преподавателях» по левому краю; а в правой части заголовка выведите текущий номер страницы. Для этого используйте параметр ‘PAGE:’ SQL.PNO SKIP 2
Выведите Отчет по таблице Dolzhn, содержащий сведения о среднем стаже преподавателей по должностям. Улучшите вид отчета, вставив по две пустые строки между итоговыми строками. Улучшите вид Отчета таким образом, чтобы сведения о преподавателях определенной должности выводились на отдельной странице.
Создайте Отчет, выводящий фамилию, имя, должность и оклад преподавателей, чей стаж более 5 лет.
Выведите Отчет, представляющий сведения о том, сколько преподавателей работает на каждой кафедре.
Выключите запись в файл.
Закройте среду SQL+; запустите снова и откройте записанный файл.