Що є вагомою причиною використовувати представлення даних SQL?


98

Я читаю біблію SQL Server 2008 і висвітлюю розділ подань. Але автор справді не пояснює мету поглядів. Що корисно використовувати для переглядів? Чи слід використовувати їх на своєму веб-сайті та які переваги від них?


Не могли б ви надати мені файли бази даних цієї книги "Біблія SQL Server 2008"? Веб-сайт автора мертвий, і я не можу з ним зв’язатися.

Відповіді:


92

Іншим використанням, про яке, схоже, не згадувала жодна з попередніх відповідей, є простіший розгортання змін структури таблиці.

Скажімо, ви хочете вилучити таблицю ( T_OLD), що містить дані для активних користувачів, і замість цього використовувати нову таблицю з подібними даними (з іменем T_NEW), але таку, яка містить дані як для активних, так і для неактивних користувачів, з одним додатковим стовпцем active.

Якщо у вашій системі є мільйони запитів, які мають SELECT whatever FROM T_OLD WHERE whatever, у вас є два варіанти розгортання:

1) Холодна Туреччина - Змініть БД і одночасно змініть, протестуйте та випустіть численні фрагменти коду, що містять зазначений запит. ДУЖЕ важко зробити (або навіть скоординувати), дуже ризиковано. Погано

2) Поступовий - змініть БД, створивши T_NEWтаблицю, опустивши T_OLDтаблицю і замість цього створивши виклик VIEW,T_OLD що імітує T_OLDтаблицю на 100% (наприклад, запит на подання є SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Це дозволить вам уникнути випускати будь-який код , який в даний час вибирає з T_OLD, і зробити зміни мігрувати код з T_OLDдо T_NEWна дозвіллі.

Це простий приклад, інші набагато більше задіяні.

PS З іншого боку, ви, мабуть, мали мати API збережених процедур замість прямих запитів з T_OLD, але це не завжди так.


3
Я не знав терміну "API збережених процедур" та пов'язаних з ним плюсів / мінусів і знайшов цю статтю корисною: codinghorror.com/blog/2005/05/…
Джефф Відман

Вибачте, що запізнився на вечірку, але як щодо виступу. Якщо мені потрібні об’єднання в оригінальній таблиці, і замість цього я приєднаюся до подання, чи буде він використовувати найкращий план виконання?
Zikato

@Zikato так, якщо це індексований вигляд
LinkBerest

V Добрий показник
Афнан Ахмад

47

(Скопійовано з першого навчального посібника, який з’явився під час пошуку в Google (посилання вже мертве), але він має всі переваги, які я би ввів сам.)

Перегляди мають такі переваги:

  • Безпека - подання можуть бути доступними для користувачів, тоді як базові таблиці безпосередньо не доступні. Це дозволяє DBA надавати користувачам лише ті дані, які їм потрібні, одночасно захищаючи інші дані в тій самій таблиці.
  • Простота - подання можна використовувати для приховування та повторного використання складних запитів.
  • Спрощення або уточнення імені стовпця - подання можуть використовуватися для надання псевдонімів імен стовпців, щоб зробити їх більш запам'ятовуються та / або змістовними.
  • Сходинка - подання можуть забезпечити сходинку в "багаторівневому" запиті. Наприклад, ви можете створити представлення запиту, що враховує кількість продажів, здійснених кожним продавцем. Потім ви можете здійснити запит у цьому поданні, щоб згрупувати продавців за кількістю продажів, які вони здійснили.

Оскільки мені подобається ваша відповідь і я не бачу багато сенсу додавати ще одну, чи можу я запропонувати два доповнення до вашого списку? Індексовані перегляди можуть підвищити продуктивність. Запуск оновлень проти подань, а не безпосередньо до таблиць, може надати більшої впевненості, що ви не будете неправильно оновлювати цю ключову виробничу таблицю :)
Девід Холл,

Ще один пункт у вашому списку: більшість адміністраторів баз даних хотіли б використовувати view, оскільки вони можуть налаштувати одне представлення, і в основному (не завжди) усі запити, що використовують цей погляд, будуть налаштовані.
Нітін Мідха

Це відповідь на 99% у моїй книзі.
John Steedman,

BTW @David бите посилання
Мануель Джордан

Останній пункт, чи не можна для цього використовувати часову таблицю?
Jiechao Wang

16

Деякі причини з Вікіпедії :

Перегляди можуть надати переваги перед таблицями:

  1. Представлення можуть представляти підмножину даних, що містяться в таблиці
  2. Представлення даних можуть об’єднувати та спрощувати декілька таблиць в одну віртуальну таблицю
  3. Представлення можуть діяти як агреговані таблиці , де механізм бази даних агрегує дані (сума, середнє значення тощо) і представляє обчислені результати як частину даних
  4. Перегляди можуть приховувати складність даних ; наприклад, подання може виглядати як Sales2000 або Sales2001, прозоро розділяючи фактичну базову таблицю
  5. Види займають дуже мало місця для зберігання ; база даних містить лише визначення подання, а не копію всіх представлених даних
  6. Залежно від використовуваного механізму SQL, подання можуть забезпечити додатковий захист
  7. Погляди можуть обмежувати ступінь впливу таблиці або таблиць на зовнішній світ

14

ПЕРЕГЛЯДИ можуть бути використані як багаторазові розділи SELECT / CODE, які можуть бути включені в інші вибірки / запити, до яких потрібно приєднатись, та використовувати різні різні фільтри, без необхідності відтворювати весь SELECT кожного разу.

Це також розміщує логіку в одному місці, так що вам не доведеться її змінювати по всій основі коду.

Погляньте

Вибір між збереженими процедурами, функціями, поданнями, тригерами, вбудованим SQL

Головна краса подання полягає в тому, що його можна використовувати як таблицю в більшості ситуацій, але на відміну від таблиці, він може інкапсулювати дуже складні обчислення та загальновживані об’єднання. Він також може використовувати майже будь-який об'єкт у базі даних, за винятком збережених процедур. Перегляди найбільш корисні, коли вам завжди потрібно приєднати один і той же набір таблиць, скажімо Замовлення з деталлю замовлення, щоб отримати поля підсумкового розрахунку тощо.


6
Будьте дуже обережні, роблячи це. Якщо ви використовуєте подання, які викликають інші подання, ви можете створити величезний бардак продуктивності.
HLGEM

10

Представлення - це рівень абстракції, і він робить те, що робить будь-який хороший рівень абстракції, включаючи інкапсуляцію схеми бази даних та захист від наслідків зміни внутрішніх деталей реалізації.

Це інтерфейс.


1
Поки ви не стекуєте подання на подання для подальшої абстракції.
HLGEM

Я думаю, що я фактично відмовився від будь-якого різновиду абстракції в реляційних базах даних. І я також не називаю збережені процедури із збережених процедур. :)
dkretz

3

Ось одне дуже поширене використання використання подань для обмеження сутності за деякими критеріями.

Таблиця: USERS містить усіх користувачів

Перегляд: ACTIVE_USERS містить усіх користувачів, крім тих, кого призупинено, заборонено, чекає активації та не відповідає жодним критеріям, які ви можете визначити в майбутньому як частину активних вимог. Це робить непотрібним видалення будь-яких рядків з таблиці USERS, якщо ви вирішите не робити, оскільки ACTIVE_USERS завжди може приховати небажані рядки.

Таким чином, ви можете використовувати таблицю на своїх сторінках керування користувачами, але решта програми може використовувати ACTIVE_USERS, оскільки вони можуть бути єдиними користувачами, які повинні мати можливість виконувати процеси та отримувати доступ / змінювати дані.


2

Представлення даних дозволяють комбінувати дані з декількох різних таблиць та форматувати їх (об’єднувати поля, вводити більш значущі назви полів тощо), щоб кінцевим користувачам було простіше. Вони є абстракцією моделі бази даних. Вони також можуть використовуватися для надання користувачам доступу до даних у таблиці, не надаючи їм безпосереднього доступу до самої таблиці.


2

Ось деякі з багатьох причин використання подання, а не таблиці безпосередньо

  • Простота - подання можна використовувати для приховування складних запитів.
  • Безпека - подання може приховати важливу інформацію від кінцевого користувача, створюючи подання для деяких вибраних стовпців
  • Безпека - безпечна таблиця, щоб змінити її структуру за допомогою VIEW.
  • Надмірність - зменшіть надлишковий код у кожній процедурі / запиті, використовуючи загальний вигляд.
  • Розрахунок - усі розрахунки можна зробити один раз за запитом перегляду.
  • Значуще ім’я - Таблиця може мати назву для ідентифікатора, наприклад tbl_org_emp_id, яка може мати псевдонім, наприклад, [No Employee No] або якесь значуще ім’я.

З imexploring.com


1

Невеликий перелік поширених причин / застосувань:

  • використовуйте їх для зміни формату або вигляду даних (тобто ви можете приєднати ім’я та прізвище разом)

    виконувати обчислення або інші пошуки даних

    денормалізувати дані (витягувати дані з декількох таблиць в одне місце)


-6

Погляди - це зло! Уникайте їх, якщо це можливо, і використовуйте лише з причини, зазначеної DVK - тимчасова міграція даних.

Ви повинні розуміти, що в базі даних із 100 таблицями важко запам’ятати призначення кожної таблиці. Тепер, якщо ви додасте сюди ще 300 переглядів, це стане повною халепою. Потім "любителі перегляду", як правило, використовують вкладені подання, а потім використовують вкладені подання у збережених процедурах. Зараз я особисто працюю з базою даних, де є подання, вкладені в глибину 4 рази! Отже, щоб зрозуміти найпростішу логіку збереженої процедури, я маю пройти спочатку всі подання.


8
-1 Перегляди хороші. Вони можуть стати злими, якщо ви використовуєте їх неналежним чином, але це стосується майже будь-чого.
NullUserException

1
Погляди можуть бути злими, якщо їх використовувати погано. Найчастіше люди, які використовують їх погано, здаються тими, хто використовує їх для абстрагування речей, а потім робить, як ви кажете, виклики поглядів, які викликають погляди, що викликають погляди до точки, де вам може знадобитися матеріалізувати 10 мільйонів реродів перед поверненням результату набір з 3. Перегляди таблиць, що безпосередньо викликають, можуть бути дуже корисними.
HLGEM

@HGLEM чи є спосіб обмежити перегляд дзвінків з інших подань?
Ігор Солойденко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.