Spring Boot ERP система лучшая стратегия удаления операций - PullRequest
0 голосов
/ 11 февраля 2020

Я разрабатываю одну ERP-систему для малых и средних организаций, застрял, когда приходит операция удаления для сущностей. Прямо сейчас у меня есть одна сущность Project и Task, т.е. у одного проекта много задач теперь у меня есть три варианта, пока выполняется операция удаления.

1> либо навсегда удалить данные из базы данных, с дочерними данными то есть, если проект удален, то также удалите связанные с ним задачи

, здесь проблема в том, что мы не сможем вернуться, как только он будет удален.

2> либо только установите для isDeleted значение true ,

здесь проблема в том, что если у какой-либо сущности isDeleted равно true, то связанная с ней сущность может получить ее с помощью метода Getter (так что это не очень хорошая идея) если в проекте P1 есть три задачи T1, T2, T3 с типом извлечения EAGER. Например, если я установил Задачу T1 как isDeleted в true, тогда, если я получу проект P1, он также получит три задачи вместе с T1, потому что между ними все еще существует связь, T1 обновляется только до isDeleted до true.

3> или сохранить все события (CRUD) объекта в отдельных таблицах истории

здесь проблема заключается в следующем: размер базы данных будет в несколько раз больше, чем в обычной базе данных.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2020

Вместо того, чтобы на самом деле удалять данные, и лучше, чем isDeleted, попробуйте deleteDate. Если удаленная_дата равна нулю, продукт активен. Если нет, то будет установлена ​​дата удаления.

Теперь на объекте просто напишите

@DynamicInsert
@SQLDelete(sql =
        "UPDATE post SET deleted_date=now() " +
                "WHERE id = ?")
@Where(clause = "deleted_date IS NULL ")
class User{
}

здесь, @SQLDelete обязательно при вызове метода удаления , Он на самом деле не удаляет объект, но устанавливает дату его удаления, когда он был удален.

@Where причина будет гарантировать, что при вызове любого объекта он добавляет код AND deleted_date IS NULL к соответствующему запрос гибернации сработал, поэтому будут выбраны только не удаленные.

0 голосов
/ 11 февраля 2020

Сводка из комментария:

1> либо навсегда удалить данные из базы данных, с дочерними данными, т. Е. Если проект удален, то также удалить связанные с ним задачи

здесь проблема заключается в следующем: мы не сможем вернуться, как только он будет удален.

Вы на самом деле не хотите удалять эти данные. Вы просто хотите, чтобы sudo удалил эти данные, а также хотите иметь возможность восстановить удаленные данные. Решение : Вы можете пометить эти данные как удаленные (могут быть проблемы c) или сохранить отдельную таблицу / схему, в которой вы будете хранить только удаленные данные. Перемещая это в отдельную таблицу, вам не нужно беспокоиться об удаленных флагах и других сложных родительских и дочерних отношениях.

2> либо только установите для isDeleted значение true.

3>, либо хранить все события (CRUD) объекта в отдельных таблицах истории

Кроме того, эти две проблемы будут решены автоматически, если вы будете следовать этому подходу (разделенные удаленные данные).

...