Программирование баз данных MS SQL Server (1084479), страница 98
Текст из файла (страница 98)
Одним из решений могло бы стать сопровождение отдельной таблицы, которая включает только необходимые столбцы, как показано в табл. 10.2. Таблица 10.2. Общедоступные столбцы таблицы езвр1оуееа Общедоступные столбцы таблицы Еир1оуееа Етр1оуее1О Гссвпнаее Мтбб1етп111а1 ьавснаее т111е Нгсеоапе теппгпаС1опвапе Мапаоесктр1О Оерагоеепп Представления 383 Безусловно, на первый взгляд создается впечатление, что такое решение соответствует нашим потребностям, однако при его осуществлении возникают описанные ниже серьезные проблемы.
0 Объем используемого дискового пространства увеличивается вдвое. Н Возникает проблема синхронизации, обусловленная тем, что изменения, внесенные в одну таблицу, должны быть отражены в другой. 0 Количество выполняемых операций ввода-вывода также увеличивается вдвое (операции чтения и записи данных применяются к двум таблицам, а не к одной) при каждой вставке, обновлении или удалении строк. Простым и довольно изящным решением указанной задачи может стать представление. Если используется представление, то не требуется создавать копии данных, т.е. в базе данных хранится только один экземпляр данных (в таблице или таблицах, лежащих в основе представления), поэтому устраняются все недостатки, которые были описаны выше.
Вместо создания и сопровождения полностью отдельной таблицы можно просто создать представление, которое по своим функциональным возможностям почти ничем не отличается от отдельной копии таблицы. В настоящее время созданная нами таблица Евр1оуееэ пуста. Чтобы ввести в нее некоторые строки, загрузите файл С(зарсег10. зс(1 (предоставляемый в составе исходного кода) в программу Мапакешепг Ягпсйо и вызовите его на выполнение.
Затем введите следующее определение представления в базу данных Ассоппг1прр пяЕ Асссапптпя 60 СКЕАТЕ уТЕН Евр1оуеез ке АЯ ЗЕЬЕСТ Евр1оуеето, Гьгзпнаве, М1ЕЕ1етп1С1а1, Ьазгкаве, ттг1е, Нтгеваге, Тегвтпап1спсаге, МапаеегЕвр10, перагсвепе ГКОМ Евр1суеез После этого появляется возможность предоставить доступ к соответствующим данным таблицы Евр1оуееэ любым пользователям (прямо или косвенно). Это означает, что обеспечивается возмонсеость предоставлять полный доступ к таблице Евр1оуеее только тем пользователям, которым действительно требуется эта информация, но запретить непосредственный доступ к этой таблице всем прочим пользователям.
Вместо этого пользователям, в служебные обязанности которых не входит ознакомление со всей информацией таблицы Евр1оуееэ, может быть предоставлен доступ к представлению Евр1оуееэ че. Все желающие воспользоваться этой информацией смогут обратиться к ней так же, как и при использовании обычной таблицы: ЗЕЬЕСТ * ГЕОМ Евр1оуеез чн 384 Глава 10 РаССМатрмааакымй-:Приор,ФаКтИЧаСКИ:-Ещэа раЗ;-ПОдЧархйаагат'ИасбкьатдИМОСтЬ' Прнивтил Н. СОбЛЮВВНИВ'.ОлрЕдЕЛЕННЫХ:СлсзГЛа) мЕНИй;Об ИсМаиснаНИИ':ОьЧаМ.ужа'НаОдНОКргатНО бмгЛО СКаааНО В Наотт)ящай; КНИГа:В-даННрМ',СЛуЧаЕ.-'аВтОр.илоасгЛЬЗуат)дпяч ОбОЗНаЧВНснся''Прьадставлани)яь сурика,'. -'«~н;-и ото поаволчисаглагко опредалить.,'."чгоданйоа.'имя;относнтсяк йрадставдвгнию) а на к:таблица;,'но,,иногда,от,.
п)ользодаталя: псриходиуся":скрывать".нвкотарыа дотяпав"ОрГаНИЗацИИ,СрадетВ 'дьОСтуГ)а К бааз.даННйх„'Г)рэтОМьу СлацнаЛЬНО'убйратЬ ОбОЗНаЧаНИа,:,„,:ун.-а)ИМгаиакирКОтс))ЫХ' ПрадотаапайИй,,'.ЕСС))И,бм:таКОа'-'-,рЕШаНИа:,бйЛО Прн'- йято'в::брайном:,случая,стопригвлоСь) бы',назвать''прадставлайиа' по-'другому'(пгоскольку'имя емрзсоусеаз,'ужа икраилано'за,:баэрвой'табйицай):,"но)впзрактйчвско)й ра5оте.'нзеоднокрастно йртнксднтоя'.уб~ха)астЬТСя ВТОМ))НВСКОВЬКО радКО аат)ЙЧащтоя:ПОЛЬЗВВйт)ВЛИ,;СВОСОбййа-уЛОВИТЬграЗЛИЧИа)МаЛГ)ту;ПрацотьааЛаНИац,н".тайлнцай -аСЛИНаКЛЬГЗЛ ОлрадапнтЬ"ПО:ИМВНИ; ЧтО ото'-",,",'првдгстайланив,;"а.'на:тйбв)тца'.
Использование представлений как средств выборки по условию По-видимому, данный раздел — один из самых коротких в книге, поскольку трудно найти более простую тему по сравнению с изложенной в нем. Выше в данной главе уже было сказано, как создать простое представление, — для этого достаточно включить в оператор создания представления констр)тсцию БЕЗВЕСТ. А для обеспечения выборки данных в представлении по условию, как и в случае запроса, достаточно включить конструкцию ГНЕВЕ. Еще раз вернемся к примеру представления Еп1р1оуеез чн, который рассматривался в предыдущем разделе, и внесем в него небольшое дополнение для того, чтобы с его помощью формировался только список служащих, которые в настоящее время входят в кадровый состав.
Для этого необходимо внести всего лишь два изменения. Прежде всего необходимо исключить по условию из состава результатов данные о тех служащих, которые больше не работают в компании. В качестве признака того, что служащий в настоящее время не работает в компании, будем рассматривать наличие в данных об этом служащем информации о дате увольнения. Очевидно, что ес.ти служащий работает в компании, то в поле Тегвапагаоппаке записи с данными об этом служащем содержится ХУ) );значение; на этом может быть основан критерий выборки в запросе. Второе изменение иллюстрирует еще одну простую особенность представлений, используемых исключительно в качестве запросов. Дело в том, что в таких представлениях столбец (столбцы), содержавшийся в конструкции ННЕНЕ, не обязательно должен быть включен в список выборки.
А в данном случае нет никакого смысла включать информацию о дате увольнения в результирующий набор, поскольку нас интересуют только данные о служащих, которые в настоящее время продолжают работать в компании. Использование представлений для выборки данных по условию С учетом двух описанных выше особенностей представлений создадим новое представление на основе старого, внеся в него небольшие изменения: Представления 385 СнкатК ЧТЕМ С гесСКвр1оуеея АЯ В этом примере заслуживает внимания то,что изменилось имя представления и дополнительно введена конструкция ИНЕНЕ) кроме того,из списка выборки удален столбец Тегвгпа01опОаСе.
Проверим работу этого представления путем вызова на выполнение несложного оператора ЯЕЬЕСТ применительно к таблице Евр1оуеея и указания в списке выборки только тех данных, которые нас интересуют: ЯЕЬЕСТ Евр1суее10, Гггяснаве, Ьаягнаве, Тегвгсагуспсасе ГРОМ Евр1суеея В результате из всего объема данных таблицы будет получено лишь несколько столбцов: Гггягнаве Ьаягнаве Тегвгсас1споаге Евр1оуее10 (б гся(я) атбесгеС) Теперь вызовем на выполнение рассматриваемое представление; ЯЕЬЕСТ Евр1суее10, Гггяснавс, Ьаяснаве ГНОМ СсггессЕвр1суеея че Полученный при этом результирующий набор становится немного меньше: Гггягнаве Квр1суее10 Ьаяснаве Осхеу Рггссур1е Кг1гоу ВОЬ Осе Регег нсеаго Вг11у (4 гся(я) аббес еС) ЯЕЬЕСТ Евр1суее10, Гкгягнаве, МТСС1е1п1С1а1, Ьаягнаве, т1Г1е, Н1геогге, МасасегЕвр10, Оераггвесс ГНОМ Евр1оуеея ННЕНЕ Тегв1сасгспсасе 18 НОЬЬ Осе Регег Ягече Нсеаге Магу В Ьуу Оскеу Рггссгр1е Явугн Кг1гоу Сспсгагу всЬ НОЬЬ НОЬЬ 1997-01-31 00:00:00 НОЬЬ 1998-06-15 00:00:00 НОЬЬ 386 Глава 10 В этих данных отсутствуют сведения о некоторых служащих, а этого и требовалось добиться при создании представления.
Описание полученных результатов Как уже было сказано выше, рассматриваемое представление фактически является не чем иным, как оператором БЕЗВЕСТ, который скрыт от пользователей. Таким образом, пользователи получают возможность отвлечься от того, что содержится в самом операторе БЕЗВЕСТ, и учитывать лишь результаты, сформированные с его помощью, на таком же основании, как если бы эти результаты представляли сцбой отдельную таблицу.
Такую ситуацию можно сравнить с ситуацией применения производных таблиц, которые были описаны в главе 7. Кроме того, после вызова представления путем указания его имени осуществляется выборка данных по условию, поэтому в запросе, в котором указано имя этого представления, даже не приходится регламентировать условия выборки данных (поскольку это уже сделано с помощью представления). Более сложные представления Представления, рассматриваемые в этом разделе, действительно являются более сложными по сравнению с описанными выше, но вполне доступны для освоения.
Чаще всего наиболее сложные понятия, с которыми приходится сталкиваться при изучении представлений, все равно гораздо проще, чем многие другие концепции языка Я~1.. В действительности сложные представления отличаются от простых лишь тем, что в них дополнительно используются соединения, операции агрегирования, а также, возможно, некоторые варианты переименования столбцов. По-видимому, представления используются чаще всего для упрощения структуры данных, иными словами, для устранения тех сложностей доступа к данным, которые были вкратце описаны в начале данной главы.
Предположим, что необходимо подготовить представление для руководителей компании, чтобы им было проще контролировать данные о сбыте. Эту обязанность должен взять на себя программист, поскольку даже в наш информационный век редко встречаются менеджеры, которые сами способны написать сложные запросы (надеемся, что менеджеры, читая эту книгу, не воспримут данное утверждение как личное оскорбление).
В качестве примера снова рассмотрим базу данных Иоггпи1пб. Предположим, что руководители компании хотели бы иметь возможность вводить простые запросы, позволяющие узнавать, какие заказы были размещены в компании, какие товары упоминаются в заказах и кто разместил эти заказы. Таким образом, необходимо создать представление, применительно к которому руководители смогут выполнять очень простые запросы (напомним, что это представление создается в базе данных Иоггпк1пб): ц5Е Коггьк1пб 60 СВЕАТЕ Ч1ЕИ Сззгопегсгоегз чк АЯ зеьест сз.еоаравукапе о.огоегто, о.огоегпасе, Представления 387 об.ргобпст10, р.ргобистваве, об.Опапгтту, об.цпттРгтсе, об.ОпаптЕту * об.цпттРгьсе АБ ЕхтепбебРгЕсе РВОМ Спятовегя АЯ сп 1ННЕВ 001Н Огбегя АЯ о ОН си.сиятовег10 = о.спятовег10 1ННЕВ 001Н [Отбег Петатуя] АБ об ОН о.отбег10 = об.огбег10 1ЮНЕВ 001Н Ргобпстя АЯ р ОН об.Ргобяст1П = Р.Ргобпст10 Теперь выполним следующий простой оператор БЕЗВЕСТ: БЕЬЕСТ * РВОМ Спятовегогбегя чх В результате этого можно обнаружить, что осуществляется вывод большого количества строк (свыше 2000), но вместе с тем оказывается, что полученная информация стала гораздо проще и доступнее для понимания и анализа со стороны среднего пользователя.
Более того, даже без особой подготовки руководители компании (или любые заинтересованные пользователи) получают возможность непосредственно обращаться именно к тем данным, которые их интересуют, вводя, например, такие запросы: БЕЬЕСТ Соврапуняве, ЕхтепбебРттсе ЕВОН Спятовеготбегя гя ХНЕВЕ Огбегвате = '9!3/1996' Пользователи не обязаны знать, что данные, к которым они обращаются, получены в результате соединения четырех таблиц; все эти нюансы скрыты в представлении. Вместо этого пользователю достаточно применить лишь самые простейшие навыки (и в связи с этим не прилагать слишком значительных умственных усилий), чтобы получить все необходимые данные. ЕхтепдебРгбсе Совряпуняве 201.6000 417.0000 432.0000 ЫЬА-Бпрегвегсябо ЫЬА-Бпрегвегсябо ЫЬА-Бпрегвегсабо ]3 гох(я) яггестеб) ПЯЕ Ногтьябпб 00 СВЕАТЕ Ч1ЕХ УеятетбяуяОгбегя гх АБ ЯЕЬЕСТ сп.Совряпуняве, о.огбег1П, Мало того, запрос, лежащий в основе представления, может стать еще более целенаправленным.