Представление (базы данных)

Поделись знанием:
Перейти к: навигация, поиск

Представление (англ. view, иногда используются названия «вид», «взгляд») — виртуальная (логическая) таблица, представляющая собой поименованный запрос (синоним к запросу), который будет подставлен как подзапрос при использовании представления.

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





Способ создания и содержимое представлений

Типичным способом создания представлений для СУБД, поддерживающих язык запросов SQL, является связывание представления с определённым SQL-запросом. Соответственно, содержимое представления — это результат выполнения этого запроса, а возможности построения представления ограничиваются только степенью сложности диалекта SQL, поддерживаемого конкретной СУБД. Так, для типичных СУБД, таких как PostgreSQL, Interbase, Firebird, Microsoft SQL Server, Oracle, представление может содержать:

  • подмножество записей из таблицы БД, отвечающее определённым условиям (например, при наличии одной таблицы «Люди» можно создать два представления «Мужчины» и «Женщины», в каждом из которых будут записи только о людях соответствующего пола);
  • подмножество столбцов таблицы БД, требуемое программой (например, из реальной таблицы «Сотрудники» представление может содержать по каждому сотруднику только ФИО и табельный номер);
  • результат обработки данных таблицы определёнными операциями (например, представление может содержать все данные реальной таблицы, но с приведением строк в верхний регистр и обрезанными начальными и концевыми пробелами);
  • результат объединения (join) нескольких таблиц (например, при наличии таблиц «Люди», «Адреса», «Улицы», «Фирмы и организации» возможно построение представления, которое будет выглядеть как таблица, для каждого человека содержащее его личные данные, адрес места жительства, название организации, где он работает, и адрес этой организации);
  • результат слияния нескольких таблиц с одинаковыми именами и типами полей, когда в представлении попадают все записи каждой из сливаемых таблиц (возможно, с исключением дублирования);
  • результат группировки записей в таблице (например, при наличии таблицы «расходы» с записями по каждому платежу можно построить представление, содержащее средства, израсходованные на каждую отдельную статью расходов);
  • практически любую комбинацию вышеперечисленных возможностей.

Использование

Представления используются в запросах к БД тем же образом, как и обычные таблицы. В случае SQL-СУБД имя представления может находиться в SQL-запросе на месте имени таблицы (в предложении FROM). Запрос из представления обрабатывается СУБД точно так же, как запрос, в котором на месте имени представления находится подзапрос, определяющий это представление. При этом СУБД с развитыми возможностями оптимизации запросов перед выполнением запроса из представления могут проводить совместную оптимизацию запроса верхнего уровня и запроса, определяющего представление, с целью минимизации затрат на выборку данных.

Использование представлений не даёт каких-то совершенно новых возможностей в работе с БД, но может быть очень удобно.

  • Представления скрывают от прикладной программы сложность запросов и саму структуру таблиц БД. Когда прикладной программе требуется таблица с определённым набором данных, она делает простейший запрос из подготовленного представления. При этом даже если для получения этих данных требуется чрезвычайно сложный запрос, сама программа этого запроса не содержит.
  • Использование представлений позволяет отделить прикладную схему представления данных от схемы хранения. С точки зрения прикладной программы структура данных соответствует тем представлениям, из которых программа эти данные извлекает. В действительности данные могут храниться совершенно иным образом, достаточно лишь создать представления, отвечающие потребностям программы. Разделение позволяет независимо модифицировать прикладную программу и схему хранения данных: как при изменении структуры физических таблиц, так и при изменении программы достаточно изменить представления соответствующим образом. Изменение программы не затрагивает физические таблицы, а изменение физической структуры таблиц не требует корректировки программы.
  • С помощью представлений обеспечивается ещё один уровень защиты данных. Пользователю могут предоставляться права только на представление, благодаря чему он не будет иметь доступа к данным, находящимся в тех же таблицах, но не предназначенных для него.
  • Поскольку SQL-запрос, выбирающий данные представления, зафиксирован на момент его создания, СУБД получает возможность применить к этому запросу оптимизацию или предварительную компиляцию, что положительно сказывается на скорости обращения к представлению, по сравнению с прямым выполнением того же запроса из прикладной программы.

Специфические типы представлений

Некоторые СУБД имеют расширенные представления для данных, доступных только для чтения. Так, СУБД Oracle реализует концепцию «материализованных представлений» — представлений, содержащих предварительно выбранные невиртуальные наборы данных, совместно используемых в распределённых БД. Эти данные извлекаются из различных удалённых источников (с разных серверов распределённой СУБД). Целостность данных в материализованных представлениях поддерживается за счёт периодических синхронизаций или с использованием триггеров. Аналогичный механизм предусмотрен в Microsoft SQL Server версии 2000.

По самой сути представления могут быть доступны только для чтения. Тем не менее, в некоторых СУБД (например, в Oracle) представления могут быть редактируемыми, как и обычные физические таблицы. Редактирование может допускаться для представлений, выбранных из единственной физической таблицы таким образом, чтобы каждой записи в представлении соответствовала строго одна запись в таблице-источнике, а в числе полей представления был первичный ключ физической таблицы. При выполнении команд редактирования, добавления или удаления для такого представления сервер СУБД преобразует эти команды в соответствующие команды для физической таблицы-источника. Разумеется, если в представлении используется группировка записей или преобразование значений в полях, редактирование такого представления невозможно даже теоретически. Но и такие представления могут, тем не менее, редактироваться, посредством написания соответствующих триггеров (хотя осмысленность подобных операций целиком останется на совести программиста). Впрочем, редактируемые представления, как и возможность создания триггеров для представлений, поддерживают лишь немногие СУБД.

См. также

Напишите отзыв о статье "Представление (базы данных)"

Ссылки

  • [dev.mysql.com/doc/refman/5.0/en/views.html Views in MySQL]

Отрывок, характеризующий Представление (базы данных)

– Однако вы не спали, – сказала она, подавляя свою радость. – Постарайтесь заснуть… пожалуйста.
Он выпустил, пожав ее, ее руку, она перешла к свече и опять села в прежнее положение. Два раза она оглянулась на него, глаза его светились ей навстречу. Она задала себе урок на чулке и сказала себе, что до тех пор она не оглянется, пока не кончит его.
Действительно, скоро после этого он закрыл глаза и заснул. Он спал недолго и вдруг в холодном поту тревожно проснулся.
Засыпая, он думал все о том же, о чем он думал все ото время, – о жизни и смерти. И больше о смерти. Он чувствовал себя ближе к ней.
«Любовь? Что такое любовь? – думал он. – Любовь мешает смерти. Любовь есть жизнь. Все, все, что я понимаю, я понимаю только потому, что люблю. Все есть, все существует только потому, что я люблю. Все связано одною ею. Любовь есть бог, и умереть – значит мне, частице любви, вернуться к общему и вечному источнику». Мысли эти показались ему утешительны. Но это были только мысли. Чего то недоставало в них, что то было односторонне личное, умственное – не было очевидности. И было то же беспокойство и неясность. Он заснул.
Он видел во сне, что он лежит в той же комнате, в которой он лежал в действительности, но что он не ранен, а здоров. Много разных лиц, ничтожных, равнодушных, являются перед князем Андреем. Он говорит с ними, спорит о чем то ненужном. Они сбираются ехать куда то. Князь Андрей смутно припоминает, что все это ничтожно и что у него есть другие, важнейшие заботы, но продолжает говорить, удивляя их, какие то пустые, остроумные слова. Понемногу, незаметно все эти лица начинают исчезать, и все заменяется одним вопросом о затворенной двери. Он встает и идет к двери, чтобы задвинуть задвижку и запереть ее. Оттого, что он успеет или не успеет запереть ее, зависит все. Он идет, спешит, ноги его не двигаются, и он знает, что не успеет запереть дверь, но все таки болезненно напрягает все свои силы. И мучительный страх охватывает его. И этот страх есть страх смерти: за дверью стоит оно. Но в то же время как он бессильно неловко подползает к двери, это что то ужасное, с другой стороны уже, надавливая, ломится в нее. Что то не человеческое – смерть – ломится в дверь, и надо удержать ее. Он ухватывается за дверь, напрягает последние усилия – запереть уже нельзя – хоть удержать ее; но силы его слабы, неловки, и, надавливаемая ужасным, дверь отворяется и опять затворяется.
Еще раз оно надавило оттуда. Последние, сверхъестественные усилия тщетны, и обе половинки отворились беззвучно. Оно вошло, и оно есть смерть. И князь Андрей умер.
Но в то же мгновение, как он умер, князь Андрей вспомнил, что он спит, и в то же мгновение, как он умер, он, сделав над собою усилие, проснулся.
«Да, это была смерть. Я умер – я проснулся. Да, смерть – пробуждение!» – вдруг просветлело в его душе, и завеса, скрывавшая до сих пор неведомое, была приподнята перед его душевным взором. Он почувствовал как бы освобождение прежде связанной в нем силы и ту странную легкость, которая с тех пор не оставляла его.
Когда он, очнувшись в холодном поту, зашевелился на диване, Наташа подошла к нему и спросила, что с ним. Он не ответил ей и, не понимая ее, посмотрел на нее странным взглядом.
Это то было то, что случилось с ним за два дня до приезда княжны Марьи. С этого же дня, как говорил доктор, изнурительная лихорадка приняла дурной характер, но Наташа не интересовалась тем, что говорил доктор: она видела эти страшные, более для нее несомненные, нравственные признаки.
С этого дня началось для князя Андрея вместе с пробуждением от сна – пробуждение от жизни. И относительно продолжительности жизни оно не казалось ему более медленно, чем пробуждение от сна относительно продолжительности сновидения.

Ничего не было страшного и резкого в этом, относительно медленном, пробуждении.
Последние дни и часы его прошли обыкновенно и просто. И княжна Марья и Наташа, не отходившие от него, чувствовали это. Они не плакали, не содрогались и последнее время, сами чувствуя это, ходили уже не за ним (его уже не было, он ушел от них), а за самым близким воспоминанием о нем – за его телом. Чувства обеих были так сильны, что на них не действовала внешняя, страшная сторона смерти, и они не находили нужным растравлять свое горе. Они не плакали ни при нем, ни без него, но и никогда не говорили про него между собой. Они чувствовали, что не могли выразить словами того, что они понимали.
Они обе видели, как он глубже и глубже, медленно и спокойно, опускался от них куда то туда, и обе знали, что это так должно быть и что это хорошо.
Его исповедовали, причастили; все приходили к нему прощаться. Когда ему привели сына, он приложил к нему свои губы и отвернулся, не потому, чтобы ему было тяжело или жалко (княжна Марья и Наташа понимали это), но только потому, что он полагал, что это все, что от него требовали; но когда ему сказали, чтобы он благословил его, он исполнил требуемое и оглянулся, как будто спрашивая, не нужно ли еще что нибудь сделать.
Когда происходили последние содрогания тела, оставляемого духом, княжна Марья и Наташа были тут.
– Кончилось?! – сказала княжна Марья, после того как тело его уже несколько минут неподвижно, холодея, лежало перед ними. Наташа подошла, взглянула в мертвые глаза и поспешила закрыть их. Она закрыла их и не поцеловала их, а приложилась к тому, что было ближайшим воспоминанием о нем.
«Куда он ушел? Где он теперь?..»

Когда одетое, обмытое тело лежало в гробу на столе, все подходили к нему прощаться, и все плакали.
Николушка плакал от страдальческого недоумения, разрывавшего его сердце. Графиня и Соня плакали от жалости к Наташе и о том, что его нет больше. Старый граф плакал о том, что скоро, он чувствовал, и ему предстояло сделать тот же страшный шаг.
Наташа и княжна Марья плакали тоже теперь, но они плакали не от своего личного горя; они плакали от благоговейного умиления, охватившего их души перед сознанием простого и торжественного таинства смерти, совершившегося перед ними.



Для человеческого ума недоступна совокупность причин явлений. Но потребность отыскивать причины вложена в душу человека. И человеческий ум, не вникнувши в бесчисленность и сложность условий явлений, из которых каждое отдельно может представляться причиною, хватается за первое, самое понятное сближение и говорит: вот причина. В исторических событиях (где предметом наблюдения суть действия людей) самым первобытным сближением представляется воля богов, потом воля тех людей, которые стоят на самом видном историческом месте, – исторических героев. Но стоит только вникнуть в сущность каждого исторического события, то есть в деятельность всей массы людей, участвовавших в событии, чтобы убедиться, что воля исторического героя не только не руководит действиями масс, но сама постоянно руководима. Казалось бы, все равно понимать значение исторического события так или иначе. Но между человеком, который говорит, что народы Запада пошли на Восток, потому что Наполеон захотел этого, и человеком, который говорит, что это совершилось, потому что должно было совершиться, существует то же различие, которое существовало между людьми, утверждавшими, что земля стоит твердо и планеты движутся вокруг нее, и теми, которые говорили, что они не знают, на чем держится земля, но знают, что есть законы, управляющие движением и ее, и других планет. Причин исторического события – нет и не может быть, кроме единственной причины всех причин. Но есть законы, управляющие событиями, отчасти неизвестные, отчасти нащупываемые нами. Открытие этих законов возможно только тогда, когда мы вполне отрешимся от отыскиванья причин в воле одного человека, точно так же, как открытие законов движения планет стало возможно только тогда, когда люди отрешились от представления утвержденности земли.