kika: (Default)
[personal profile] kika
Вроде бы простая задача а у Грубера не описана - я хочу для каждой строки в базе данных сохранять версии. Решение в лоб - вместо UPDATE - INSERT с обновленным таймстампом. Но тогда любая выборка превращается в адъ. Наверняка это популярная проблема а я просто лох, но все что я ни придумаю получается криво.

Date: 2010-09-20 05:08 pm (UTC)
From: [identity profile] itman.livejournal.com
Любая выбора не превращается в ад. Просто при обновлении нужно писать условие, что хочешь обновить запись, у которой timestamp совпадает со считанным timestamp. И тады, если кто-то другой поменял эту запись, получаешь not found.

Борландовский Interbase, если я правильно помню, работает по такому принципу.

Date: 2010-09-20 05:26 pm (UTC)
From: [identity profile] vvs2002.livejournal.com
Это с чего это вдруг получаешь not found? Старая-то запись никуда не денется.

Я, конечно, не dba, но чтобы немного приуменьшить адъ, можно добавить флаг active row (indexed). Соответственно вместо update у нас будет update предыдущей active record to inactive и insert с новым TS/active.

Date: 2010-09-20 05:28 pm (UTC)
From: [identity profile] itman.livejournal.com
UPDATE SET ..., timestamp = now() WHERE timestamp = old_now

Когда второй клиент попытается проделать такой же фокус, он получит сапогом в лоб :-)

Date: 2010-09-20 05:31 pm (UTC)
From: [identity profile] vvs2002.livejournal.com
Читаем условия.
ВМЕСТО
update t set timestamp ...., пишем
insert into t ('blah', 'blah', now())

Date: 2010-09-20 05:58 pm (UTC)
From: [identity profile] itman.livejournal.com
Ok, да не посмотрел. Тогда, любая выборка, конечно же, превращается в неприятное занятие. Если только не соорудить триггер, который будет обновлять флажок newest

Date: 2010-09-20 11:07 pm (UTC)
From: [identity profile] kika.livejournal.com
Идея с триггером и флажком проста, и в голову мне не приходила, спасибо.

Date: 2010-09-21 01:25 am (UTC)
From: [identity profile] itman.livejournal.com
Правда она не бесплатная. В смысле производительности.
Edited Date: 2010-09-21 01:25 am (UTC)

Date: 2010-09-21 10:40 am (UTC)
From: [identity profile] kika.livejournal.com
Ну это-то как раз вполне ожидаемо.

Profile

kika: (Default)
kika

January 2017

S M T W T F S
1234567
89 1011121314
151617181920 21
22232425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 22nd, 2026 12:49 pm
Powered by Dreamwidth Studios