2016-05-25 6 views
0

Я делал свое исследование о преимуществах и недостатках неактивной строки или в другом слове soft-delete. Я нашел большой аргумент в обеих сторонах. Тем не менее, я решил использовать эту технику в своем проекте базы данных.Как управлять неактивными или мягкими удаленными записями в базе данных

Я остановился на вопросе «Как мне обращаться с реляционными данными, связанными FK?».

Обновить дело в неактивном состоянии.

Когда я обновляю некоторые идентификаторы в 'T2', мне нужно обновить реляционные данные до неактивных в 'T3'?

, так что если обновление повлияет на строку в 'T1', а база данных будет более сложной?

Каким будет управление данными в отношении записей с мягким удалением?

Вариант 1

я должен управлять, обновляя все реляционные данные?

ИЛИ

Вариант 2

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

«Вариант 1» потребует очень дорогого запроса?

Это своего рода лабиринт, который необходимо решить с помощью поиска глубины.
enter image description here

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

+0

Я действительно не понимаю, что вы пытаетесь сделать.Почему вы должны «обновлять реляционные данные до неактивных в« T3 », когда вы« обновляете некоторые идентификаторы в «T2»? Что это за две операции? –

+0

Спасибо за ваш быстрый повтор, и извините, если мой вопрос недостаточно ясен, мой английский не мой первый язык. В любом случае, я хочу быть ясным до такой степени: Должен ли я выполнять двойные операции с неактивными реляционными данными, или я должен просто управлять им в инструкции select? –

+0

Это не помогает мне понять и уметь помочь вам ... –

ответ

1

Это зависит от того, что вы хотите сделать. Предположим, у вас есть эти таблицы: order, orderitem, product. Когда заказ удаляется, он получает удаленный флаг и остается в базе данных. Таким образом, все порядковые номера также удаляются, но, конечно, продуктов нет. Ваша бизнес-логика должна знать связь между объектами.

Теперь это зависит от того, что вы хотите сделать, когда элемент заказа удален. Он не обязательно должен быть мягко удален. Только заказ. Если вы все еще хотите мягко удалить элементы, вам также необходимо добавить к нему удаленный флаг.

Когда изделие удалено, вы должны убедиться, что нет активного элемента заказа, ссылающегося на него. Опять же, это зависит от того, как вы хотите справиться с этим делом. Обычно вы хотите заблокировать его.

1

Если бы я был вами, я бы пошел с вариантом 2. Подумайте о частоте, с которой вам нужно удалить запись в таблице, по сравнению с частотой, с которой вам нужно прочитать запись. Определенно частота чтения должна быть больше. Это можно легко управлять в запросах SELECT, используя некоторые предложения WHERE. Этот метод также очень удобен, когда дело доходит до написания кодов linq-to-sql или EF в C#.

1

Если ваши таблицы соответствуют второй нормальной форме (2NF), то если вы помечаете запись в T2 как неактивную (или мягко удаленную), тогда нет необходимости отмечать дочерние записи в T3 как неактивные. в соответствии с 2NF неактивный атрибут в T2 применяется только к T2, а не к T3.

+0

Лично я всегда использую T-SQL вместо EF и Linq-to-sql. Я думаю, это будет мой новый заголовок поиска. Что касается баланса нагрузки. В любом случае, спасибо за ваше предложение. –

Смежные вопросы