powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Восстановление логически удаленных записей
25 сообщений из 38, страница 1 из 2
Восстановление логически удаленных записей
    #34876100
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То, что записи не нужно физически удалять – это я согласен. А вот нужно ли иметь возможность восстановить логически удаленные записи?
Скажем, была группа товаров – "Ширпотреб" и содержалось там n-ное количество товаров. Допустим, что часть этих товаров входили и в другие группы (мн-ко-мн). Однажды начальник сказал: некрасиво, уберем эту группу. Начинаем убирать. Поперекидали товары в другие группы (не удалять же и их с группой). Потом другой говорит: да нормально, верните взад. Опять перекидывать? Наверное, было бы проще восстановить? Правда, отследить корректное восстановление всех связей при этом будет ой как непросто. Если вообще возможно.
Или, скажем, было решено переименовать "Ширпотреб" во "Всемпотреб". "Ширпотреб" ушел в историю и в списке актуальных групп не показывается. А потом кто-то решил, что нужен все-таки еще и "Ширпотреб". Соответственно, пользователь снова заводит "Ширпотреб" и кидает туда кучу новых товаров. Теперь если кому в голову придет, что в старом "Ширпотребе" было много нужных товаров, то восстановление этой записи приведет к очень большим хлопотам.
А ведь помимо начальского волеизъявления бывает еще что не ту группу удалили, не ту переименовали, да еще после этого успели перекидать и туда и оттуда и т.д.
Я понимаю, что в каждом конкретном случае надо отдельно решать, стоит проектировать возможность восстановления или нет, но, может, кто-нибудь поделится мыслями и примерами на эту тему?
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34876108
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДкто-нибудь поделится мыслями и примерами на эту тему?

начальник оплачивает "восстановление ручками" как сверхурочку, за свой счет... или идет в жопу - обычное дело
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34876409
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДможет, кто-нибудь поделится мыслями и примерами на эту тему?
Мысль имхо очевидна: если для "восстановления" удаленной записи пишется некий дополнительный программный код, тем самым автоматически вносится некоторое количество весьма неприятных ошибок. Это будет редко используемый и плохо тестируемый функционал, который у пользователей постепенно накопит гадостей.

А потому восстановление можно и нужно стараться выразить через уже реализованные штатные операции, по сути так, как действовал бы пользователь, если бы "делал то же самое во второй раз". Например, восстановление группы "Ширпотреб" реализовать следующим образом:

- спросить, нужно ли восстанавливать содержимое группы
- с помощью подпрограммы "создать новую группу" восстановить группу
- если сказано восстанавливать содержимое, то с помощью подпрограммы "перекинуть между группами" сделать как раз то, что Вы не хотите делать вручную.

Если этого удастся добиться, восстановление можно считать достаточно надежным и соглашаться делать его без плохих предчувствий. Хочу отметить: в данном случае я говорю вовсе не о "используй готовые подпрограммы - программировать будет легче". Может получиться так, что написать отдельный код было бы проще, но здесь куда важнее надежность.

У подхода есть и понятные недостатки - записи получаются плохо связанными; запрос типа "а выдай мне все товары, которые хоть когда-то были в группе ширпотреба" должен учитывать, что групп ширпотреба физически несколько итп. Но когда это неприемлимо - уже надо очень тщательно продумывать восстановление, именно так, как расписали Вы.

Для полноты картины упомяну, что у удаления-восстановления есть еще неприятный момент, связанный с распределенными БД; приходится учитывать, что операции обладают существенной инерцией, и пользователь, поигравший кнопкой удалить-восстановить, может наломать дров.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34876593
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> нужно ли иметь возможность восстановить логически удаленные записи?

Эта операция лишена смысла.

> Скажем, была группа товаров

Хороший пример, как делать не нужно. Классификация - это вообще отдельная тема для обсуждения.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34876789
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 softwarer
Спасибо!

2 guest_20040621
> Эта операция лишена смысла.
Почему?

> Хороший пример, как делать не нужно.
Так я и прошу привести примеры как нужно.

> Классификация - это вообще отдельная тема для обсуждения.
Согласен, так мы ее тут и не обсуждаем.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34878136
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Почему?

Потому что описываемый Вами пример делает бессмысленным проектирование хронологических баз данных. Логика изменений должна быть одинаковой. "Логическое восстановление" в данном случае должно представлять собой добавление данных, а не изменение.

> Так я и прошу привести примеры как нужно.

"Как нужно" не бывает. Есть задача и есть Ваше решение задачи. Вы получаете зарплату не за гипотетическую правильность, а за конкретное решение.

> Согласен, так мы ее тут и не обсуждаем.

Тогда зачем Вы привели изменение классификации как пример?
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34881867
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 guest_20040621
> "Как нужно" не бывает.
Что-то Вы сами себе противоречите. То пишете: "Хороший пример, как делать не нужно", то - "Как нужно не бывает". Определитесь все-таки – бывает или нет?

> "Логическое восстановление" в данном случае должно представлять собой добавление данных, а не изменение.
Т.е. если мы ошибочно удалили данные, нужно их так и оставить логически удаленными, а потом еще раз внести как актуальные?

> Тогда зачем Вы привели изменение классификации как пример?
Пожалуйста, можно без классификации. Просто свалены в кучу все товары. Часть из них удалили, как впоследствии выяснилось, ошибочно. Теперь их надо заново внести? Собственно, тут ведь идет речь о восстановлении данных вообще, безотносительно того, классифицированы они или нет.

2 BULK INSERT
> начальник оплачивает "восстановление ручками" как сверхурочку, за свой счет... или идет в жопу - обычное дело
Не, тут никто ничего не оплачивает, нужно самому все продумать и подстелить соломки везде, где это возможно.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34881905
Фотография BULK INSERT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДподстелить соломки везде, где это возможно.

гэст ответил

тут и добавить собственно нечего. если у вас логика удаления такова, что запись просто не отображается - это не "логическое удаление" а просто сокрытие или фильтрация.

как вы "логически удаляете" записи если они используются в связанных таблицах? особенно это касается товаров - как в вашем примере.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34882053
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Что-то Вы сами себе противоречите.

Никогда. "Пример, как делать не нужно" - это констатация наличия граблей, причем грабли видны невооруженным взглядом. "Как нужно не бывает" - не бывает абстрактно правильного решения. Приемлемое решение - это когда по крайней мере грабли откровенно не торчат.

> Т.е. если мы ошибочно удалили данные, нужно их так и оставить логически удаленными, а потом еще раз
> внести как актуальные?

Да, именно так это и должно работать. Но на самом деле описанный геморрой есть смысл разрулить по-другому. Подумайте, несет ли в данном случае история изменений полезную нагрузку? Кто и для какой цели делает такие изменения?

> Часть из них удалили, как впоследствии выяснилось, ошибочно

Пример еще менее удачный, чем предыдущий. Поясните, пожалуйста, что это - "удалить товар"? Прекращение производства? Товары закончились на складе? Товары закончились у поставщика? У всех перечисленных ситуаций нет ничего общего с "удалить".
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34886613
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 BULK INSERT
> тут и добавить собственно нечего. если у вас логика удаления такова, что запись просто не отображается - это не > "логическое удаление" а просто сокрытие или фильтрация.
Ну да, раз мы "удалили" информацию - мы ее больше не показываем (кроме специальных запросов на историю данных).

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

2 guest_20040621
> Приемлемое решение - это когда по крайней мере грабли откровенно не торчат.
Ну вот Вы можете привести конкретный пример такого решения?

> Подумайте, несет ли в данном случае история изменений полезную нагрузку? Кто и для какой цели делает такие изменения?
В моем варианте сама по себе история изменений должна быть (ну вот такое требование). Не очень понял какие "такие" изменения? Поменять могут что-то и ошибочно - это преследует какую-то цель? Наверное, должна быть возможность и исправить ошибку. А кто - опять сложный вопрос - и оператор может ошибиться и вводную ему могут дать неправильную.

> Пример еще менее удачный, чем предыдущий. Поясните, пожалуйста, что это - "удалить товар"? Прекращение производства? Товары закончились на складе? Товары закончились у поставщика? У всех перечисленных ситуаций нет ничего общего с "удалить".
По-моему, принципиальной разницы нет. Ну, например, менеджер по продажам распорядился, что магазин больше не закупает водку "Похмелка" – ее ведь надо убрать из списка товаров на форме, где идет формирование заказа на склад?

И вот еще вопрос не по теме: существуют различные нормативные документы – ГОСТы, ТУ и т.д. Как общим словом называется аббревиатура (ГОСТ, ТУ) документа – тип?
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34886783
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КД
>У всех перечисленных ситуаций нет ничего общего с "удалить".
По-моему, принципиальной разницы нет. Ну, например, менеджер по продажам распорядился, что магазин больше не закупает водку "Похмелка" – ее ведь надо убрать из списка товаров на форме, где идет формирование заказа на склад?
В вашем случае вполне возможно добавить отдельные логические признаки, которые бы характеризовали товар. Например, признак "блокирован", который будет запрещать любые операции с товаром, в том числе и выбор его в документы, если уж так хочется (плюс всякие обвески типа причины изменения признаков, если уж совсем "зудит"). Удалять записи в справочниках - сверхредкое явление, постарайтесь исключить его вообще. Как пример недальновидности удаления - в фирме моржет появиться еще один менеджер по продажам с немного другой точкой зрения на водку "Похмелка".
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34887184
assa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Васкецов КД
>У всех перечисленных ситуаций нет ничего общего с "удалить".
По-моему, принципиальной разницы нет. Ну, например, менеджер по продажам распорядился, что магазин больше не закупает водку "Похмелка" – ее ведь надо убрать из списка товаров на форме, где идет формирование заказа на склад?
В вашем случае вполне возможно добавить отдельные логические признаки, которые бы характеризовали товар. Например, признак "блокирован", который будет запрещать любые операции с товаром,...если я правильно понимаю позицию гуеста, то признак "блокирован" это не признак товара. а элемент такой сущности, как "лист продаж". Т.е. тут нет никакого удаления товара из справочника. Есть его невхождение в текущий "лист продаж". Удаление же, как таковое, возможно только для ошибочно заведенной позиции. (например тестовой).
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34887993
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> если я правильно понимаю позицию гуеста, то признак "блокирован" это не признак товара. а элемент такой
> сущности, как "лист продаж". Т.е. тут нет никакого удаления товара из справочника.

Абсолютно правильно понимаете.

> Удаление же, как таковое, возможно только для ошибочно заведенной позиции

Любые данные, описывающие экземпляры сущностей, в отношении которых достоверно известно, что их жизненный цикл закончен, могут быть помечены удаленными. Посмотрите, ведь на самом деле сейчас неявно обсуждается упрощенная реализация темпоральной структуры данных.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34888136
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assa Сергей ВаскецовНапример, признак "блокирован", который будет запрещать любые операции с товаром,...если я правильно понимаю позицию гуеста, то признак "блокирован" это не признак товара. а элемент такой сущности, как "лист продаж"
1. Более того, сущности "лист продаж конкретного менеджера". То есть, как и писали выше, это по своей сути не удаление данных, а фильтрация, которую конечный менеджер натягивает на данные по своему усмотрению.
2. Где-то автор типика писал про признак "блокирован"? Если Вы о моем посте, то я предлагал обобщенный признак блокировки не как замену сущности "лист продаж", а как альтернативу удалению.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34888316
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Более того, сущности "лист продаж конкретного менеджера"

Ценное замечание. Естественным образом приходим к рассмотрению user space и system space как минимум. Логично предполагать, что для них и алгоритм регистрации изменений будет различным. Просто в силу ценности и достоверности данных.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34892514
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Сергей Васкецов
Ну я и имею ввиду под "удалением" то, что Вы называете блокировкой – ведь физически запись не удаляется.

2 остальные
Да я согласен с guest'ом. Просто спрашивал о том, что делать, если, например, ошибочно завели (удалили) позицию товара. Думал, что запись остается как есть (физически в справочнике присутствует), а операции по ее отображению (выбору и т.д.) обусловлены флагом "удалена" ("блокирована", если хотите). Задумывал делать дополнительную таблицу по истории изменений этого статуса записи. И как, кстати, быть если введено неправильное НАЗВАНИЕ товара? Например, "Пахмелка"?

2 guest_20040621
> Любые данные, описывающие экземпляры сущностей, в отношении которых достоверно известно, что их > жизненный цикл закончен, могут быть помечены удаленными.
Спрошу Вас в Вашем стиле – а как мы будем оценивать степень достоверности? Имхо, это все условно. Нужно иметь возможность восстанавливать любую информацию, причины – см. мой первый пост (распоряжение второго начальника, отменяющее распоряжение первого, и оба – достоверны в контексте обсуждаемой проблемы).
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34892705
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> а как мы будем оценивать степень достоверности? Имхо, это все условно.

Ничего условного. Все предельно прозрачно.

На самом деле любая база данных представляет собой некие собственные данные (плохо написал, но смысл, думаю, понятен), связанные с данными внешних источников. Для данных внешних источников все просто и определяется их - источников - статусом. Для внутренних данных все тоже просто: существует (или по крайней мере должен существовать) регламент всех процедур, связанных с получением, обработкой, хранением, обменом и пр. данных. Регламент не всегда есть в явном виде (да и не всегда нужен в явном виде), часто его роль (или часть роли) играет собственно ПО.

> распоряжение второго начальника, отменяющее распоряжение первого, и оба – достоверны в контексте
> обсуждаемой проблемы

Вы пытаетесь единообразно решать разные проблемы, хотя на самом деле и природа проблем, и методы их решения существенно различны.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34903408
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 guest_20040621
> Вы пытаетесь единообразно решать разные проблемы, хотя на самом деле и природа проблем, и методы их решения существенно различны.
Какие тут разные проблемы? Не понял.

> На самом деле любая база данных представляет собой некие собственные данные
Бывают еще ошибочно внесенные данные.

> Для внутренних данных все тоже просто: существует (или по крайней мере должен существовать) регламент всех процедур, связанных с получением, обработкой, хранением, обменом и пр. данных.
Т.е. Вы хотите сказать, что у Вас на каждый чих начальника существует регламент как, когда, где ему чихать? Вы, наверное, живете на Луне.

В общем, геморроя с восстановлением много. Значит, наверное, будем просто хранить историю. Если уж кто чего навертел - пусть лезет туда, смотрит как было и заносит заново.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34903762
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДу Вас на каждый чих начальника существует регламент как, когда, где ему чихать
Рискну ответить, что если чихание начальника является важным для организации, безусловно, регламент должен быть. Чтобы чихал в полную силу, не чихал налево и т.п.
Например, для бизнеса может быть неважно, как именно человек ходит в туалет, но регламент должен предполагать, что человек туда может пойти и, соответственно, какое-то время отсутствовать на рабочем месте.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34904723
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Какие тут разные проблемы? Не понял.

Найдите десять отличий между документом (в данном случае - приказом) и экземпляром сущности базы данных.

> на каждый чих начальника существует регламент

Ничего, если я не буду отвечать на риторические вопросы?
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34926755
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 guest_20040621
>> на каждый чих начальника существует регламент
> Ничего, если я не буду отвечать на риторические вопросы?
Почему-то моя фраза была выдернута из контекста и смысл ее исказился. В оригинале было: " Т.е. Вы хотите сказать, что у Вас на каждый чих начальника существует регламент как, когда, где ему чихать?"
Поэтому это нисколько не риторический, а вполне конкретный вопрос.

Если Вам не нравится пример про товары, попробую привести другой. Допустим, в нашей организации работают люди по временным трудовым договорам или как-то еще, но временно. Должны ли мы при их увольнении удалять из базы информацию о них или переводить флажок "Работает сейчас" (условно) в неактивное состояние? Сотрудник ушел и теперь его фамилию нельзя выбирать в списке сотрудников, скажем, при составлении перечня лиц, отправляемых на курсы повышения квалификации. А если он снова пришел, - снова загонять информацию о нем?

2 Сергей Васкецов
Я согласен с Вашими словами, но Вы можете привести конкретный пример такого регламента? В вашей организации есть такой? Я думаю, что такие организации можно по пальцам пересчитать.

Давайте просто примем, что начальник чихает без регламента и подумаем, что нам теперь делать (в смысле как организовать базу).
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34927597
Фотография Сергей Васкецов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КДВы можете привести конкретный пример такого регламента? В вашей организации есть такой? Я думаю, что такие организации можно по пальцам пересчитать.
Вам действительно нужен регламент чихания? Таких действительно "по пальцам пересчитать" наверное можно.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #34928520
guest_20040621
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
> Поэтому это нисколько не риторический, а вполне конкретный вопрос.

Если регламент нужен, он существует.

> Должны ли мы при их увольнении удалять из базы информацию о них или переводить флажок
> "Работает сейчас" (условно) в неактивное состояние?

Флажка "работает сейчас" нет и быть не может. Есть штатное расписание.
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #35136068
КД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, с логическим удалением записей разобрались (большое спасибо guest_20040621 и всем остальным). Теперь другая проблема – что делать с изменениями в полях записи? Скажем, имеет запись несколько полей. Значение одного из них поменялось. Логично было бы где-н. зафиксировать этот факт. Смотрим "Журналирование изменений структуры БД и данных" (статья на SQL.RU). Много вариантов, я даже растерялся. Пока мне наиболее импонирует создание общей таблицы с полями:
- РК
- таблица где производится действие
- поле где производится действие
- ключ записи таблицы
- старое значение (а новое – в рабочей таблице)
- и т.д. (дата, юзер)
СУБД – Access. Каким типом сделать поле этой общей таблицы для записи старого значения – MEMO? Еще вопрос: если поднимать историю изменения данных какого-то поля какой-то записи, а там вместо понятных данных (скажем, наименование товара) только коды. Можно сделать простую подстановку из таблицы "Товары", но нет гарантии, что там не та же история (в смысле - меняли наименование товара). Не впадем ли мы в какой-н. бесконечный цикл обращений к таблице изменений?
Да, и еще, наверное, в каждую рабочую таблицу для каждого поля, данные в котором можно будет менять, можно было бы добавить дополнительное логическое, где при первом редактировании выставлять флаг. За подробностями – отсылать в общую таблицу изменений. Или не стоит так делать (вроде как избыточные данные), и при каждом перемещении от записи к записи и между полями бегать за справкой в общую таблицу изменений (нагрузка на сеть)?
Кто что скажет на эту тему?
...
Рейтинг: 0 / 0
Восстановление логически удаленных записей
    #35138262
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
КДТеперь другая проблема – что делать с изменениями в полях записи?
Несколько замечаний:
1. журналирование только с целью аудита
2. изменения не таблиц БД , а прикладных объектов
3 сохранять было-стало
4 сохранять не коды, а понятные тексты
все в одной таблице аудита
...
Рейтинг: 0 / 0
25 сообщений из 38, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Восстановление логически удаленных записей
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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