powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последовательный update полей таблицы из триггера обновляемого представления
21 сообщений из 21, страница 1 из 1
Последовательный update полей таблицы из триггера обновляемого представления
    #39729158
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Коллеги, пожалуйста, подскажите как в потрахах 2.5.8 будет формироваться версия записи, если из одного и того же триггера обновляемого представления и в одной и той же транзакции делать UPDATE не сразу всех полей одним оператором, а последовательно. К примеру, сначала UPDATE первичного ключа, если его OLD и NEW не совпадают, а затем всех прочих полей по тому же принципу (естественно, с условием, учитывающим изменение первичного ключа, если таковое имело место).

В базу ляжет одна версия записи с измененными полями, или же на каждый UPDATE будет формироваться своя запись?

Еще вопрос - кроме сравнения OLD и NEW есть еще какой-нибудь функционал контроля из триггера изменения полей, как это, к примеру, сделано в MS SQL?
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729163
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

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

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

Поэтому я крайне не рекомендую делать 100500 апдейтов одной записи там, где этого можно избежать.

Битовой маски изменённых полей нет. Нужно явно сравнивать.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729164
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, спасибо!
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729166
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devК примеру, сначала UPDATE первичного ключа, если его OLD и NEW не совпадают, а затем всех прочих полей по тому же принципу (естественно, с условием, учитывающим изменение первичного ключа, если таковое имело место).Хоть убей - не вижу, зачем тут множество апдейтов, а не один.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729174
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad, я уже понял, что овчинка выделки не стоит и лучше сразу делать UPDATE всех 100500 полей, даже если в обновляемом представлении было изменено только одно поле.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729186
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Что это у вас там за вьюха в которой надо ПК базовой таблицы менять? Я бы побоялся такой код делать
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729199
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Запись меняется по одинаковым правилам, хоть одно поле, хоть 100500.
Не на чем тут сэкономить, включая в апдейт только конкретные.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729245
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисrdb_dev,

Что это у вас там за вьюха в которой надо ПК базовой таблицы менять? Я бы побоялся такой код делатьХитрый составной legacy ключ, включающий в себя как часть первичный ключ мастер-таблицы. Не я это придумал, если что... :) До меня были умельцы. Весь зоопарк софта под причёсанную и нормализованную базу никто, естественно, не будет, потому и приседаю с представлениями, чтобы сохранить прослойку наследия.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729251
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
07.11.2018 13:13, rdb_dev пишет:
> Хитрый составной legacy ключ, включающий в себя как часть первичный ключ мастер-таблицы. Не я это придумал, если что... :)

PRIMARY KEY не должны быть составными.
никогда.
переделай его на UNIQUE KEY - избежишь приседаний с притопами и прихлопами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729255
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий, ты именно мне хочешь это объяснить? :)
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729258
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

если я правильно понял он делает рефакторинг в своей системе. Меняет одну большую таблицу (с уродливыми ключом) на несколько поменьше, а для совместимости вьюху городит.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729260
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис, в общих чертах так.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729263
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийпеределай его на UNIQUE KEY - избежишь приседаний с притопами и прихлопами.
Взамен получишь новый геморрой с нарушением ключа на ровном месте.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729267
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
07.11.2018 13:29, Dimitry Sibiryakov пишет:
> Взамен получишь новый геморрой с нарушением ключа на ровном месте.

креститься надо.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729274
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devв общих чертах так.

Тогда откуда у тебя вообще там составной ключ вылез? На вьюхах ключей не бывает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729284
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

он у него был на старой таблице. А вот теперь он хитрым образом хочет эмулировать эту таблицу вьюхой на основе нескольких таблиц с простыми ключами. Но геморрой будет ещё тот.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729291
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovrdb_devв общих чертах так.

Тогда откуда у тебя вообще там составной ключ вылез? На вьюхах ключей не бывает.
Зато бывает на таблицах, которые надо заменить вьюхами с полным сохранением функционала. Сначала хотел сделать ПК из нескольких полей и собирать их только для вьюхи, но проблема в том, что каскад таблиц на шесть уровней и на предпоследнем уровне скомпонованный по определенным правилам ключ, который в оригинале, ко всему прочему, был еще и текстовым, занимал несколько десятков символов. Городить таблицы мапинга UUID в legacy, а при формировании вьюхи тащить это всё, тоже приятного мало. Мне удалось этот длиннющий ключ определенным образом впихнуть в INT64, благо правила формирования ключа позволили.

В общем, долгая история...
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729308
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА вот теперь он хитрым образом хочет эмулировать эту таблицу вьюхой на основе нескольких
таблиц с простыми ключами. Но геморрой будет ещё тот.

Причём отрастил его он себе сам.

rdb_devЗато бывает на таблицах, которые надо заменить вьюхами с полным сохранением
функционала.
При такой замене ключ обычно отсыхает, превращаясь в простой, даже не уникальный, индекс.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729314
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovПри такой замене ключ обычно отсыхает, превращаясь в простой, даже не уникальный, индекс.

не факт. Ограничение уникальности иногда может быть требованием бизнес логики. Или у тебя какая-то особая неприязнь к UNIQUE KEY? Ну можно индекс уникальный сделать, если FK по нему не делать.
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729320
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисИли у тебя какая-то особая неприязнь к UNIQUE KEY?

Да.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Последовательный update полей таблицы из триггера обновляемого представления
    #39729321
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, UNIQUE там тоже есть - по полям name + FK. :)
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Последовательный update полей таблицы из триггера обновляемого представления
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]