|
|
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Добрый день. К примеру имеется таблица поставщиков idname start_date end_date user_modify ipaddr1 ОАО "Рога и копыта" 1.01.2011 10.01.2011 vasya localhost1 ООО "Рога и копыта" 10.01.2011 25.01.2011vasya localhost1 ЗАО "Рога и копыта" 25.01.2011 NULL kolya localhost2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 NULL klava localhost С помощью полей start_date и end_date обеспечивается хранение истории изменения атрибутов поставщиков. user_modify , ipaddr - служебные поля о пользователе, который произвел изменение. Запись удаляется путем проставление даты end_date (закрывается датой). Вот только как удалять запись и сохранить служебную информацию о пользователе и ip-адресе? Где хранить информацию о том, кто удалил запись? Перезаписать поля user_modify, ipaddr нельзя - потеряем информацию о том, кто в последний раз редактировал запись. При удалении создавать новую запись, в которой start_date, end_date будут равны дате удаления? Пример(удаление пользователем vasya записи с id = 2): idname start_date end_date user_modify ipaddr2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 30.01.2011 klava localhost2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 30.01.2011 30.01.2011 vasya 192.16.215.8 Или создать дополнительные поля, в которых будет храниться информация о том, кто удалил запись? idname start_date end_date user_modify ipaddr delete_by delete_ipaddr2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 30.01.2011 klava localhost vasya 192.16.215.8 Заранее спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 11:42 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuz, Че-то я непойму что требуется. У вас и так последняя запись будет хранить данные о пользователе. За что боремся?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 14:04 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuz, второй вариант ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 15:11 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Злой Бобрmutuz, Че-то я непойму что требуется. У вас и так последняя запись будет хранить данные о пользователе. За что боремся?.. Она будет хранить информацию о пользователе, удалившем запись. А информация, о том кто редактировал эту запись перед удалением будет потеряна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 15:15 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
К примеру есть запись: id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 NULL vasya localhost И нужно её пометить как удаленная (закрыть датой), но при этом не потерять информацию о том, кто её редактировал до удаления и сохранить информацию о удалившем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 15:19 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuzК примеру есть запись: id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 NULL vasya localhost И нужно её пометить как удаленная (закрыть датой), но при этом не потерять информацию о том, кто её редактировал до удаления и сохранить информацию о удалившем. insert into table1 values (2, ООО "РОГА И КОПЫТА", 01.01.2011, 25.01.2011, vasya, localhost) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 15:34 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Злой Бобрinsert into table1 values (2, ООО "РОГА И КОПЫТА", 01.01.2011, 25.01.2011, vasya, localhost) И в итоге получится 2 записи: id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 25.01.2011 vasya localhost2 ООО "РОГА И КОПЫТА" 01.01.2011 25.01.2011 vasya localhost То есть удаление путем добавления новой записи? И почему у Вас start_date = 01.01.2011? может 25.01.2011? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 16:02 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
И в итоге получится 2 записи: id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 NULL vasya localhost2 ООО "РОГА И КОПЫТА" 01.01.2011 25.01.2011 vasya localhost А вообще, по уму, таблица истории должна быть в другом виде. Типа: id, id_objekt, dat (datetime), usr_id, idaddr Зачем вам две даты я так и непонимаю. Я б еще понял если б это нужно было в пользовательском представлении. Но в БД достаточно одной даты. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 16:16 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Злой БобрИ в итоге получится 2 записи: id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 NULL vasya localhost2 ООО "РОГА И КОПЫТА" 01.01.2011 25.01.2011 vasya localhost А вообще, по уму, таблица истории должна быть в другом виде. Типа: id, id_objekt, dat (datetime), usr_id, idaddr Зачем вам две даты я так и непонимаю. Я б еще понял если б это нужно было в пользовательском представлении. Но в БД достаточно одной даты. так оно быстрее, бобр, быстрее при выборках ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 16:20 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
авторПерезаписать поля user_modify, ipaddr нельзя - потеряем информацию о том, кто в последний раз редактировал запись.Если вам настолько нужен протокол действий с записью - ведите полноценный лог, а то потеряете инфу о том кто предпоследний раз редактировал запись. user_modify и date_modify обычно юзались для оптимистической блокировки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 17:13 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Если вам настолько нужен протокол действий с записью - ведите полноценный лог, а то потеряете инфу о том кто предпоследний раз редактировал запись.[/quot] Он и так полноценный. Информация о том, кто предпоследний раз редактировал запись не теряется. Пример: idname start_date end_date user_modify ipaddr1 ОАО "Рога и копыта" 1.01.2011 10.01.2011 vasya localhost1 ООО "Рога и копыта2" 10.01.2011 12.01.2011petya localhost1 ООО "Рога и копыта3" 12.01.2011 14.01.2011lena localhost1 ООО "Рога и копыта4" 14.01.2011 NULLanton localhost ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.04.2011, 17:53 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Ivan Durakтак оно быстрее, бобр, быстрее при выборках Хранение подробной истории подразумевает определенное падение скорости при выборке. Частично можно победить дополнительно проиндексировав дату и ID объекта по которому ведется история. К тому же разница с вашей существующей схемой при правильном подходе будет даже в пользу предложенного мной варианта. Не говоря о том что появится возможность смотреть историю не до даты а до момента времени, т.е. если в один день поменяли несколько раз то при моем варианте это будет максимально информативно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 10:16 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Злой БобрНе говоря о том что появится возможность смотреть историю не до даты а до момента времени, т.е. если в один день поменяли несколько раз то при моем варианте это будет максимально информативно. Дата приведена только для примера, на самом деле для полей art_date end_date используется тип данных timestamp. Можно получить данные на любой момент времени. Злой БобрА вообще, по уму, таблица истории должна быть в другом виде. Типа: id, id_objekt, dat (datetime), usr_id, idaddr id_objekt - Это FK? И если да, то на какую таблицу? Или для каждой таблицы создается своя таблица истории? Тогда непонятно зачем нужен id_objekt. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 15:15 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuz... id_objekt - Это FK? И если да, то на какую таблицу? Или для каждой таблицы создается своя таблица истории? Тогда непонятно зачем нужен id_objekt. К примеру перечень контрагентов у вас в таблице T1 (id, name, disc, ...), а история хранится в таблице T2(id, id_obj, period, ...). Тогда T2.id_obj=T1.id. Это если кратко. Ну а дальше правильно разрулить соответствия между таблицами и полями данных, оптимизировать индексы и запросы, ... Если БД очень большая то имеет смысл подумать над историей к каждой необходимой таблице. Это естественно ускорит выборку. Но в то же время если нужно будет одновременно получать данные истории по нескольким таблицам - появятся джойны, которые также будут подгружать систему. Поэтому перед тем как что-то делать необходимо взвесить все за и против. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 15:32 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
сделать start_date>end_date у записи в которой хранятся данные удалившего юзера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 16:13 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Удалительсделать start_date>end_date у записи в которой хранятся данные удалившего юзера. Не хочется добавлять запись при удалении :) Можно же просто датой закрыть существующую запись, в всей литературе, которую я читал именно так и делают. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 16:44 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuzНе хочется добавлять запись при удалении :) mutuzЗапись удаляется путем проставление даты end_date(закрывается датой). Вот только как удалять запись и сохранить служебную информацию о пользователе и ip-адресе? Где хранить информацию о том, кто удалил запись? Ну вы уж определитесь чего именно вам надо... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.04.2011, 18:22 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
на мой взгляд понятия истории и аудита должны быть разделены и соответственно разнесены в разные таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.05.2011, 18:23 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Роман Дынникна мой взгляд понятия истории и аудита должны быть разделены и соответственно разнесены в разные таблицы. Должно получиться примерно следующее? firm_history id firm_id name start_date end_date1 1 ОАО "Рога и копыта" 1.01.2011 10.01.20112 1 ООО "Рога и копыта" 10.01.2011 NULL3 1 ЗАО "Рога и копыта" 25.01.2011 NULL4 2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 01.03.2009 firm_audit firm_history_id user_modify ipaddr action1 vasya localhost add2 vasya localhost upd3 kolya localhost add4 klava localhost add4 klava localhost del Вы можете объяснить для какой цели их необходимо разделять на 2 таблицы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2011, 08:38 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuzВы можете объяснить для какой цели их необходимо разделять на 2 таблицы? Потому что одна таблица "история", а другая "аудит". Я бы еще дату операции ввел, чтобы можно было знать в какое время была произведена операция: firm_audit firm_history_id user_modify ipaddr action actionDate1 vasya localhost add 01.05.2011 08:11:202 vasya localhost upd 02.05.2011 09:14:253 kolya localhost add 03.05.2011 11:13:304 klava localhost add 14.04.2011 12:21:124 klava localhost del 24.04.2011 11:11:11 Вот интересная статья есть по поводу протоколирования действий пользователя: http://www.rsdn.ru/article/db/dbhistory.xml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2011, 10:34 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
Да забыл - ipaddr тоже нужно добавить в "историю", ведь им ползуются. Там будет значение последнее. id firm_id name start_date end_date ipaddr1 1 ОАО "Рога и копыта" 1.01.2011 10.01.2011 localhost2 1 ООО "Рога и копыта" 10.01.2011 NULL localhost3 1 ЗАО "Рога и копыта" 25.01.2011 NULL localhost4 2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 01.03.2009 localhost А в таблице аудита будет история изменения поля ipaddr. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2011, 10:38 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
MAYAKOV_SVДа забыл - ipaddr тоже нужно добавить в "историю", ведь им ползуются. Там будет значение последнее. id firm_id name start_date end_date ipaddr1 1 ОАО "Рога и копыта" 1.01.2011 10.01.2011 localhost2 1 ООО "Рога и копыта" 10.01.2011 NULL localhost3 1 ЗАО "Рога и копыта" 25.01.2011 NULL localhost4 2 ООО "РОССТАЛЬМЕТФОНДНЬЮ" 1.01.2008 01.03.2009 localhost А в таблице аудита будет история изменения поля ipaddr. Упс ошибся... Не надо добавлять поле ipaddr, это информация аудита. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2011, 10:56 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuz, я не понял самого главного - вам при обычной работе история изменений нужна или нужно только текущее состояние? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.05.2011, 12:11 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
iljymutuz, я не понял самого главного - вам при обычной работе история изменений нужна или нужно только текущее состояние? В основном история, помимо истории будет данные, актуальность которых наступит в будущем. То есть будет храниться история + настоящее + будущее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 19:21 |
|
||
|
Как реализовать хранение удаленных данных?
|
|||
|---|---|---|---|
|
#18+
mutuz, раз у вас все запросы (или большинство) идут не по состоянию на сейчас, а по состоянию на дату, причем как в прошлом, так и в будущем, то не извращайтесь и сделайте одну таблицу (id, name, modify_date, user_modify, ipaddr), end_date совершенно излишне (по крайней мере судя по вашим примерам). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.05.2011, 20:45 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37224684&tid=1542183]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
161ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 209ms |
| total: | 459ms |

| 0 / 0 |
