Возникает функциональная зависимость между полями, избыточность данных. Например, можно вычислить сумму товаров по количеству и цене, но здесь всё слишком просто.
Являются ли представления медленнее, чем обычные таблицы? Хранятся ли они на диске или дёргаются каждый раз при запросе? При каких условиях они пересчитываются, если хранятся?
Они могут быть даже материализованными, для них могу быть созданы триггеры позволяющие делать insert и update и так далее. Но суть от этого не меняется. Именованый запрос.
Являются ли представления медленнее, чем обычные таблицы? Хранятся ли они на диске или дёргаются каждый раз при запросе
В оракле бывают обычные view и материализованные. Обычные работают так: когда приходит запрос к view'шке, он объединяется с запросом, который создал view и далее строится обычный план выполнения запроса (с оптимизациями в том числе). Материализованные VIEW - это типа таблиц, в которые эти данные селектятся и сохраняются на диск (соответственно материализованные view нужно обновлять).
В Postres, view не бывает материализованным (http://www.postgresql.org/docs/current/static/sql-createview.html), но, наверняка это можно устроить другими способами. Кроме того, во view (Postgres) нельзя писать, только читать. Как строится план выполнения select, обращенного к view в Postgres, я не нашел.
Обычные работают так: когда приходит запрос к view'шке, он объединяется с запросом, который создал view и далее строится обычный план выполнения запроса (с оптимизациями в том числе).
В постгрессе оно в теории так и работает, но на старых версиях они довольно плохо оптимизировались, а в новых вроде нет разницы между view и subselect для оптимизатора