Розріз даних
Розріз даних[1] (англ. View) в теорії баз даних — це збережений результатний набір запиту. Він доступний як віртуальна таблиця, що складається з результатів запиту. На відміну від звичайних таблиць в реляційній БД, розріз даних не є частиною схеми даних: це динамічна, віртуальна таблиця що є результатом обробки даних з бази. Зміна даних в таблицях бази даних змінює їх у відповідних розрізах.
Є два види розрізів: віртуальні (англ. virtual view) та матеріалізовані (англ. materialized view).
Віртуальні розрізи насправді не зберігають результат виконання запиту в базі даних, а щоразу динамічно обчислюють. Матеріалізовані розрізи — зберігаються, як і звичайні таблиці. Матеріалізовані розрізи мають одну проблему: вони повинні б були оновлюватись при кожному оновлені таблиць від яких вони залежать, проте це не так. Відповідно оновлення табличок, від яких вони залежать, буде проходити повільніше. Як вирішення цієї проблеми можна вказати, що матеріалізовані розрізи оновлюватимуться щодня (щогодини). Таким чином в матеріалізованих розрізах будуть зберігатися майже актуальні дані зі швидким доступом.
Спосіб створення і вміст розрізу
Типовим способом створення розрізу даних для СУБД, що підтримують мову запитів SQL, є зв'язування розрізу з певним SQL-запитом. Відповідно, вміст розрізу— це результат виконання цього запиту, а можливості побудови розрізу обмежуються тільки ступенем складності діалекту SQL, підтримуваного конкретної СУБД. Так, для типових СУБД, таких як PostgreSQL, Interbase, Firebird, Microsoft SQL Server, Oracle, розріз може містити:
- підмножина записів з таблиці БД, що відповідає певним умовам (наприклад, при наявності однієї таблиці «Люди» можна створити два розрізи даних «Чоловіки» і «Жінки», в кожному з яких будуть записи тільки про людей відповідної статі);
- результат обробки даних таблиці певними операціями (наприклад, розріз може містити всі дані реальної таблиці, але з приведенням рядків у верхній регістр і обрізаними початковими і кінцевими пробілами);
- результат об'єднання (join) кілька таблиць (наприклад, при наявності таблиць «Люди», «Адреса», «Вулиця», «Фірма та організація» можлива побудова розрізу, яка буде виглядати як таблиця, для кожної людини містить його особисті дані, адреса, місце проживання, назва організації, де він працює, і адресу цієї організації);
- результат злиття декількох таблиць з однаковими іменами і типами полів, коли в розрізі потрапляють всі записи кожної з таблиць, які зливаються (можливо, з виключенням дублювання);
- результат групування записів в таблиці (наприклад, при наявності таблиці «витрати» з записами по кожному платежу можна побудувати розріз, що містить засоби, витрачені на кожну окрему статтю витрат);
Розрізи даних використовуються в запитах до БД тим же чином, як і звичайні таблиці. У разі SQL-СУБД ім'я розрізу може перебувати в SQL-запиті на місці ім'яі таблиці (в реченні FROM). Запит з розрізом обробляється СУБД так само, як запит, в якому на місці ім'я розрізу знаходиться підзапит, який визначає цей розріз. При цьому СУБД з розвиненими можливостями оптимізації запитів перед виконанням запиту з розрізу можуть проводити спільну оптимізацію запиту верхнього рівня і запиту,що визначає розріз даних, з метою мінімізації витрат на вибірку даних.
- Розріз приховує від прикладної програми складність запитів і саму структуру таблиць БД. Коли прикладній програмі потрібна таблиця з певним набором даних, вона робить найпростіший запит з підготовленого розрізу. При цьому навіть якщо для отримання цих даних потрібен надзвичайно складний запит, сама програма цього запиту не містить.
- Використання розрізу даних дозволяє відокремити прикладну схему подання даних від схеми зберігання. З точки зору прикладної програми структура даних відповідає тим розрізам, з яких програма ці дані витягує. Насправді дані можуть зберігатися зовсім іншим чином, досить лише створити розріз, що відповідає потребам програми. Поділ дозволяє незалежно модифікувати прикладну програму і схему зберігання даних: як при зміні структури фізичних таблиць, так і при зміні програми досить змінити розріз відповідним чином. Зміна програми не зачіпає фізичні таблиці, а зміна фізичної структури таблиць не вимагає коректування програми.
- За допомогою розрізів забезпечується ще один рівень захисту даних. Користувачеві можуть надаватися права тільки на розріз, завдяки чому він не буде мати доступу до даних, що знаходяться в тих же таблицях, але не призначених для нього.
- Оскільки SQL-запит, що вибирає дані розрізу, зафіксований на момент його створення, СУБД отримує можливість застосувати до цього запиту оптимізацію або попередню компіляцію, що позитивно позначається на швидкості звернення до поданням, в порівнянні з прямим виконанням того ж запиту з прикладної програми.
Примітки
- Е. М. Пройдаков, Л. А. Теплицький. Англо-Український тлумачний словник з обчислювальної техніки, Інтернету і програмування. — СофтПрес, 2005. — С. 552. — ISBN 966-530-070-9.
Додаткові джерела
- Едуард Михайлович Пройдаков, Леонід Абрамович Теплицький. Англо-український тлумачний словник з обчислювальної техніки, Інтернету і програмування : 14 000 термінів, абревіатур та акронімів / гол. ред. Г.І. Артеменко. — 2-е вид., доп. і доопр. — Київ : ВД СофтПрес, 2006. — 823 с. — ISBN 966-530-027-X.
- Materialized query tables in DB2
- Views in Microsoft SQL Server
- Views in MySQL
- Views in PostgreSQL
- Views in SQLite
- Views in Oracle 11.2
- Views in CouchDB
- Views in NuoDB
- Materialized Views in Oracle 11.2