软删除用户表?或者还有另一种选择吗?

can*_*out 2 mysql ruby-on-rails soft-delete

我的头脑正在阅读所有关于软删除的专业文章和文章.但这是我知道实现这一目标的唯一方法:

维护外键和用户信息(历史数据)即使用户被删除/不活动,注释,附件和故事表中也有外键.因此,仍然可以确定是谁写了这篇评论等.

其他信息:

停用的用户无法登录,也不会包含在列表中.

但是如果我使用软删除,那么每次查询该表时,在sql语句的WHERE中添加额外的列并不是很好.

该怎么办?希望你们能提供一些意见.

注意:我使用mysql和ROR

Mik*_*ll' 6

如果"软删除"用户,则不要在每个SQL语句的WHERE子句中添加额外的列.而是构建一个仅返回活动用户的视图,并且需要了解活动用户的查询使用该查询.他们不使用基表.

它可能看起来像这样.

create view users_active as
select * from users
where deleted = false;
Run Code Online (Sandbox Code Playgroud)

根据您到目前为止所做的开发量,您可能希望重命名users表,并将新视图命名为"users".沿着这些方向的东西...

alter table users rename to users_all;

create view users as
select user_id, user_name from users_all   -- All columns except "deleted"
where deleted = false;
Run Code Online (Sandbox Code Playgroud)

现在,任何曾经命中"用户"表的查询都会点击"用户"视图.逻辑数据独立性 - 这就是视图和表在关系模型中共享相同名称空间的原因.