Когда использовать представление вместо таблицы?
Когда следует использовать представление над фактической таблицей? Какие выгоды я должен ожидать от этого?
В целом, каковы преимущества использования представления над таблицей? Разве я не должен спроектировать таблицу так, как должен выглядеть вид в первую очередь?
8 ответов:
О, есть много различий, которые вам нужно будет рассмотреть
Виды для выбора:
Представления обеспечивают абстракцию над таблицами. Вы можете легко добавлять/удалять поля в представлении без изменения базовой схемы Представления могут легко моделировать сложные соединения.
- представления могут скрывать от вас информацию, относящуюся к конкретной базе данных. Например, если вам нужно сделать некоторые проверки с помощью функции Oracles SYS_CONTEXT или многих других вещей
- Вы можете легко управлять своими грантами непосредственно на представления, а не фактические таблицы. Это проще сделать, если вы знаете, что определенный пользователь может получить доступ только к представлению.
Представления могут помочь вам с обратной совместимостью. Вы можете изменить базовую схему, но представления могут скрыть эти факты от определенного клиента.Просмотры для вставки / обновления:
- Вы можете решать проблемы безопасности с представлениями, используя такую функциональность, как предложение Oracle "WITH CHECK OPTION" непосредственно в представлении. вид
Недостатки
- вы теряете информацию об отношениях (первичные ключи, внешние ключи)
- не очевидно, сможете ли вы вставить / обновить представление, потому что представление скрывает от вас свои базовые соединения
Представления могут:
- упрощение сложной структуры таблицы
- упростите свою модель безопасности, позволяя фильтровать конфиденциальные данные и назначать разрешения более простым способом
- позволяет изменять логику и поведение без изменения структуры вывода (вывод остается тем же, но базовый выбор может значительно измениться)
- Повышение производительности (индексированные представления Sql Server)
- предложите конкретную оптимизацию запросов с учетом того, что может быть трудно собрать иначе
И не следует создавать таблицы, соответствующие представлениям. Ваша базовая модель должна заботиться об эффективном хранении и извлечении данных. Представления-это отчасти инструмент, который смягчает сложности, возникающие из эффективной, нормализованной модели, позволяя вам абстрагировать эту сложность.
Также, спрашивая: "каковы преимущества использования представления над таблицей? - это не слишком удачное сравнение. Вы не можете идти без столов, но вы можете сделать без взглядов. Они существуют по совершенно разным причинам. Таблицы-это конкретная модель, а представления-абстрактное, ну, представление.
Представления приемлемы, когда необходимо убедиться, что сложная логика соблюдается каждый раз. Например, у нас есть представление, которое создает необработанные данные, необходимые для всей финансовой отчетности. Если все отчеты используют это представление, все работают с одним и тем же набором данных, а не один отчет использует один набор соединений, а другой забывает использовать один, который дает разные результаты.
Представления допустимы, если требуется ограничить пользователей определенным подмножеством данных. Например, если вы это сделаете не удалять записи, а только помечать текущую как активную и более старые версии как неактивные, вы хотите использовать представление для выбора только активных записей. Это позволяет избежать того, что люди забывают поместить предложение where в запрос и получают плохие результаты.
Представления можно использовать для обеспечения того, чтобы пользователи имели доступ только к набору записей - например, представление таблиц для конкретного клиента и отсутствие прав доступа к таблицам может означать, что пользователи для этого клиента могут видеть только данные для этого клиента.
Представления очень полезны при рефакторинге баз данных.
Представления недопустимы, когда вы используете представления для вызова представлений, которые могут привести к ужасной производительности (по крайней мере, в SQL Server). Мы чуть не потеряли многомиллионного клиента, потому что кто-то решил абстрагировать базу данных таким образом, и производительность была ужасающей, а таймауты частыми. Мы должны были заплатить за исправление тоже, а не клиент, так как проблема производительности была полностью нашей виной. Когда взгляды называют представления, они должны полностью генерировать базовое представление. Я видел это, когда представление называлось представлением, которое называлось представлением, и так много миллионов записей были сгенерированы, чтобы увидеть три, в которых пользователь в конечном счете нуждался. Я помню, что один из этих просмотров занял 8 минут, чтобы сделать простой подсчет (*) записей. Виды, вызывающие виды, - это крайне плохая идея.
Представления часто не рекомендуется использовать для обновления записей, так как обычно вы можете обновить только поля из той же таблицы (опять же это SQL Server, другие базы данных могут отличаться). Если это так, то в любом случае имеет смысл напрямую обновить таблицы, чтобы вы знали, какие поля доступны.
Представления удобны, когда вам нужно выбрать одну из нескольких таблиц или просто получить подмножество таблицы.
Вы должны сконструировать свои таблицы таким образом, чтобы ваша база данных была хорошо нормализована (минимальное дублирование). Это может сделать запрос несколько затруднительным.
ПредставленияПредставляют собой некоторое разделение, позволяющее просматривать данные в таблицах иначе, чем они хранятся.
Обычная практика заключается в том, чтобы скрыть соединения в представлении, чтобы представить пользователю более денормализованную модель данных. Другие способы использования включают безопасность (например, скрытие определенных столбцов и / или строк) или производительность (в случае материализованных представлений)
Вы должны спроектировать свою таблицу без учета представлений.
Помимо сохранения соединений и условий, представления имеют преимущество в производительности: SQL Server может вычислять и сохранять свой план выполнения в представлении и, следовательно, делать это быстрее, чем операторы SQL "на лету".
Просмотр также может облегчить вашу работу в отношении доступа пользователей на уровне полей.
Прежде всего, как следует из названия, представление является неизменным. это потому, что представление-это не что иное, как виртуальная таблица, созданная из сохраненного запроса в БД. Из-за этого у вас есть некоторые характеристики взглядов:
- Вы можете показать только подмножество данных
- Вы можете объединить несколько таблиц в одно представление
- Вы можете агрегировать данные в представлении (выберите count)
- представление фактически не содержит данных, они не нуждаются в табличном пространстве, так как они являются виртуальными агрегациями данных. базовые таблицы
Таким образом, существует множество вариантов использования, для которых представления лучше подходят, чем таблицы, просто подумайте о том, чтобы отображать только активных пользователей на веб-сайте. представление было бы лучше, потому что вы работаете только с подмножеством данных, которые фактически находятся в вашей БД (активные и неактивные пользователи)
Проверьте эту статью
Надеюсь, это помогло..
Согласно Википедии,
Представления могут иметь много преимуществ перед таблицами:
- Представления могут представлять подмножество данных, содержащихся в таблице.
Представления могут ограничивать степень воздействия нижележащих таблиц на внешний мир: данный пользователь может иметь разрешение на запрос представления, в то время как доступ к остальной части базовой таблицы запрещен.
Представления могут объединять и упрощать несколько таблиц в единую виртуальную таблицу.
Представления могут выступать в качестве агрегированных таблиц , где компонент database engine агрегирует данные (sum, average и т. д.) и представляет вычисленные результаты как часть данных.
Представления могут скрывать сложность данных. Например, представление может выглядеть как Sales2000 или Sales2001, прозрачно разделяя фактическую базовую таблицу.
Представления занимают очень мало места для хранения ; база данных содержит только определение представления, а не копию всех данных, которые оно представляет.
Представления могут обеспечивать дополнительную безопасность , в зависимости от используемого механизма SQL.
Comments