Программирование баз данных MS SQL Server (1084479), страница 97
Текст из файла (страница 97)
Рког(цскмос(е1 в базе данных Ас(тгепкцтенот)гз. 9.9. Удалите индекс, созданный при выполнении упр. 9.2. Применяется ли данная таблица в основном для формирования отчетов? Иными словами, явля- ется ли таблица таковой, что в ней выполняется небольшое количество операций вставки, но на основе ее данных формируется большое коли- чество различных отчетов? Если ответ на этот вопрос является положительным, то сведите количество индексов к минимуму. В табли- цах такого типа модификации обычно осуществляются путем осуществления поиска отдельных строки с помощью первичного ключа.
Как правило, для такой таблицы достаточно предусмотреть лишь индекс, за- данный на столбце (столбцах) первичного ключа. Если операции вставки осуществляются непоследователь- но, то, по-видимому, целесообразно отказаться от использования кластеризованного индекса Чем больше индексов, тем лучше.
Задайте кластери- зованный индекс на таком столбце (столбцах) с ча- сто используемой информацией, в котором, по всей вероятности, выборка данных будет осуществляться в аиде сплошных участков. В системах ОЫР чаще всего применяется во много раз больше индексов, чем в системах ОПР Представления В предыдущих главах в основном рассматривались реальные объекты базы данных (т.е. объекты, существующие в определенном смысле самостоятельно), а в этой главе, начиная с представлений, мы переходим к описанию виртуальных объектов базы данных (которые также можно считать "виртуальными" лишь в определенном смысле).
Практика показывает, что представления используются либо слишком часто, либо слишком редко, иными словами, в действительности почти не встречаются такие проекты, в которых степень применения представлений была бы вполне оправдана. Изучение этой главы позволит читателю приобрести способность использовать представления для достижения описанных ниже целей. 0 Сократить кажущуюся сложность базы данных для конечных пользователей. О Обеспечить доступ пользователей ко всем необходимым данным и вместе с тем исключить возможность выборки конфиденциальной информации, хранимой в некоторых столбцах. О Предусмотреть в базе данных дополнительные средства индексации, позволяющие повысить производительность запросов даже в том случае, если представления, на которых основаны индексы, не предназначены для использования по другому назначению.
В действительности представление по самой своей сути является не чем иным, как хранимым запросом. Весьма удобное свойство представлений состоит в том, что они позволяют объединять и согласовывать данные из базовых таблиц (или других представлений) для создания новых представлений, которые в большинстве отношений почти ничем не отличаются от базовых таблиц. В основе представления может лежать простой запрос, с помощью которого осуществляется выборка части столбцов только из одной таблицы, а остальные остаются нетронутыми, или сложный запрос, в котором соединяется несколько таблиц и создается один объект, полностью аналогичный отдельной таблице.
380 Глава 10 Простые представления Синтаксическая структура оператора создания представления (в его наиболее простой форме) может рассматриваться как комбинация тех конструкций, которые уже были описаны в этой книге, — простого оператора СВЕАТЕ, описанного в главе 5, а также оператора ЯЕЕЕСТ, неоднократно использовавшегося на протяжении данной книги: СЕНАТЕ Ч1ЕИ <чтет паве> АБ <ЯЕЬЕСТ зпапетепп> Безусловно, синтаксическая структура приведенного выше оператора сведена к минимуму, но в большинстве ситуаций эта структура отвечает всем потребностям в создании представлений.
А в более расширенной форме синтаксическая структура оператора создания представления выглядит следующим образом: СВЕАТЕ Ч1ЕМ [зсЛева пате].<чтет паве> [(<со1пвп пате 11зг>)) [ИХТН [ЕМСВУРТТОМ] [, ЯСНЕИАВ1МО1МО) [, Ч1ЕИ МЕТАОАТА]] АБ <БЕЬЕСТ зпапетепп> Х1ТН СНЕСК ОРТ10М Ниже в этой главе каждый компонент этого оператора будет рассматриваться отдельно, но вначале рассмотрим конкретный пример чрезвычайно простого представления. Создание простого представления Создадим в базе данных АссоппС1по представление СпзготегрйопеЬТБС чм, с помощью которого будет формироваться список номеров телефонов заказчиков: ОБЕ Ассоопптпд ОО СВЕАтЕ ЧТЕМ Созговегрвопе11ап че АЯ ЯЕЬЕСт Сиаговегнаве, Соппасг, Рвопе РВОМ Спапотегз Следует отметить, что после вызова на выполнение этого оператора СВЕАТЕ в программе Мапаяегпеп( Е(по[[о формируются такие же результаты, как и при использовании всех прочих операторов СВЕАТЕ.
А именно, не происходит возврат каких- либо строк, а вырабатывается только сообщение, позволяющее убедиться в успешном создании представления: Сотвапо(з) сотр1епео зпссеазтп11у. Теперь перейдите к использованию отображения в виде сетки (Вези1СБ 1п Сгтс]), если вы еще этого не сделали, чтобы было проще рассматривать результирующие наборы, если их несколько. Затем выполните один оператор БЕЕЕСТ применительно к созданному представлению (для этого используется точно такой же формат, как и для таблицы) и еще один — непосредственно к таблице сиэсотегж Представления 381 БЕЕЕСТ * ГаОМ СпзговегРПопеЕРзп тн БЕ|ЕСТ * ГЕОМ Спзговегз Описание полученных результатов Два полученных результирующих набора должны быть почти идентичными, а в действительности, что касается общих столбцов в представлении и таблице, эти два результирующих набора должны совпадать.
Чтобы было проще понять, как запрос в СУБД зОБ Яегтег преобразуется в представление, рассмотрим поэтапно осуществляемые при этом действия. Итак. оператор БЕЕЕСТ в представлении определен следующим образом: БЕЕЕСТ Спаповегкаве, Соппасп, Рьопе ГНОМ Соаговага Поэтому после вызова на выполнение приведенного ниже оператора в СУБД ог,Е1. Еегтег по существу передается команда: "Выполнить выборку всех данных из результирующего набора, полученного после выполнения оператора БЕЕЕСТ Спзговегнаве, Сопгасг, Рйопе ГЕОМ Спэговегз".
БЕ'Е Т * ГРОМ СоаповагРЬопеьазг тя Таким образом, с помощью представления осуществляется своего рода промежуточная обработка. Иными словами, представление фактически не изменяет какие- либо исходные данные, а скорее лишь "собирает в себе" выбранную по условию версию данных. к которым в нем осуществляется доступ. Этим свойством представлений можно пользоваться для создания менее сложного образа базы данных, предстающего перед конечным пользователем. Безусловно, в базе данных предусмотрено уже очень много инструментальных средств, позволяющих упростить работу пользователя, поэтому на первый взгляд может показаться, что представления не являются в этом от. ношении чем-то особенным, но пользователи так не считают.
Однако слвдувтучйтйвать'„-Ечтппд:.'умйлчайиктвссУБд 861::3ягуаг йя йрвдубмйтривзатся' 'выпблнййяь:каких-:лнбФОсббмм двйстВйй' прйманйтвльнО,к..'пйядстаййвняям, '38прйс ~ф.". ,Капатй:В аСНОВВ'ЛроадотаВЛВНИя~ 'Вмпамоааатдя НВ аЫПСЛНЗННВ тВВНО.,тЗК Мя;".КаК'ВФИ-'бЫ Втп бмя,Баярде;-ВВВдаННЫВ й ХСМВНдлой,'СтрОКЕ;:-,'та'.':Кяхздяятбб'ПрагдаарИтВЛЬНВя:;ППтйМИаа'.»'- йяя:не;првдусмптрявзайя'.,'Это',назначает.'-чад паола,создание представленнгя',;вводится ащв -'ОдяН ЭтаП рбрабСТКМ':На'яре 'От ФврМярйВЛНИя ЗЕЛррба-;КдайипйМгдО ПСМ1ЧЕНИЛ-'дВННЫХ„т В,-' :,ййтрйтм" на1пббйбсткузданл~"уйалмчяйдются:,:инымя вйпвамм' -с'псмпщью'првйствййвнйй :НИКОГда';Нпа'уойветвя:дОбй1ТЬйя уаКОГО-'жа;6ЫСтйтдЕйотюйя КаК ЛрГЬНВПССйадбтВВННОМ',ВЫЗС;,.
::аа:НВ ВмйОЛНЕНпяа:,СлаРатОРЗ БГЕЕет:ЛажшйВГО,'В-'ДваСВГа 'ЭЮГСКПРЕДСтаВЛВННЯ.',,'НО:НВСМп'О- .тря Нй йхаайяМСЕ,: 'В'.Саяапи'С;НВОбхпдяМВСотзпЮ'ЬбайяЕЧпВНИЧя-'ЗащпИтм'даМНЫХ,'ИЛНуарткйяляя' ,работы-дольвойатвлай:примвнвнйе "првдбтавлвййй'::часто".бмвввт:.'вгюлйв;обоснованным', :Вяедусат-'ЛИШЬЧ унпИтмяатпэдараядйймг' ЛИ''даПаЛНМТБВЛЬНЫВ.'Иядяржхсн:С ТОЧКИ',ЗбаНИВ "ПрВНМуЙейтв,':дсстяугаемык,'в,конкйетнбй:сигуаЦМЙ. 382 Глава 10 Рассмотрим еще одни пример представления, который показывает возможности использования представлений для сокрытия конфиденциальных данных. Для этого снова воспользуемся таблицей Рвр1оуеев базы данных Ассоппс1пд.
Эта таблица состоит из столбцов, перечисленных в табл. 10.1. Таблица 10.1. Столбцы таблицы жир1оуееа Столбцы таблицы алр1оуеел Еер1оуее1О Гссвпнаее Мгбб1е1п1Спа1 ьавснаее тЕС1е Ба1асу н1сеоасе Тесекпаптопоапе МапасесЕер1О Оераспеепп Определенная часть информации, содержащейся в таблице Е1пр1оуеез, согласно федеральному закону США, должна быть скрыта от постороннего взгляда (доступ к этой информации должен предоставляться только с учетом действительных потребностей), а другие столбцы таблицы содержат информацию, доступ к которой может быть предоставлен любому желающему. Предположим, что требуется предоставить группе пользователей неограниченные возможности выборки данных из столбцов, допускающих свободный доступ, но исключить для этих пользователей возможность видеть общую структуру таблицы или обращаться ко всем данным.