SQL с версиями
Sep. 20th, 2010 09:59 amВроде бы простая задача а у Грубера не описана - я хочу для каждой строки в базе данных сохранять версии. Решение в лоб - вместо UPDATE - INSERT с обновленным таймстампом. Но тогда любая выборка превращается в адъ. Наверняка это популярная проблема а я просто лох, но все что я ни придумаю получается криво.
no subject
Date: 2010-09-20 05:08 pm (UTC)Борландовский Interbase, если я правильно помню, работает по такому принципу.
no subject
Date: 2010-09-20 05:21 pm (UTC)no subject
Date: 2010-09-20 05:26 pm (UTC)Я, конечно, не dba, но чтобы немного приуменьшить адъ, можно добавить флаг active row (indexed). Соответственно вместо update у нас будет update предыдущей active record to inactive и insert с новым TS/active.
no subject
Date: 2010-09-20 05:28 pm (UTC)Когда второй клиент попытается проделать такой же фокус, он получит сапогом в лоб :-)
no subject
Date: 2010-09-20 05:29 pm (UTC)no subject
Date: 2010-09-20 05:31 pm (UTC)ВМЕСТО
update t set timestamp ...., пишем
insert into t ('blah', 'blah', now())
no subject
Date: 2010-09-20 05:47 pm (UTC)no subject
Date: 2010-09-20 05:51 pm (UTC)no subject
Date: 2010-09-20 05:58 pm (UTC)no subject
Date: 2010-09-20 06:49 pm (UTC)no subject
Date: 2010-09-20 07:40 pm (UTC)no subject
Date: 2010-09-20 09:12 pm (UTC)Дешевый вариант был подсказан - триггер на запись, который пишет копию обновляемой сторки в таблицу с точно таким же набором полей + поле для даты транзакции.
Выбор определяется задачей.
no subject
Date: 2010-09-20 11:07 pm (UTC)no subject
Date: 2010-09-20 11:11 pm (UTC)no subject
Date: 2010-09-20 11:12 pm (UTC)no subject
Date: 2010-09-20 11:13 pm (UTC)no subject
Date: 2010-09-20 11:14 pm (UTC)вот как безблагодатно влияет Мелкософтno subject
Date: 2010-09-20 11:16 pm (UTC)no subject
Date: 2010-09-20 11:41 pm (UTC)у нас смысла как-то не было делать компактнее - все-таки такое делалось на не самых часто меняемых таблицах.
no subject
Date: 2010-09-21 12:54 am (UTC)no subject
Date: 2010-09-21 01:25 am (UTC)no subject
Date: 2010-09-21 04:21 am (UTC)Ну и если очень заботит производительность на вставке и выборке и хочется приключений - можно иметь теневую таблицу в которую daemon будет в off-peak time выносить версионные записи. При этом быть готовым, что есть шанс что редкие версионные записи есть в основной таблице.
no subject
Date: 2010-09-21 05:18 am (UTC)no subject
Date: 2010-09-21 10:40 am (UTC)no subject
Date: 2010-09-21 10:42 am (UTC)no subject
Date: 2010-09-21 10:45 am (UTC)no subject
Date: 2010-09-21 11:04 pm (UTC)