WITH CHECK option

Теперь попытка ввести через представление VStudentNOINSERTIST03 данных о студенте группы АИС-03 (IDGroup=2)

INSERT INTO VStudentNOINSERTIST03

VALUES('050007','1111111117','Васин В.И.', 2, '8701', '192314', '01.06.2002', 'УВД г.Ухты');

приведет к появлению следующего сообщения об ошибке:

Server: Msg 550

The attempted insert or update failed because the target view either specifies WITH CHECK OPTION or spans a view that specifies WITH CHECK OPTION and one or more rows resulting from the operation did not qualify under the CHECK OPTION constraint.

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

Пример 83

Задача.

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

Решение.

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

CREATE VIEW VPROGRESS

AS

SELECT

NameGroup [Группа],

S.NRecordBook [№ зачетки],

SName [Имя студента ],

NameSubject[Название дисциплины],

NameReport[Вид отчетности],

NTerm[№ семестра],

PIN [Персонифицированный номер преподавателя],

Mark[Оценка]

FROM Progress P INNER JOIN Student S

ON P.NRecordBook=S.NRecordBook

INNER JOIN SGroup SG

ON S.IDGroup=SG.IDGroup

INNER JOIN Subject SB

ON P.IDSubject=SB. IDSubject

INNER JOIN Report R

ON P.IDReport=R.IDReport

Реализация запроса

SELECT *

FROM VProgress;

к представлениюVProgress позволит получить следующий результат:

Результат выполнения запроса.

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

Пример 84

Задача.

Вывести успеваемость студентов по дисциплине БД в 5 семестре, используя представление VProgress.

Решение.

SELECT *

FROM VProgress

WHERE [Название дисциплины]='БД'

AND [№ семестра]=5

Результат выполнения запроса.

Нетрудно представить, как бы выглядел этот запрос, обращенный непосредственно к таблицам

SELECT NameGroup [Группа],

S.NRecordBook [№ зачетки],

SName [Имя студента ],

NameSubject[Дисциплина],

NameReport [Отчетность],

NTerm [Семестр],

PIN [ПИН],

Mark[Оценка]

FROM Progress P INNER JOIN Student S

ON P.NRecordBook=S.NRecordBook

INNER JOIN SGroup SG

ON S.IDGroup=SG.IDGroup

INNER JOIN Subject SB

ON P.IDSubject=SB.IDSubject

INNER JOIN Report R

ON P.IDReport=R.IDReport

WHERE NameSubject ='БД'

AND NTerm=5

Пример 85

Задача.

Вывести средний балл по каждой группе студентов в 5 семестре.

Решение.

SELECT Группа, AVG(Оценка) [Средняя оценка]

FROM VProgress

WHERE [Семестр]=5

GROUP BY Группа

Результат выполнения запроса.

Представление может быть создано не только с использованием таблиц, но и самих представлений. Например, через представление VProgress нельзя увидеть имена преподавателей, ведущих, ту или иную дисциплину, а через созданное ниже представление VProgressTeacher это вполне реально. Однако не следует злоупотреблять многоуровневостью представлений, ибо это может привести к значительному снижению производительности.

Пример 86

Задача.

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

Решение.

CREATE VIEW VPROGRESSTEACHER

AS

SELECT Группа,

[№ зачетки],

[Имя студента],

[Дисциплина],

[Отчетность],

[Семестр],

[ПИН],

TName [Имя преподавателя],

Оценка

FROM VProgress P INNER JOIN Teacher T

ON P.[ПИН]=T.PIN

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

Задание 49

Создать представление для просмотра базы данных с целью определения успеваемости студентов группы АИС-03.

Задание 50

Создать представление для вывода ведомостей успеваемости студентов.

Задание 51

Создать представление для вывода информации о предметах, изучаемых в 3 семестре студентами специальности ИСТ.

Задание 52

Создать представление для вывода информации о плановой нагрузке преподавателей кафедры АИС.

Задание 53

Создать представление для вывода информации о плановой нагрузке по дисциплине БД (Базы данных).

Вопросы для самоконтроля к лабораторной работе № 6

1. Что такое представление?

2. С какой целью создаются представления?

3. В чем отличие простых и сложных представлений?

4. Какое предложение, включенное в команду Create View, позволяет создавать представление в отсутствии базовых таблиц?

5. Какие предложения не может содержать запрос, определяющий представления?

6. Какие представления позволяют выполнять все без исключения операции DML?

7. Когда через представления нельзя выполнить операции удаления?

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

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

10. Допускается ли изменение представления?

11. В каких случаях нельзя изменить данные в представлении?

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



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: