sql删除相关记录?

问题描述:

记录删除的最佳做法是什么? 哪个选项最正确?sql删除相关记录?

例如

有以下情况:

---- ----用户

INT usr_id

VARCHAR名

va rchar姓

布尔deleted_yn


--- subjects--

INT subject_id

VARCHAR标题

布尔deleted_yn


--- subject_to_user ---

INT subject_to_user_id

INT usr_id

INT subject_id

布尔deleted_yn


如果我想删除用户或受我需要删除关系 - subject_to_user?

为什么我问,因为在工作中有时用户删除一些信息,然后我们必须恢复该数据。 目前我们删除相关数据,但恢复非常困难;

所以我问什么是删除最佳做法? 哪个选项最正确?

我认为删除相关数据是正确的,但这取决于情况。

删除那里我的意思是标记deleted_yn true/false

最佳做法是不删除任何东西。为删除

添加立柱稍稍旗项目“请将isDeleted”和大多数查询您添加了“请将isDeleted WHERE =假”

+0

当然通过删除那里我的意思是,标记 - deleted_yn;所以问题是一样的,我需要将标记相关的数据删除吗? – marechs

+0

特别是如果您目前进行大量数据恢复。 –

+1

这取决于数据库的结构 - 如果你想所有的相关数据被标记为删除或不... – Yacov

在subject_to_user的相关数据是关系怎么样?带ID。

如果您从用户和主题中删除而不是subject_to_user,那么告诉您不会创建一个已经在subject_to_user中的ID的新用户?

这个想法是删除所有相关的数据。如果您需要恢复,则始终可以拥有另一组名为deleted_user,deleted_subject和deleted_subject_to_user的表。当你从你的主表中删除时,移动到之前的那些。

+0

想法:通过前缀delete_将数据移动到表格_有一定的意义,我会记住这一点,并试试这个:) – marechs

+0

你只需要两倍的表格。 – MPelletier

+0

如果采取这种方法,您还可以添加deleted_dt字段,以便按日期/时间进行恢复。 – phatfingers

Udi Dahan(我受到了无情的影响)在这个话题上写了一篇优秀的博客文章。你可以阅读它here,但总结是反映现实生活中发生的事情。

例如,在现实世界中,订单被“取消”,“返回”但从未真正删除 - 上下文非常重要。