| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > Можно коротко объяснить зачем нужны представления? |
| Автор: phpmas 26.6.2011, 10:48 |
| Можно коротко объяснить зачем нужны представления? |
| Автор: Zloxa 26.6.2011, 10:54 |
они предоставляют возможность абстрагировать клиентское приложение от физического представления данных. |
| Автор: Akella 28.6.2011, 11:16 |
| Можно сделать очень сложный запрос, а на клиенте выполнить просто select .... from <представление>. Клиент может всё время выполнять select .... from <представление> и даже не зная о том, что на сервер условия запроса могут меняться. Допустим есть таблица с именем Table1 и представление с точно таким же именем. Если выполнить select .... from Table1, то запрос обратиться НЕ к таблице, а к представлению. Добавлено через 4 минуты и 4 секунды Представление, это как бы поименованный запрос. |
| Автор: Akina 28.6.2011, 12:24 |
| Простой пример... надо изменить структуру БД. Если всё завязано непосредственно на таблицы, то изменение структуры ведёт к переписыванию всех запросов, задеваемых изменением. Пример - содержимое некоего поля вынесено в таблицу-справочник, и вместо текстового поля у нас теперь ссылка на эту таблицу... и во все запросы приходится добавлять эту таблицу с соотв. джойном, вносить соотв. правки... застрелиться. Если всё завязано на представления - достаточно после изменения структуры откорректировать текст запроса представления так, чтобы оно отдавало тот же вид исходных данных на базе изменившихся таблиц... и (в первом приближении) всё. Т.е. вносим нужный джойн в представление, а запросы к представлению не изменяются. |
| Автор: Zloxa 28.6.2011, 21:37 |
Даже когда исправить надо лишь план запроса? На моей практике... Внешние системы и репортеры, в абсолютном своем большинстве смотрят в базу исключительно через интерфейсные вьюхи. Для разраба преимущества такого подхода еще и в том, что в случае уточнения схемы данных поврежденные объекты становятся известны сразу, а не в процессе исполнения. Клиентские же приложения, не всякий раз смотрят во вьюхи, но как правило. Особенно в случаях, когда модификация таблы влечет за собой сколь нибудь сложные и обильные пересчеты. Приходится ее выполнять средствами instead of триггеров, как минимум для того, чтобы управлять порядоком захвата блокировок и избегать дедлоков. /* Впрочем, это еще и средство обхода специфичного для оракла ограничения на чтение мутирующих источников данных */ |
| Автор: Akina 28.6.2011, 22:07 | ||||
А я для кого пишу, что
? |
| Автор: Zloxa 29.6.2011, 08:44 |
| Akina, я полагаю Frees имел в виду что в подавляющем большинстве случаев, при уточнении схемы данных приходится менять и структуру вьюхи - набор возвращаемых ею полей. И это, в свою очередь, влечет за собой перекомпиляцию приложения. |
| Автор: Akina 29.6.2011, 11:49 |
Гм... вот это как раз странно. И в этом случае как раз от наличия вьюхи нет никакого профиту. Но такое возможно лишь, если появляется новая сущность или новый атрибут сущности, вроде - а это уже далеко не изменения в способе хранения данных (приведение структуры из дебильного вида к каноническому не рассматриваем). |
| Автор: Zloxa 29.6.2011, 12:02 | ||
Ну да.. и именно такого рода уточнения схемы превалируют на практике ))) И именно по этой причине может показаться что выставлять оголтело вьюхи клиентам не имеет особого смысла. Казалось бы, если потребуется радикальным образом поменять структуру хранения, ничего не мешает сделать alter table rename, create veiw as select * from ..... Однако, из той же практики, средства доступа, бывает, несколько по разному рабтают с вьюхами и таблами. И когда мы таблу подменяем вьюхой, приложение перестает работать. Потому я, лично, предпочитаю сразу выставить гуйпрогеру вьюхи, чтобы не ограничиать себя в дальнейшем и, если чо, не идти к нему с поклоном, "мол прости засрантса, не подумал сразу, ты уж перепши там, чтоб обратно все заработало" |
| Автор: Frees 29.6.2011, 12:53 | ||
Именно это я и хотел сказать. а разве план запроса из view не зависит от того как запрашиваешь? например дописал условие к селекту из view план поменяется.. или я неправ? |
| Автор: Zloxa 29.6.2011, 13:01 |
| [чушь. не правильно понял вопрос] Добавлено через 6 минут и 9 секунд Ты прав. Но на план модифицированного запроса тоже можно влиять изменяя текст вьюхи. Хинты, альтерварианты и пр... |