Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Часть 2. Использование представлений




Представления (View)

Часть 1. Понятие представления

View –это объект базы данных, представляющий собой виртуальную таблицу, информация в которой формируется динамически в соответствии с запросом, хранящимся в БД и ассоциированным с этим представлением.

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

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

 

Представление создается следующей ко­мандой:

 

<определение_просмотра> : : =  

{ CREATE | ALTER} VIEW имя_представления [(имя_столбца [,...n]}]

[WITH ENCRYPTION [, SHENABINDING] [, VIEW METADATA]]

AS  

SELECT_onepaтор   

[WITH CHECK OPTION] [;]

 

Самая простая синтаксическая структура создания представления:

CREATE VIEW имя_представления

AS  

SELECT_onepaтор;   

 

Как и во всех случаях использования оператора CREATE, после выполнения этой команды никаких результатов работы оператораSELECT на экране мы не увидим. Будет лишь выдана диагностика об успешном завершении процесса создания представления.

Зачем создаются представления?

Во-первых, это связано с необходимостью сокрытия конфиденциальных данных, хранящихся в отдельных полях таблиц. После создания представлений доступ к данным для всех пользователей открывается  только через представления, прямого доступа к таблицам нет. Таким образом, частично решается проблема безопасности данных.

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

В-третьих, пользователям не придется писать довольно сложные запросы, использующие соединения таблиц, операции агрегирования и т.д.

 

Назначение основных параметров:

По умолчанию имена столбцов в представлении соответствуют именам столбцов в исходных таблицах.

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

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

Параметр WITH ENCRYPTION предписывает серверу шифровать SQL-код запроса, что гарантирует невозможность его несанкционирован­ного просмотра и использования. Если при определении представления необходимо скрыть имена исходных таблиц и столбцов, а также алгоритм объединения данных, необходимо применить этот аргумент.

Параметр WITH  CHECK  OPTION предписывает серверу исполнять проверку изменений, производимых (интерактивно пользователем или клиентским приложением) через представление, на соответст­вие критериям, определенным в операторе SELECT.

Использование аргумента WITH CHECK OPTION гарантирует, что сделанные изменения будут отображены в представлении.

 

Это означает, что не допускается выполнение изменений, которые приведут к исчезновению строки из представления. Такое случается, если в представлении устано­влен горизонтальный фильтр и изменение данных приводит к несоответ­ствию строки установленным фильтрам.

То есть, если пользователь пытается выполнить изменения, при­водящие к исключению строки из представления, при заданном аргу­менте WITH CHECK OPTION сервер выдаст сообщение об ошибке и все из­менения будут отклонены.

 

Примеры создания представлений

Пример 1Пусть впредставлении требуется показать клиентов из Москвы.

В окне запросов наберем текст

CREATE VIEWКлиенты_l

AS

SELECT Фамилия, Город FROM Клиенты

WHERE Город = 'Москва'

 

Выполним набранный

Выборка данных из представления:

SELECT * FROM  Клиенты_l

 

Обращение к представлению осуществляется с помощью оператора SELECT как к обычной таблице. То есть представление можно использовать в команде так же, как и любую дру­гую таблицу.

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

 

Попытаемся выполнить команду:

INSERT INTO  Клиенты_1 VALUES   ( 'Петров', 'Самара')

Эта команда допустима, и строка будет добавлена в таблицу Клиенты с помощью представления Клиенты_1. Но эта добавленная строка не будет отображаться в представлении.

Иногда такой подход может стать проблемой, т.к. данные уже находятся в таблице, но пользователь их не видит и не в состоянии выполнить их удаление или модификацию.

 

Для исключения подобных моментов служит WITH CHECK OPTION в опреде­лении представления.

Пример 2.Модифицируем созданное представление

ALTER VIEW Клиенты_1

SELECT Фамилия, Город

FROM  Клиенты

WHERE  Город = 'Москва'

WITH CHECK OPTION

Теперь вставляемые данные (или при попытке модификации данных через такое представление) будут проверяться на соответствие критериям, определенным в конструкции WHERE, определенной в оператореSELECT.

И приведенный выше оператор вставки будет отбрасываться.

Но, если вы вставите эти данные эти же данные в базовую таблицу, то все пройдет успешно.

Пример 3. Требуется создать представление, показывающее виды и количество проданного товара.

Создадим это представление с помощью программы Management Studio.

· Откройте SQL Server Management Studio;

· В базе данных «Торговая_фирма» выделите объект Представления;

 Создать представление;

· В открывшемся окне редактора представлений сформулируйте запрос

 

SELECT Товары.Название_товара, Продажи.Количество_ед_товара

FROM Товары INNER JOINПродажи

ONТовары.ID_товара = Продажи.Товар

· Выполните сформированный запрос;

· Сохраните представление под именем Товары_количество_1;

· Откройте созданную таблицу-представление.

 

 

Рис. 1. Создание представления с помощьюSQL ServerManagement studio 

 

Пример 5. С помощью запросатребуется создать представление, аналогичное описанному в примере 4.

· Нажмите Создать запрос;

· Наберите следующий код:

USEТорговая_фирма

GO

CREATE VIEW Товары_Количество_2

AS

SELECT dbo.Товары.Название_товара, dbo.Продажи.Количество_ед_товара

FROM        dbo.Товары INNER JOIN

                 dbo.Продажи ON dbo.Товары.Id_товара = dbo.Продажи.Товар

 

Таким образом, были созданы разными способами два идентичных представления.

 

Пример 6. При создании представления можно задавать псевдонимы полей.

Создайте следующее представление:

USEТорговая_фирма

GO

CREATE VIEW  Товары_Количество_3  (Товар, Продано)


AS  

SELECT Товары.Название_товара, Продажи.Количество_ед_товара

FROM        Товары INNER JOIN

                 Продажи ON Товары.Id_товара = Продажи.Товар

 

        

Выполните его командой

SELECT  *  FROM  Товары_Количество_3

 

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

 

Пример 7. Требуется отредактировать имеющееся представление Товары_Количество_2, а именно, добавить в представление поле Датаиз таблицы Продажи.

Это можно сделать двумя способами:

Способ 1. С помощью Management studio. Для этого выделите представление Товары_Количество_2и выберите команду контекстного меню  Изменить представление.

 

Способ 2. С помощью запроса.Для этого выделите представление Товары_Количество_2 и выберите команду Правка.

 

Во втором случае вы получите коды:

SET QUOTED_IDENTIFIER ON       - - Включен контроль приращения размеров файла данных

GO

SET ANSI_NULLS OFF            - -      Включен контроль NULL-значений

GO

 

ALTER Товары_Количество_2

AS

SELECT    

Товары.Название_товара,

Продажи.Количество_ед_товара,

Продажи.Дата

FROM        

Товары INNER JOINПродажи

ON Товары.Id_товара = Продажи.Товар

 

GO

SET QUOTED_IDENTIFIER OFF   - -Выключен контроль приращения размеров файла данных

GO

SET ANSI_NULLS ON             - -Выключен контроль NULL-значений

GO

 

Пример 8.

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

Выполним команду

INSERT INTO Товары_Количество_2 VALUES(‘Ряженка’, 12, ‘12/09/10’)

 

Эта команда допустима, и строка будет добавлена в таблицу Товары (если в остальных полях таблиц допустимы значения NULL).

 

Часть 2. Использование представлений

Задание 9. С помощью представления Товары_Количество_2требуется выбрать товары, которые были проданы в период с 1.01.2008 по 1.06.2008.

 Это опять можно сделать двумя способами:

 

Способ 1. С помощью Management studio. Для этого выделите представление Товары_Количество_2и выберите командуПроект.

Далее в окне редактора запросов создайте запрос к представлению, ориентируясь на рисунок 2.


Рис. 2. Редактор запросов в Management studio

 

Способ 2.  С помощью Редактора запросов. Введите коды, аналогичные тем, которые были сгенерированы в предыдущем способе:

SET QUOTED_IDENTIFIER ON       - - Включен контроль приращения размеров файла данных

GO

SET ANSI_NULLS ON              - -      Включен контроль NULL-значений

GO

 

ALTER Товары_Количество_2

AS

 

SELECT dbo.Товары.Название_товара, dbo.Продажи.Количество_ед_товара, dbo.Продажи.Дата

FROM    dbo.Товары INNER JOIN

                 dbo.Продажи ON dbo.Товары.ID_товара = dbo.Продажи.Товар

WHERE (CAST(Продажи.Дата  AS  DATE) BETWEEN '01.01.2010' AND '20.02.2010')

 

Задание 10. С помощью представления Товары_Количество_2требуется получить данные о проданных товарах за вчерашний день.

Пояснение.  Возможно, даты, которые хранятся в базе данных Торговая_фирма, относятся к давно прошедшему времени.

Перед выполнением задания пополните таблицу записями о продажах за вчерашний день.

 

Чтобы пополнить базу данных сведениями о вчерашних продажах, можно выполнить следующие коды:

USE  Торговая_фирма

GO

INSERT INTO Продажи

(Дата,Товар, Клиент, Количество_ед_товара)

VALUES

((DATEADD(day, -1, GETDATE()),  2,  2,  10)

        

Функция DATEADDпозволяет складывать и вычитать значения продолжительности любых промежутков времени (дни, недели и т. д.).










Последнее изменение этой страницы: 2018-04-12; просмотров: 671.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...