- •Лабораторная работа 1
- •Лабораторная работа №2 Создание базы данных
- •Работа в среде Microsoft sql server 2008
- •Создание базы данных
- •Создание таблиц, входящих в бд. Задание для их атрибутов типов данных и ограничений целостности, соответствующих смыслу таблиц.
- •Присвоение имен ограничениям
- •Проверка ограничивающих условий с использованием составных полей
- •Values (111,'Петров','Александр', ‘Иванович’, ‘1994-05-05’, 23, 3,5);
- •Values (101, 'Иванов', null, 200, 3, 'Москва','6/10/1979', 15);
- •3. Модификация структуры таблицы (добавление и удаление нового столбца, добавление ограничений, изменение типа данных, ограничений целостности)
- •Лабораторная работа №3 Команды манипулирования данными
- •Values (111, 'Иванов', ‘Александр’);
- •Лабораторная работа №4 Проектирование запросов
- •Лабораторная работа №5 Создание запросов
- •Проектирование представлений, хранимых процедур, триггеров
- •Проектирование представлений
- •Примеры триггеров
- •Лабораторная работа №7 Представления
- •Обновление данных в представлениях
- •Тип, Цена, Цена*0.05 from Товар Модифицирование представлений
- •Операции модификации в представлениях, маскирующих строки и столбцы
- •Агрегированные представления
- •Представления, основанные на нескольких таблицах
- •Лабораторная работа №8 Разработка хранимых процедур Хранимые процедуры
- •Создание, изменение и удаление хранимых процедур
- •Drop procedure {имя_процедуры} [,...N]; Выполнение хранимой процедуры
- •Лабораторная работа №9 Создание триггеров
- •Компоненты триггера
- •Типы триггеров
- •Создание триггеров
- •Преимущества использования триггеров:
- •Программирование триггеров
- •Примеры использования триггеров
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Ильин с.В.', '08вп131', 2, 1250);
- •17.6. Использование хранимых процедур в триггерах
- •Insert into Students (fio, Nomer_zachetki, id_Group, Stipendiya) values ('Макарь в.А.', '06вп118', 4, 1200);
Операции модификации в представлениях, маскирующих строки и столбцы
Рассмотренная выше проблема возникает и при вставке строк в представление с предикатом, использующим поля базовой таблицы, не присутствующие в самом представлении. Например, рассмотрим представление
CREATE VIEW MOSC_STUD AS
SELECT STUDENT_ID,SURNAME, STIPEND
FROM STUDENT
WHERE CITY = 'Москва';
Видно, что в данное представление не включено поле CITY таблицы STUDENT.
Что будет происходить при попытках вставки строки в это представление? Так как мы не можем указать значение CITY в представлении как значение по умолчанию (ввиду отсутствия , в нем этого поля), то этим значением будет NULL, и оно будет введено в поле CITY базовой таблицы STUDENT '(считаем, что для этого поля опция NOT NULL не используется). Так как в этом случае значение поля CITY базовой таблицы STUDENT не будет равняться значению 'Москва', вставляемая строка будет исключена из самого представления и поэтому не будет видна пользователю. Причем так будет происходить для любой вставляемой в представление MOSC_STUD строки. Другими словами, пользователь вообще не сможет видеть строки, вводимые им в это представление. Данная проблема не решается и в случае, если в определение представления будет добавлена опция WITH CHECK OPTION:
CREATE VIEW MOSC_STUD AS
SELECT STUDENT_ID,SURNAME, STIPEND
FROM STUDENT
WHERE CITY = 'MoCKBa'
WITH CHECK OPTION;
Таким образом, в определенном указанными способами представлении можно модифицировать значения полей или удалять строки, но нельзя вставлять строки. Исходя из этого, рекомендуется даже в тех случаях, когда этого не требуется по соображениям полезности (и даже безопасности) информации, при определении представления включать в него все поля, на которые имеется ссылка в предикате. Если эти поля не должны отображаться в выводе таблицы, всегда можно исключить их уже в запросе к представлению. Другими словами, можно было бы определить представление MOSC_STUD подобно следующему:
CREATE VIEW MOSC_STUD AS
SELECT *
FROM STUDENT
WHERE CITY = 'Москва'
WITH CHECK OPTION;
Эта команда заполнит в представлении поле CITY одинаковыми значениями, которые можно просто исключить из вывода с помощью другого запроса уже к этому сформированному представлению, указав в запросе только поля, необходимые для вывода.
SELECT STUDENT_ID, SURNAME,.STIPEND
FROM MOSC_STUD;
Агрегированные представления
Создание представлений с использованием агрегирующих функций и предложения GROUP BY является удобным инструментом для непрерывной обработки и интерпретации извлекаемой информации. Предположим, необходимо следить за количеством студентов, сдающих экзамены, количеством сданных экзаменов, количеством сданных предметов, средним баллом по каждому предмету. Для этого можно сформировать следующее представление:
CREATE VIEW TOTALDAY AS
SELECT EXAM_DATE, COUNT(DISTINCT SUBJ_ID) AS SUBJ_CNT,
COUNT(STUDENT_ID) AS STUD_CNT,
COUNT(MARK; AS MARK_CNT,
AVG(MARK) AS MARK_AVG, SUM(MARK) AS MARK_SUM
FROM EXAM_MARKS
GROUP BY EXAM_DATE;
Теперь требуемую информацию можно увидеть с помощью простого запроса к представлению:
SELECT * FROM TOTALDAY;
