Работа с вычисляемыми полями
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Работа с вычисляемыми полями
Добрый день.
Windows XP Prof
Firebird 1.5
Возник следующий вопрос.
Требуется вычислить значение столбца на основе данных из другой таблицы. В книге Хелен Борри упомянается что можно для вычисления использовать SELECT. Но проблема заключается в том что ести мы пишем запрос типа (SELECT G.NAC FROM GROUP G WHERE G.KODT = KODT) , то берется только первое значение из столбца KODT
Есть ли варианты решения данной задачи без написания пользовательской UDF ?
Windows XP Prof
Firebird 1.5
Возник следующий вопрос.
Требуется вычислить значение столбца на основе данных из другой таблицы. В книге Хелен Борри упомянается что можно для вычисления использовать SELECT. Но проблема заключается в том что ести мы пишем запрос типа (SELECT G.NAC FROM GROUP G WHERE G.KODT = KODT) , то берется только первое значение из столбца KODT
Есть ли варианты решения данной задачи без написания пользовательской UDF ?
-
- Заслуженный разработчик
- Сообщения: 1436
- Зарегистрирован: 15 сен 2005, 09:05
Re: Работа с вычисляемыми полями
1) View
2) Trigger
3) DB Developer
2) Trigger
3) DB Developer
Re: Работа с вычисляемыми полями
к ответу DS добавлю, что UDF - нет, не сможете. И вообще select в вычисляемых полях это ужасно (с точки зрения производительности). Никогда так не делайте.
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Работа с вычисляемыми полями
Что использовать лучше Просмотр или триггер?
Я понимаю это так. Если использовать просмотры то получается что мы избавляемся от избыточных данных и их вычислений в ходе изменения данных.
Если же использовать триггеры, то мы получаем лишнее поле, но выигрываем в скорости исполнения запроса основанного на этих полях.
Я понимаю это так. Если использовать просмотры то получается что мы избавляемся от избыточных данных и их вычислений в ходе изменения данных.
Если же использовать триггеры, то мы получаем лишнее поле, но выигрываем в скорости исполнения запроса основанного на этих полях.
Re: Работа с вычисляемыми полями
триггер хуже view тем, что пресловутый select будет выполняться так же как и check constraint. Собственно, check constraint, грубо говоря, и есть "системный триггер". View или запрос лучше тем, что "вычисляемый столбец" будет вычисляться только при выборке, и только когда это нужно.
Кроме того, может быть изменится Ваше представление о правилах "программирования" метаданных. Например, есть такая штука - join (www.ibase.ru/devinfo/joins.htm).
Кроме того, может быть изменится Ваше представление о правилах "программирования" метаданных. Например, есть такая штука - join (www.ibase.ru/devinfo/joins.htm).
Re: Работа с вычисляемыми полями
Присоединяюсь к совету с JOIN. Пока не выучите что это - никаких вычисляемых полей.
-
- Сообщения: 33
- Зарегистрирован: 09 июл 2009, 14:57
Re: Работа с вычисляемыми полями
1) Статью читал уже до этого, шяс перечитал. Но по моему мы немного друг друга не понимаем.kdv писал(а):триггер хуже view тем, что пресловутый select будет выполняться так же как и check constraint. Собственно, check constraint, грубо говоря, и есть "системный триггер". View или запрос лучше тем, что "вычисляемый столбец" будет вычисляться только при выборке, и только когда это нужно.
Кроме того, может быть изменится Ваше представление о правилах "программирования" метаданных. Например, есть такая штука - join (http://www.ibase.ru/devinfo/joins.htm).
2) Подумав пришел к выводу что в моем случае лучше использовать триггер. Поясню почему.
Есть таблица товаров и таблица элементов из которых состоит товар. У каждого элемента есть своя цена. Цена товара получается путем сложения цен элементов. Тут то и начинается самое интересное.
Дорпустим есть 3000 товаров в каждом в среднем 6 элементов.
Мы забили справочник товаров и их комплектующих.
2.1) Используем триггер.
Изменили 5 товаров. В таблице товаров справочник поменял в соответствии с условиями (наценка/скидка) цены 5 ти товаров. Потом сделали выборку всех товаров для визуального отображения в программе без выборки составляющих. Выборка прошла мгновенно т.к. все данные есть и ничего высчитывать не надо.
2.2) Используем View.
Изменили теже 5 товаров. Делаем выборку для просмотра и получаем что для того чтобы собрать данные нашего SELECT надо выполнить 3000 ! запросов в дочернюю таблицу.
А если учесть что в реальных базах товаров десятки тысяч то ......