powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение удаленных данных?
25 сообщений из 26, страница 1 из 2
Как реализовать хранение удаленных данных?
    #37222165
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.

К примеру имеется таблица поставщиков
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

Заранее спасибо!
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222647
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mutuz,

Че-то я непойму что требуется. У вас и так последняя запись будет хранить данные о пользователе. За что боремся?..
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222857
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mutuz,

второй вариант
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222869
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобрmutuz,

Че-то я непойму что требуется. У вас и так последняя запись будет хранить данные о пользователе. За что боремся?..
Она будет хранить информацию о пользователе, удалившем запись. А информация, о том кто редактировал эту запись перед удалением будет потеряна.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222876
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К примеру есть запись:

id name start_date end_date user_modify ipaddr1 ООО "РОГА И КОПЫТА" 01.01.2011 NULL vasya localhost

И нужно её пометить как удаленная (закрыть датой), но при этом не потерять информацию о том, кто её редактировал до удаления и сохранить информацию о удалившем.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222916
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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)
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37222995
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой Бобр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?
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37223029
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И в итоге получится 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
Зачем вам две даты я так и непонимаю. Я б еще понял если б это нужно было в пользовательском представлении. Но в БД достаточно одной даты.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37223044
Ivan Durak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Злой БобрИ в итоге получится 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
Зачем вам две даты я так и непонимаю. Я б еще понял если б это нужно было в пользовательском представлении. Но в БД достаточно одной даты.
так оно быстрее, бобр, быстрее при выборках
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37223187
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторПерезаписать поля user_modify, ipaddr нельзя - потеряем информацию о том, кто в последний раз редактировал запись.Если вам настолько нужен протокол действий с записью - ведите полноценный лог, а то потеряете инфу о том кто предпоследний раз редактировал запись. user_modify и date_modify обычно юзались для оптимистической блокировки.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37223277
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если вам настолько нужен протокол действий с записью - ведите полноценный лог, а то потеряете инфу о том кто предпоследний раз редактировал запись.[/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
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37223950
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan Durakтак оно быстрее, бобр, быстрее при выборках
Хранение подробной истории подразумевает определенное падение скорости при выборке. Частично можно победить дополнительно проиндексировав дату и ID объекта по которому ведется история. К тому же разница с вашей существующей схемой при правильном подходе будет даже в пользу предложенного мной варианта. Не говоря о том что появится возможность смотреть историю не до даты а до момента времени, т.е. если в один день поменяли несколько раз то при моем варианте это будет максимально информативно.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37224684
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Злой БобрНе говоря о том что появится возможность смотреть историю не до даты а до момента времени, т.е. если в один день поменяли несколько раз то при моем варианте это будет максимально информативно.
Дата приведена только для примера, на самом деле для полей art_date end_date используется тип данных timestamp.
Можно получить данные на любой момент времени.

Злой БобрА вообще, по уму, таблица истории должна быть в другом виде. Типа:
id, id_objekt, dat (datetime), usr_id, idaddr

id_objekt - Это FK? И если да, то на какую таблицу?
Или для каждой таблицы создается своя таблица истории? Тогда непонятно зачем нужен id_objekt.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37224737
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mutuz... id_objekt - Это FK? И если да, то на какую таблицу?
Или для каждой таблицы создается своя таблица истории? Тогда непонятно зачем нужен id_objekt.
К примеру перечень контрагентов у вас в таблице T1 (id, name, disc, ...), а история хранится в таблице T2(id, id_obj, period, ...). Тогда T2.id_obj=T1.id. Это если кратко. Ну а дальше правильно разрулить соответствия между таблицами и полями данных, оптимизировать индексы и запросы, ...
Если БД очень большая то имеет смысл подумать над историей к каждой необходимой таблице. Это естественно ускорит выборку. Но в то же время если нужно будет одновременно получать данные истории по нескольким таблицам - появятся джойны, которые также будут подгружать систему. Поэтому перед тем как что-то делать необходимо взвесить все за и против.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37224850
Удалитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сделать start_date>end_date у записи в которой хранятся данные удалившего юзера.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37224919
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Удалительсделать start_date>end_date у записи в которой хранятся данные удалившего юзера.
Не хочется добавлять запись при удалении :) Можно же просто датой закрыть существующую запись, в всей литературе, которую я читал именно так и делают.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37225214
Удалитель
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mutuzНе хочется добавлять запись при удалении :)
mutuzЗапись удаляется путем проставление даты end_date(закрывается датой).
Вот только как удалять запись и сохранить служебную информацию о пользователе и ip-адресе?
Где хранить информацию о том, кто удалил запись?
Ну вы уж определитесь чего именно вам надо...
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37242685
Фотография Роман Дынник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на мой взгляд понятия истории и аудита должны быть разделены и соответственно разнесены в разные таблицы.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37243097
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Роман Дынникна мой взгляд понятия истории и аудита должны быть разделены и соответственно разнесены в разные таблицы.
Должно получиться примерно следующее?
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 таблицы?
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37243216
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37243224
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.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37243252
MAYAKOV_SV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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, это информация аудита.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37243408
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mutuz,

я не понял самого главного - вам при обычной работе история изменений нужна или нужно только текущее состояние?
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37248277
mutuz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iljymutuz,
я не понял самого главного - вам при обычной работе история изменений нужна или нужно только текущее состояние?
В основном история, помимо истории будет данные, актуальность которых наступит в будущем. То есть будет храниться история + настоящее + будущее.
...
Рейтинг: 0 / 0
Как реализовать хранение удаленных данных?
    #37248355
iljy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mutuz,

раз у вас все запросы (или большинство) идут не по состоянию на сейчас, а по состоянию на дату, причем как в прошлом, так и в будущем, то не извращайтесь и сделайте одну таблицу (id, name, modify_date, user_modify, ipaddr), end_date совершенно излишне (по крайней мере судя по вашим примерам).
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Как реализовать хранение удаленных данных?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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