Для чего нужны виды? - PullRequest
       28

Для чего нужны виды?

82 голосов
/ 18 октября 2008

Я просто пытаюсь получить общее представление о том, для чего используются представления в RDBMS. То есть я знаю, что такое вид и как его создать. Я также знаю, для чего я их использовал в прошлом.

Но я хочу убедиться, что у меня есть полное понимание того, для чего представление полезно и для чего представление не должно быть полезным. Более конкретно:

  1. Для чего полезен вид?
    • Есть ли ситуации, в которых возникает соблазн использовать представление, когда вы не должны его использовать?
    • Зачем вам использовать представление вместо чего-то вроде табличной функции или наоборот?
    • Существуют ли какие-либо обстоятельства, которые могут быть полезны для вида, которые не очевидны с первого взгляда?

(И для справки, некоторые из этих вопросов намеренно наивны. Это частично проверка концепции.)

Ответы [ 14 ]

2 голосов
/ 01 октября 2010

Представление - это просто сохраненный оператор SELECT. Думайте о представлениях как о функциях библиотеки.

1 голос
/ 21 октября 2008

Я помню очень длинный SELECT, в котором участвовало несколько UNION. Каждый UNION включал в себя соединение с таблицей цен, которая была создана на лету с помощью SELECT, который был довольно длинным и трудным для понимания. Я думаю, что было бы неплохо иметь представление о том, чтобы создать таблицу цен. Это сократило бы общий SELECT примерно на половину.

Я не знаю, будет ли БД оценивать представление один раз или один раз каждый раз вызывался. Кто-нибудь знает? Если первое, использование представления улучшит производительность.

1 голос
/ 18 октября 2008

Я хотел бы выделить использование представлений для отчетов. Часто возникает конфликт между нормализацией таблиц базы данных для повышения производительности, особенно для редактирования и вставки данных (использование OLTP), и денормализацией для уменьшения количества объединений таблиц для запросов для отчетов и анализа (использование OLAP). По необходимости OLTP обычно побеждает, потому что ввод данных должен иметь оптимальную производительность. Таким образом, создание представлений для оптимальной производительности отчетов может помочь удовлетворить оба класса пользователей (средства ввода данных и средства просмотра отчетов).

0 голосов
/ 15 августа 2016

В любое время вам нужно [my_interface]! = [User_interface].

Пример:

ТАБЛИЦА A:

  • ID
  • информация

ПРОСМОТР ТАБЛИЦЫ A:

  • Информация о клиенте

это способ, которым вы можете скрыть идентификатор от клиента и переименовать информацию в более подробное имя одновременно.

Представление будет использовать базовый индекс для идентификатора первичного ключа, поэтому вы не увидите потери производительности, просто улучшите абстракцию запроса select.

...