Что такое вьюха в базе данных
Хорошо спроектированные приложения обычно предоставляют открытый интерфейс, скрывая детали реализации, что позволяет вносить изменения в дизайн без влияния на конечных пользователей.
При разработке вашей базы данных вы можете достичь аналогичного результата, закрывая таблицы и предоставляя доступ к данным только через набор представлений.
В этой статье мы рассмотрим, что такое представления, как они создаются и для чего они могут быть полезными.
Представление — объект базы данных, являющийся результатом выполнения запроса к базе данных, определённого с помощью оператора SELECT , в момент обращения к представлению.
Представления иногда называют «виртуальными таблицами». Это связано с тем, что представление для пользователя выглядит как таблица, но фактически не хранит данных, а извлекает их из других таблиц в момент обращения.
Если данные в основной таблице меняются, пользователь получает актуальные данные при обращении к представлению, использующему эту таблицу. При этом представления не кэшируют результаты выборки из таблицы в процессе работы.
В качестве простого примера предположим, что вы хотите частично скрыть адреса электронной почты в таблице пользователей ( Users ).
Это может быть полезно, например, если политика вашей компании не позволяет всем использовать конфиденциальную информацию об пользователях. Поэтому вместо того, чтобы разрешить прямой доступ к таблице пользователей ( Users ), вы определяете представление с именем ViewUsers и требуете, чтобы все использовали его для доступа к данным о пользователях.
Вот пример определения этого представления:
MySQLCREATE VIEW ViewUsers AS SELECT id, name, CONCAT(SUBSTR(email, 1, 2), '****', SUBSTR(email, -4)) AS email FROM Users;
Представление в SQL-запросе выглядит и используется как обычная таблица:
MySQLSELECT * FROM ViewUsers;
id name 1 Bruce Willis ba****.com 2 George Clooney te****.com 3 Kevin Costner me****.com 4 Donald Sutherland ra****.net 5 Jennifer Lopez ba****.com 6 Ray Liotta jd****.net 7 Samuel L. Jackson mo****.com 8 Nikole Kidman ok****.com 9 Alan Rickman ka****.net 10 Kurt Russell ga****.com 11 Harrison Ford ko****.com 12 Russell Crowe gl****.net 13 Steve Martin ne****.com 14 Michael Caine dm****.com 15 Angelina Jolie ch****.net 16 Mel Gibson ro****o.ca 17 Michael Douglas ti****.com 18 John Travolta wa****.com 19 Sylvester Stallone ko****.com 20 Tommy Lee Jones sz****.com 21 Catherine Zeta-Jones fl****.com 22 Antonio Banderas sa****.net 23 Kim Basinger ja****.net 24 Sam Neill cl****.com 25 Hideo Kojima ad****.org 26 ClINT Eastwood fr****.net 27 Brad Pitt ke****.net 28 Johnny Depp cg****o.ca 29 Pierce Brosnan tr****.com 30 Sean Connery js****.com 31 Bruce Willis ke****.com 32 Mullah Omar jg****.com 33 Vasanta Roberta ro****.com Если вы хотите узнать, какие столбцы доступны в представлении, вы можете использовать оператор DESCRIBE :
MySQLDESCRIBE ViewUsers;
Field Type Null Key Default Extra id int NO name varchar(32) NO varchar(38) YES MySQLCREATE [OR REPLACE] VIEW имя_представления [(имена_полей_представления)] AS select_выражение
OR REPLACE — при использовании этого опционального параметра в случае, если представление с таким именем уже существует, старое представление будет удалено, а новое создано. В противном случае, при попытке создать представление с существующим именем, возникнет ошибка.
Представления используются для упрощения сложных запросов и создания абстракции между пользователем и базой данных. Они могут скрывать сложность структуры данных и предоставлять упрощённый интерфейс для доступа к данным.
Создание представлений, которые инкапсулируют сложные запросы, может помочь оптимизировать выполнение этих запросов. Это может привести к более быстрому выполнению запросов и улучшению общей производительности базы данных.
Представления могут использоваться для обеспечения безопасности конфиденциальных данных. Создание представлений, которые ограничивают доступ к определённым столбцам или строкам данных, позволяет администраторам ограничить доступ к чувствительной информации. Это помогает гарантировать, что только авторизованные пользователи имеют доступ к конфиденциальным данным.
Представления являются важным инструментом в SQL, который позволяет упростить сложные запросы, стандартизировать доступ к данным, повысить производительность и обеспечить безопасность данных.
Давайте проверим как вы усвоили тему: выберите правильное утверждение на вопрос «Что такое представление в базе данных?»
Views – представления
Бывает удобно сохранить результат выборки для дальнейшего использования. Для этих целей в языке SQL используется оператор CREATE VIEW, который создает представление – виртуальную таблицу. В эту виртуальную таблицу как бы сохраняется результат запроса.
Таблица виртуальная потому, что на самом деле ее нет в базе данных. В такую таблицу не получится вставить данные, обновить их или удалить. Можно только посмотреть хранящиеся в ней данные, сделать из нее выборку.
С другой стороны, если вы вносите изменения в реальные таблицы, они будут отражены и в виртуальных, потому что СУБД каждый раз, когда запрашивается представление, использует SQL выражение представления для обновления данных. Рассмотрим простой пример:
sqlite> CREATE VIEW title_url AS . > SELECT title,url FROM pages; sqlite> SELECT * FROM title_url; What is Information|information Amount of Information|amount-information Binary System|binary Boolean Lows|boolean sqlite> INSERT INTO pages (title, url, theme) . > VALUES . > ('What is Algorithm', 'algorithm', 4); sqlite> SELECT * FROM title_url; What is Information|information Amount of Information|amount-information Binary System|binary Boolean Lows|boolean What is Algorithm|algorithmСначала было создано представление title_url, затем – добавлена еще одна запись в реальную таблицу pages. При выборке из представления мы видим эту запись.
Часто в представления объединяют данные из нескольких таблиц:
sqlite> CREATE VIEW change_page AS . > SELECT pages._id, pages.title, . > sections.name, dates.date . > FROM pages JOIN dates JOIN sections . > ON pages._id = dates.page_id . > AND sections._id = pages.theme . > ORDER BY dates.date DESC; sqlite> SELECT * FROM change_page; 8|Boolean Lows|Boolean Algebra|2019-06-04 3|Amount of Information|Information|2019-06-03 9|What is Algorithm|Algorithm|2019-06-01 8|Boolean Lows|Boolean Algebra|2019-05-30 3|Amount of Information|Information|2019-05-26 7|Binary System|Digital Systems|2019-05-26 1|What is Information|Information|2019-05-25Удаляются представления с помощью команды DROP VIEW:
sqlite> DROP VIEW title_url;Что если нам нужны только пять страниц, которые последними претерпели изменения. Как вывести определенную часть таблицы? Для этих целей есть оператор LIMIT:
sqlite> SELECT * FROM change_page LIMIT 5; 8|Boolean Lows|Boolean Algebra|2019-06-04 3|Amount of Information|Information|2019-06-03 9|What is Algorithm|Algorithm|2019-06-01 8|Boolean Lows|Boolean Algebra|2019-05-30 3|Amount of Information|Information|2019-05-26Работает он как с виртуальными, так и реальными таблицами:
sqlite> SELECT * FROM dates LIMIT 3; 1|1|2019-05-25 2|3|2019-05-26 3|7|2019-05-26 sqlite> SELECT * FROM dates LIMIT 2, 3; 3|7|2019-05-26 4|8|2019-05-30 5|9|2019-06-01Если после LIMIT указано два числа, то первое обозначает смещение, и только второе – количество выбираемых строк. Кроме того, можно указывать смещение с помощью ключевого слова OFFSET:
sqlite> SELECT * FROM dates LIMIT 3 OFFSET 2; 3|7|2019-05-26 4|8|2019-05-30 5|9|2019-06-01X Скрыть Наверх
Введение в реляционные базы данных. SQLite
Представления
Представление — это виртуальная таблица, содержимое которой определяется запросом. Как и таблица, представление состоит из ряда именованных столбцов и строк данных. Пока представление не будет проиндексировано, оно не существует в базе данных как хранимая совокупность значений. Строки и столбцы данных извлекаются из таблиц, указанных в определяющем представление запросе и динамически создаваемых при обращениях к представлению.
Представление выполняет функцию фильтра базовых таблиц, на которые оно ссылается. Определяющий представление запрос может быть инициирован в одной или нескольких таблицах или в других представлениях текущей или других баз данных. Кроме того, для определения представлений с данными из нескольких разнородных источников можно использовать распределенные запросы. Это полезно, например, если нужно объединить структурированные подобным образом данные, относящиеся к разным серверам, каждый из которых хранит данные конкретного отдела организации.
Представления обычно используются для направления, упрощения и настройки восприятия каждым пользователем информации базы данных. Представления могут использоваться как механизмы безопасности, давая возможность пользователям обращаться к данным через представления, но не предоставляя им разрешений на непосредственный доступ к базовым таблицам, лежащим в основе представлений. Представления могут использоваться для обеспечения интерфейса обратной совместимости, моделирующего таблицу, которая существует, но схема которой изменилась. Представления также можно использовать при копировании данных в SQL Server и из нее для повышения производительности и секционирования данных.
Типы представлений
Помимо стандартной роли базовых пользовательских представлений SQL Server предоставляет следующие типы представлений, которые служат специальным целям в базе данных.
Индексированные представления
Индексированным называется материализованное представление. Это означает, что определение представления вычисляется, а результирующие данные хранятся точно так же, как и таблица. Индексировать представление можно, создав для него уникальный кластеризованный индекс. Индексированные представления могут существенно повысить производительность некоторых типов запросов. Индексированные представления эффективнее всего использовать в запросах, группирующих множество строк. Они не очень хорошо подходят для часто обновляющихся базовых наборов данных.
Секционированные представления
Секционированным называется представление, соединяющее горизонтально секционированные данные набора таблиц-элементов, находящихся на одном или нескольких серверах. При этом данные выглядят так, как будто находятся в одной таблице. Представление, которое объединяет таблицы-члены в том же экземпляре SQL Server, является локальным секционированием.
Системные представления
Системные представления предоставляют доступ к метаданным каталога. Системные представления можно использовать для возврата сведений об экземпляре SQL Server или объектах, определенных в экземпляре. Например, можно запросить sys.databases представление каталога, чтобы получить сведения о пользовательских базах данных, доступных в экземпляре. Дополнительные сведения см. в разделе "Системные представления" (Transact-SQL).
Распространенные задачи представления
В следующей таблице приведены ссылки на общие задачи, связанные с созданием или изменением представления.
Задачи, связанные с представлениями Тема Описывает, как создать представление. Создание представлений Описывает, как создать индексированное представление. Создание индексированных представлений Описывает, как изменить определение представления. Изменение представлений Описывает, как изменить данные через представление. Изменение данных через представление Описывает, как удалить представление. Удаление представлений Описывает, как получить сведения о представлении, например его определение. Получение сведений о представлении Описывает, как переименовать представление. Переименование представлений Связанный контент
- Создание представлений для столбцов XML
- CREATE VIEW (Transact-SQL)
- GRANT, предоставление разрешений на объект (Transact-SQL)
- Безопасность на уровне строк
Что такое представления VIEWS в базах данных? И зачем они нужны?
Многие начинающие администраторы и программисты баз данных, да и просто системные администраторы, которые обслуживают некую базу данных, не знают что такое представление или VIEWS, и зачем вообще они нужны. Сейчас мы попробуем разобраться, что же это такое.
Начнем с небольшой теории.
Что такое VIEWS?
VIEWS – представление, или, например, в PostgreSQL они называются «Видами» (т.е. Вид), русские админы часто называют их вьюхами, т.е. одно представление это вьюшка. Она представляет собой хранимый запрос к базе данных, также ее можно назвать виртуальная таблица, но в этой таблице данные не хранятся, а хранится только сам запрос. Но, тем не менее, к вьюшке можно обращаться как к обычной таблице и извлекать данные из нее.
Мы с Вами говорим о базах данных, в которых используется язык SQL, исходя из этого, можно сделать вывод, что VIEWS можно создать на данном языке. Это очень распространенный объект в базе данных, поэтому во всех СУБД есть возможность создавать представления в графическом интерфейсе путем нажатия кнопки «Создать представление» или «Создать новый вид», а также, конечно же, с использованием инструкции «CREATE VIEW».
Но перед тем как учиться создавать вьюшки, давайте поговорим о том, зачем они нужны и какие преимущества они нам дадут.
Зачем нужны представления?
Одним из главных достоинством представлений является то, что они сильно упрощают взаимодействие с данными в базе данных. Допустим, Вам необходимо каждый раз делать сложную по своей структуре выборку, а как Вы знаете, запрос на выборку может быть, ну просто очень сложный и этому нет предела. И если не было бы вьюшек, то Вам приходилось бы каждый раз запускать этот запрос, или даже его модифицировать, например, для вставки условий. А так как у нас есть такие объекты как представления, нам этого делать не придется. Мы просто на всего создадим одну вьюшку, и потом уже к ней будем обращаться с помощью уже простых запросов, которые также можно делать сложными, если это необходимо. Например, вьюшки также можно объединять с другими таблицами или другими представлениями.
К представлениям можно обращаться и из приложений, например, Вам нужно вывести какой-нибудь отчет, формирование которого требует каких-то расчетов, это легко можно реализовать путем написания необходимого запроса (в котором и будут рассчитываться данные, например из разных таблиц) и вставке этого запроса во вьюшку. А потом уже обращаться к этой вьюшке, например с помощью такого простого запроса как:
SELECT * FROM TableNameКак создать представление VIEWS?
Теперь давайте поговорим о том, как создавать эти самые вьюшки. Во-первых, сразу скажу, что для этого необходимы знания SQL (для построения сложных запросов). Во-вторых, Вы за ранее должны определиться, что Вам необходимо вывести в результате того или иного запроса. Рассматривать процесс создания представления путем нажатия кнопок мы не будем, так это достаточно просто. Мы рассмотрим создание VIEWS с использованием языка SQL (хотя и это тоже просто).
Например, в PostgreSQL запрос создания представления будет выглядеть так:
CREATE VIEW MyView AS SELECT id, name, org FROM work.TableName
- CREATE VIEW – команда создания представления;
- MyView – название Вашей будущей вьюшки;
- SELECT id, name, org FROM work.TableName – запрос на выборку.
Здесь мы использовали простой запрос на выборку, Вы в свою очередь можете писать любой запрос, даже с объединением нескольких таблиц и условий к ним.
Полный синтаксис команды CREATE VIEW (в PostgreSQL) выглядит следующим образом:
CREATE [OR REPLACE] [ALGORITHM = ] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]После того, как Вы создали представление, Вы можете к нему обращаться. А данные, которые будет выводить вьюшка, будут изменяться в зависимости от изменений данных в исходных таблицах, так как данные во вьюшке формируются при обращении к этому представлению. Исходя из этого, можно сделать вывод, что данные, которые выводит вьюшка, будут всегда актуальные.
У меня все, надеюсь, теперь у Вас есть представление о том, что такое VIEWS, пока!