Коли використовувати вигляд замість таблиці?


108

Коли насправді перегляд слід використовувати над фактичною таблицею? Які вигоди я повинен очікувати, що це призведе?

В цілому, які переваги використання виду над столом? Чи не слід розробити таблицю так, як має виглядати в першу чергу погляд?

Відповіді:


80

О, є багато відмінностей, які вам потрібно буде врахувати

Кількість переглядів:

  1. Погляди забезпечують абстрагування таблиць. Ви можете легко додавати / видаляти поля у поданні, не змінюючи основної схеми
  2. Перегляди можуть легко моделювати складні приєднання.
  3. Перегляди можуть приховувати від вас речі, характерні для бази даних. Наприклад, якщо вам потрібно зробити кілька перевірок за допомогою функції Oracles SYS_CONTEXT або багатьох інших речей
  4. Ви можете легко керувати своїми ГРАНТАМ безпосередньо на переглядах, а не на фактичних таблицях. Це простіше керувати, якщо ви знаєте, що певний користувач може отримати доступ лише до представлення даних.
  5. Перегляди можуть допомогти вам із зворотною сумісністю. Ви можете змінити основну схему, але погляди можуть приховати ці факти від певного клієнта.

Перегляди для вставки / оновлень:

  1. Ви можете вирішити проблеми безпеки з видами, використовуючи таку функціональність, як пункт Oracle "З CHECK OPTION" безпосередньо у поданні

Недоліки

  1. Ви втрачаєте інформацію про відносини (первинні ключі, зовнішні ключі)
  2. Не очевидно, чи зможете ви вставити / оновити представлення даних, оскільки це перегляд приховує від вас основні об'єднання

3
Швидке запитання: чи перегляди "постійні", чи вони лише тривають протягом сеансу? Причина Я запитую: у нас є система, яка іноді знижується посеред тривалого запуску коду. Я пом'якшую це, кусаючи частини коду в проміжні таблиці, які зберігають проміжні результати. Отже, якщо система підкорюється до завершення коду, мені потрібно лише забрати, починаючи з останньої збереженої темп-таблиці. Я можу перейти до використання поглядів, якби вони пропонували однакову постійність. Інакше я просто продовжую робити те саме, і скидаю темпи в кінці пробігу. Дякую!
ouonomos

8
@ouonomos: Нормальний вигляд не містить даних. Це просто збережений оператор SQL, тобто перегляд базових даних. Деякі бази даних (наприклад, Oracle, PostgreSQL) підтримують матеріалізовані представлення, які тимчасово зберігають "view" в іншій таблиці для швидшого доступу. Це робиться для прискорення доступу до читання, коли перегляд складний. Але це не допоможе вам у вашому випадку, оскільки матеріалізований вигляд все ще є поданням, а не самим даним. Можливо, ваш підхід добре.
Лукас Едер

44

Перегляди можуть:

  • Спростіть складну структуру таблиці
  • Спростіть свою модель безпеки, дозволяючи фільтрувати конфіденційні дані та призначати дозволи на простіший спосіб
  • Дозволяють змінювати логіку та поведінку без зміни структури виводу (вихід залишається таким же, але базовий SELECT може суттєво змінитися)
  • Підвищення продуктивності (Sql Server indexed Views)
  • Запропонуйте оптимізацію конкретних запитів із видом, який в іншому випадку може бути складним

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

Крім того, запитання "які переваги використання виду над таблицею?" - не є великим порівнянням. Не можна обійтися без таблиць, але можна обійтися і без переглядів. Вони існують із зовсім іншої причини. Таблиці - це конкретна модель, а вигляд - абстрагований, добре, Вид.


1
+1 Перегляди частково є інструментом, який пом'якшує складності, що виникають внаслідок ефективної, нормалізованої моделі, дозволяючи абстрагувати цю складність.
metdos

34

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

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

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

Перегляди дуже корисні при рефакторингу баз даних.

Перегляди неприйнятні, коли ви використовуєте представлення для виклику представлень, які можуть призвести до жахливої ​​продуктивності (принаймні, на SQL Server). Ми майже втратили клієнта з багатомільйонними доларами, тому що хтось вирішив абстрагувати базу даних таким чином, а продуктивність була жахливою, а очікування часті. Нам також довелося платити за виправлення, а не за клієнта, оскільки проблема з продуктивністю була повністю наша вина. Коли перегляди викликають представлення даних, вони повинні повністю генерувати базовий вигляд. Я бачив це там, де представлення називалося поданням, яке називалося переглядом, і було створено стільки мільйонів записів, щоб побачити три необхідні користувачеві в кінцевому рахунку. Я пам'ятаю, що на один з цих переглядів знадобилося 8 хвилин, щоб просте підрахунок (*) записів. Погляди, що викликають погляди, є надзвичайно поганою ідеєю.

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


1
Не знав, що з переглядом викликів перегляду виникла проблема з продуктивністю. Це здається дивним. Це не правильно обробляється оптимізатором запитів? Яка версія SQL Server використовувалася у вашому випадку?
Патрік Онорез

7

Перегляди зручні, коли вам потрібно вибрати з декількох таблиць або просто отримати підмножину таблиці.

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

Перегляди - це розділення, що дозволяє переглядати дані в таблицях інакше, ніж вони зберігаються.


7

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


6

Ви повинні розробити свою таблицю БЕЗ врахування поглядів.
Окрім збереження приєднань та умов, Views мають перевагу в продуктивності: SQL Server може обчислювати та зберігати свій план виконання у представленні, а отже, робити його швидше, ніж оперативні SQL-оператори "на льоту".
Перегляд також може полегшити вашу роботу щодо доступу користувачів на рівні поля.


5

Перш за все, як випливає з назви, погляд непорушний. ось тому, що представлення не що інше, як віртуальна таблиця, створена із збереженого запиту в БД. Через це у вас є деякі характеристики поглядів:

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

тож є газильйон випадків використання, для яких перегляди краще підходять, ніж таблиці, подумайте лише про показ активних користувачів на веб-сайті. перегляд буде кращим, оскільки ви працюєте лише над підмножиною даних, які є насправді у вашій БД (активні та неактивні користувачі)

перегляньте цю статтю

сподіваюся, що це допомогло ..


2

За даними Вікіпедії ,

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

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

  • Перегляди можуть приєднуватися та спрощувати кілька таблиць в одну віртуальну таблицю.

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

  • Перегляди можуть приховати складність даних. Наприклад, представлення може відображатися як Sales2000 або Sales2001, прозоро розбиваючи фактичну базову таблицю.

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

  • Перегляди можуть забезпечити додаткову безпеку , залежно від використовуваного двигуна SQL.

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