Как кто использует VIEW?

Модераторы: kdv, CyberMax

ZanZag
Сообщения: 12
Зарегистрирован: 15 авг 2006, 00:38

Как кто использует VIEW?

Сообщение ZanZag » 22 авг 2006, 14:41

Наконец-то появился раздел гдеуместно задать сей вопрс, кои терзает меня уж давно как...

Читая книжки умныя не разу не встретил примера испльзования просмотра, из которого было б наглядно видно, что да в этом случае view облегчает жизнь или нечто подобное.

По тригерам, по процедурам, по UDF примеров много и довольно таки ярких.

Не пделитесь ли, как вы сами используете посмотры, и почему их используете. А то мне никак не прочувствовать сей бъект... он мне кажеться безполезным, а это порождает чувство непостигнутой истины и отдаления от просветленности ;)

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 авг 2006, 15:00

Не чеши, не три, само пройдёт. Появится потребность - тогда и почувствуешь. Я мог бы только сказать почему я их НЕ использую :)

ZanZag
Сообщения: 12
Зарегистрирован: 15 авг 2006, 00:38

Сообщение ZanZag » 22 авг 2006, 15:07

Merlin писал(а):Я мог бы только сказать почему я их НЕ использую :)
О! так это тоже сгодиться мне для просветления. хотелось бы ознакомиться со всеми сторонами впроса...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 22 авг 2006, 15:07

Абсолютно согласен.
У нас в базе среди 3000 тысяч объектов затерялись 2 (две) вьюхи. Кто-то из разработчиков в самом начале влепил, наверное, попробовать. Экспериментатор, блин :)
О! так это тоже сгодиться мне для просветления. хотелось бы ознакомиться со всеми сторонами впроса...
А чего тут просветляться? Всё и так понятно - процедуры и триггеры решают практически любой круг задач, которые выполняют вьюхи, только гибче и управляемее.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 авг 2006, 15:28

Главный минус - неальтерабельность, можно только пересоздать. А это зависимости и понеслась звезда по кочкам. Второй - говорят, что сейчас почти вылизали, но раньше view в IB были баг 24х7. Третий - на производительность часто влияет не лучшим образом, требует тонкого понимания.

ZanZag
Сообщения: 12
Зарегистрирован: 15 авг 2006, 00:38

Сообщение ZanZag » 22 авг 2006, 15:38

ну для чего то ж их делали...

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 авг 2006, 15:42

допустим, нужно сделать "обновляемым" сложный запрос. строишь view, навешиваешь на него триггеры, и все. view это "симулятор таблицы".

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 авг 2006, 15:48

Склероз мне шепчет, что основной была идея секурности - чтоб пользователь/приложение о таблицах вообще не знал и тупо делал select * from pseudotable. Смешно. При полной открытости метаданных. А стоит дороговато в плане борзодействия и напряжения мозгов при их сджойнивании и т.п. Ну и всякие там хитрости типа агрегата из агрегатов. После появления derived tables в двойке я вообще не понимаю зачем они нужны.

ZanZag
Сообщения: 12
Зарегистрирован: 15 авг 2006, 00:38

Сообщение ZanZag » 22 авг 2006, 16:28

kdv писал(а):допустим, нужно сделать "обновляемым" сложный запрос.
у... понял. тольк если изначально считаешь, что "обновляемый" запрос не есть гуд совсем, то тоды ой... ;)
Merlin писал(а):Склероз мне шепчет, что основной была идея секурности - .... Смешно. При полной открытости метаданных.
хех... действительно весело... типа защита от дурака.
Merlin писал(а):derived tables
это мы такое не понимает.. это нам такое не известно. ага.
у нас только IB6 под рукой и FB 1.5.3, честноскаченный, ибо бесплатный. на ем и будем строиться. а стремиться использовать самое свежее нам еще рано.. ибо и тут поле непахано.


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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 22 авг 2006, 16:46

Но получается что на вьюху сервер будет не малосил на нее тратить...
view - это хранимый запрос. ему все равно, что запрос выполнять, что view.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 авг 2006, 16:47

Для простого селекта (а обычный джойн со справочниками - это простой запрос, сколько бы их там ни было, справочников-то) именно селект и лучше всего. Селективные процедуры хороши там, где одним запросом не справиться или он получается слишком тормозной из-за сложности для оптимизатора. И возвращаемый резалтсет должен быть небольшим, усечение длинного возврата Select From SP через Where неэффективно.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 22 авг 2006, 16:50

kdv писал(а):
Но получается что на вьюху сервер будет не малосил на нее тратить...
view - это хранимый запрос. ему все равно, что запрос выполнять, что view.
Я уже не помню что dimitr в последний раз говорил про современное состояние вопроса о проталкивании условий фильтрации и сджойнивания внутрь вья, в запрос. Но что-то точно не всегда получается. И нагрузка возрастает.

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 23 авг 2006, 09:11

У меня с вьюхами тож как-то не сложилось, нет ни одной.
Я подумал, что в принципе, для псевдоудобства можно было бы слепить въюху, где к шапке прицепленны все реквизиты документов из справочникв... что бы запрос на клиенте был легче, селект фром вью и все.
Мы недавно столкнулись с проблемкой, вроде небольшой запрос, всего штук пяток джойнов не удалось скормить серверу из фокспро, из дельфей пожалйста, из ибэксперта пожалйста, а тут ни-ни. Моя в фоксе не силен, написал обертку, правда не вьюху, а ХП и понеслась.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 19 сен 2006, 13:39

например
1
когда надо сделать запрос к результату запроса...
Первичный запрос(как правило сложный с группировками и/или Union) при этом делается на View, а потом из него выбирается информация селектами как из датасета. Особенно полезно, когда используются динамически формируемые запросы в теле которых есть постоянная составляющая, которую собсно и выношу в View.

2
Например, список счетов, который не является отдельной таблицей в базе. Таким образом можно организовать связь "один ко многим" имея всего лишь одну таблицу, где "Мастер" организован в виде View

Код: Выделить всё

CREATE VIEW "vw_accountsList"(
    SCHETNUMBER,
    FDATE,
    NIK,
    LK_SI,
    CLIENT_ID,
    SUMPRICE,
    DISCONT,
    RSLTPRICE,
    SUMOPLATA,
    SUMFCOUNT,
    SUMPRODANO,
    ERROR_FLAG)
AS
SELECT
  SCHET.SCHETNUMBER,
  SCHET.FDATE,
  BOOK_CLIENTS.Nik,
  SCHET.LK_SI,
  SCHET.CLIENT_ID,
  sum(SCHET.FCOUNT*SCHET.PRICE),
  max(SCHET.Discont),
  sum(SCHET.FCOUNT*SCHET.PRICE*(1.00-SCHET.Discont/100.00)),
  sum(SCHET.OPLACHENO),
  sum(SCHET.FCOUNT),
  sum(SCHET.PRODANO),
  max(SCHET.Error_Flag)
FROM SCHET
   INNER JOIN BOOK_CLIENTS ON (BOOK_CLIENTS.Id_Client = SCHET.CLIENT_ID)
group by
  SCHET.SCHETNUMBER,
  SCHET.FDATE,
  BOOK_CLIENTS.Nik,
  SCHET.LK_SI,
  SCHET.CLIENT_ID;

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 19 сен 2006, 13:51

DSKalugin писал(а):Таким образом можно организовать связь "один ко многим" имея всего лишь одну таблицу, где "Мастер" организован в виде View
В запросе вязать ко вье ещё таблицу не лучший вариант. Оптимизатор видит кишки вьи и строить будет общий запрос, что может привести к неоптимальному соединению.
В твоём случае, если нет необходимости редактировать эту вью непосредственно в гриде как обычную таблицу, процедура была бы эффективнее. И селект из неё делается точно так же.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 19 сен 2006, 14:02

WildSery писал(а): В твоём случае, если нет необходимости редактировать эту вью непосредственно в гриде как обычную таблицу, процедура была бы эффективнее. И селект из неё делается точно так же.
и процедура - объект базы и вьюха - объект базы. Только вот объединять в одном запросе данные из ХП и таблиц крайне не рекомендуется. Поэтому если ставить вопрос xp vs view то я всегда выбираю последний вариант где это возможно

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 19 сен 2006, 14:08

DSKalugin писал(а):Только вот объединять в одном запросе данные из ХП и таблиц крайне не рекомендуется.
Кем? Хде?

Ivan_Pisarevsky
Заслуженный разработчик
Сообщения: 644
Зарегистрирован: 15 фев 2005, 11:34

Сообщение Ivan_Pisarevsky » 19 сен 2006, 16:21

Merlin писал(а):
DSKalugin писал(а):Только вот объединять в одном запросе данные из ХП и таблиц крайне не рекомендуется.
Кем? Хде?
Таки хотелось бы услышать что мне помешает с цифирьям полученным при помощи ХР прилефтджойнить данные справочников? А то я так делаю, а оно себе работает и ничего.

DSKalugin
Сообщения: 212
Зарегистрирован: 27 окт 2004, 13:39

Сообщение DSKalugin » 19 сен 2006, 16:47

Ivan_Pisarevsky писал(а):
Merlin писал(а): Кем? Хде?
Таки хотелось бы услышать что мне помешает с цифирьям полученным при помощи ХР прилефтджойнить данные справочников? А то я так делаю, а оно себе работает и ничего.
Не поверите... ТУТА!!! :lol: :lol: :lol: "Что НЕ надо делать" http://www.ibase.ru/devinfo/dontdoit.htm
п14 Не рекомендуется использовать связку "таблица+ХП"
, т.е. явный или неявный join таблицы с хранимой процедурой. В некоторых ситуациях наблюдалось неправильное выполнение запроса (Например, от пеpемены мест слагаемых, "сумма" иногда меняется.). Также ситуации сильно зависят от версий IB (4.x, 5.x, 6.x) - в одной из версий это может привести к падению сервера, в другой не выполнится, а в третьей - пройдет.

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 19 сен 2006, 17:02

Во-первых, это рекомендации общие, а не строгие указания. Если умеешь пользоваться и понимаешь что получишь - кто тебе помешает? Я в некоторых случаях даже join двух процедур делаю.
Во-вторых, ты меня не понял. Процедурой я тебе рекомендовал заменить вью, но не джойнить к процедуре что-то ещё, а сделать на такой случай другую процедуру, которая уже точно знает, что как лучше сделать.

А всякие там супер-пупер динамически строящиеся запросы - либо не нужно, либо точно так же делается и без вьи.

Ответить