- •1 Модели данных
- •2 Иерархическая модель
- •3 Сетевая модель
- •4 Реляционная модель
- •5 Структура реляционных данных
- •Отношение Студент
- •6 Отношения : определение, свойства
- •7 Реляционная алгебра. ( основные операции)
- •Унарные операции .
- •Бинарные операции
- •8 Реляционная алгебра. ( дополнительные операции).
- •9 Реляционное исчисление доменов.
- •10 Реляционное исчисление кортежей.
- •11 Построение sql- запросов.
- •12 Sql. Операторы between, in, like, is null
- •13 Комбинированные запросы.
- •14 Вложенные запросы.
- •15 Связанные запросы.
- •16 Использование оператора exists
- •17 Использование предложения union, except, intersect
- •18 Ввод, удаление, изменение значений полей в sql.
- •19 Использование подзапросов с командами обновления
- •20 Использование функций агрегирования в построении запросов
- •21 Форматирование результатов запросов
- •22 Ограничение foreign key.
- •23 Создание, изменение и удаление таблиц средствами -sql.
- •24 Поддержка основных правил целостности данных.
- •25 Sql server. Характеристика объектов бд.
- •Представления
- •Пользовательские типы данных
- •Ограничения целостности
- •28 Основные типы данных
- •Двоичные данные
- •Специальные типы данных.
- •29 Индексы: типы, назначение, создание
- •30 Представления. Изменение значений с помощью представлений
- •31 Обновляемые представления
- •32 Концепция er-модели
- •33 Типы связей и структурные ограничения в er-модели.
- •34 Проблемы er-моделирования
- •35 Основные положения проектирования схем реляционных баз данных
- •36 Избыточность данных и аномалии обновления.
- •37 Функциональные зависимости
- •38 Нормальные формы
- •39 Многозначные зависимости и 4нф ,5нф
- •40 Обзор процесса нормализации
- •41 Основные этапы проектирования баз данных
- •42 Методология концептуального проектирования
- •43 Методология логического проектирования
- •44 Основные задачи логического этапа проектирования базы данных.
- •45 Проверка логической модели с помощью правил нормализации и в отношении транзакций пользователей.
- •46 Определение требований поддержки целостности данных
- •47 Общий обзор методологии физического проектирования реляционных баз данных
- •48 Управление транзакциями.
- •49 Этапы обработки запросов
- •50 Методы защиты базы данных.
30 Представления. Изменение значений с помощью представлений
1. |
Введение в представления. |
Таблицы, ранее рассматриваемые, называются базовыми. Эти таблицы содержат реальные данные. В отличии от них представления – это таблицы, которые содержат данные других таблиц. Эти таблицы могут использоваться в запросах, предложениях языка манипулирования данными так же, как и базовые таблицы. В действительности, представления – это запросы, выполняемые всякий раз, когда представление является объектом команды. Создается представление командой CREATE VIEW.
Например:
CREATE VIEW СотрудникиМН
AS SELECT * FROM СОтрудники
WHERE №отд = ‘О2’;
В результате создается представление СотрудникиМН, с этим представлением можно выполнять любые операции, то есть формировать запросы, удалять, вставлять, соединять с другими таблицами и представлениями.
Преимуществом представления является то, что оно обновляется автоматически при изменении формирующих его таблиц. Создание представления не фиксируется и вычисляется повторно всякий раз, когда в команде ссылаются на представление. запрос для представления – это фактически запрос к запросу. Например:
SELECT * FROM СотрудникиМН
WHERE ЗРПЛ > 1200000;
Фактически этот запрос будет эквивалентен:
SELECT * FROM Сотрудники
WHERE №отд = ‘О2’
AND ЗРПЛ > 1200000;
В SQL допускается использование групповых представлений, то есть представлений, которые базируются нf команде GROUP BY либо на других групповых представлениях. Предполагается, что каждый день надо отслеживать количество покупателей, имеющих заказы, количество продавцов, получивших заказы и общее количество поступивших заказов:
CREATE VIEW Итогдня
AS SELECT Дата, COUNT(DISTINCT №аренд)
FROM Осмотр GROUP BY Дата;
Затем получать информацию из запроса:
SELECT * FROM Итогдня;
Представления позволяют послать информацию из любого количества базовых таблиц или других представлений. Например, можно определить представление, которое показывает для каждого заказа имя продавца и имя покупателя:
CREATE VIEW ВладОбъектыСотр
AS SELECT №влад,a.ФИо As ФиоВлад,№объект,Адрес,Тип,Аренда,№сотр,c.ФИО As ФиоСотр
FROM Владельцы a, Объекты b, Сотрудники c
WHERE a.№влад = b.№влад
AND b.Сотр = c.Сотр;
SELECT * FROM ВладОбъектыСотр
WHERE ФиоСотр = ‘Иванов’;
В запросах представления могут соединять как с базовыми таблицами, так и с представлениями. Например:
SELECT a.sname, cname, ame*comm.
FROM ВладОбъектыСотр a, Осмотр b
WHERE a.ФиоСотр = ‘Петров’
AND b.№объект = a.№объект;
Представления могут использовать также подзапросы, связанные запросы. Например, компания платит вознаграждение продавцу, который имеет покупателя с наибольшим количеством заказов на заданную работу. Эту информацию можно получить с помощью следующих представлений:
CREATE VIEW Esf
AS SELECT №объект, Адрес, Тип
FROM ВладОбъектыСотр
WHERE = Аренда(
SELECT MAX(Аренда)
FROM ВладОбъектыСотр);
Для извлечения из представления используется запрос
SELECT * FROM Esf;
Для удаления представления из БД используется команда DROP VIEW <имя представления>.
Здесь нет необходимости сначала удалять все содержимое, как это требуется для базовых таблиц, поскольку создание представления никогда явно не определяется, оно сохраняется в процессе выполнения отдельной команды. На базовые таблицы команда DROP не оказывает влияния.
2. |
Изменение значений с помощью представлений. |
Команды обновления применительно к представлениям работают следующим образом: воздействуют на базовую таблицу представления. Существуют критерии для определения обновленовляемого представления представления:
1. |
Оно базируется только на одной таблице. |
2. |
Должно включать первичный ключ таблицы. |
3. |
Не должно содержать ключей, полученных агрегированием. |
4. |
Не должно содержать DISTINCT в своем определении. |
5. |
Не должно содержать GROUP BY и HAVING в своем определении. |
6. |
Не должно содержать подзапросов. |
7. |
Может быть ограничено на обновляемом представлении. |
8. |
Не может содержать констант, строк или выражений в списке выбираемых выходных полей. |
9. |
Для команды INSERT должно включать любые поля, которые имеют ограничения NOT NULL. |
Представления, которые не отвечают выше указанным критериям, являются представлениями только для чтения. Однако, даже с обновляемыми представлениями часто бывают проблемы. Например:
CREATE VIEW Highrating
AS SELECT cnum, rating FROM Customers
WHERE rating = 300;
Выполняется следующая команда:
INSERT INTO Highrating
VALUES (2000, 200);
Обновление выполнено не будет. Эта проблема в SQL решается следующим образом: в определение представления добавляется команда:
WITH CHECK OPTION
Эта команда вводится в определения представления и она не имеет отношения к базовой таблице. Будут контролироваться все команды. При выполнении команды будут выдаваться сообщения. Аналогичная проблема возникает, если необходимо в представление включить строки, которые базируются на полях, которые не представлены в представлении:
CREATE VIEW Londonstaff
AS SELECT cnum, cname, comm
FROM Salespeople
WHERE city =’London’;
Если в такое представление попытаться вставить строчку, то она не будет видна в представлении, а будет вставлена в базовую таблицу. Чтобы решить эту проблему, необходимо всегда в представлении задавать все поля, которые есть в базовой таблице.
Получится представление, в котором будут одинаковые значения для поля city. Чтобы исключить это из выходных данных нужно:
SELECT snum, sname
FROM Londonstaff;
Опция WITH CHECK OPTION действует только на представление, в котором она указана, но не действует на представление, которое базируется на этом представлении. Например имеется:
CREATE VIEW Highrating
AS SELECT cnum, rating FROM Customers
WHERE rating = 300
WHITH CHECK OPTION;
Попытки ввести или изменить значение рейтинга, отличного от 300 будут отвергнуты, но можно попытаться создать новое представление:
CREATE VIEW Vyrating
AS SELECT *
FROM Highrating;
UPDATE Murating
SET rating = 200
WHERE cnum = 2004;
В начало
