个人感觉用Boolean
性能上应该会好点,DateTime
还要获取当前时间,但用DateTime
即可以记录删除状态,也可以记录删除的时间。
大家一般用哪个?
1
zonghua 2016-06-15 10:39:12 +08:00
我也想问,如果用其他 ORM 框架的话怎么方便地去实现
|
2
kenshinhu 2016-06-15 10:42:18 +08:00
Boolean + UpdateTime 方式应该会更新
|
3
kenshinhu 2016-06-15 10:42:34 +08:00
打错字,是 Boolean + UpdateTime 方式应该会更好
|
4
robertlyc 2016-06-15 10:42:46 +08:00
可以参考 paranoia 建议用 datatime
|
5
loading 2016-06-15 10:48:56 +08:00 via Android
都考虑到获取时间的开销了…请问贵公司是哪家?
|
6
Numbcoder 2016-06-15 10:50:35 +08:00
deleted_at
|
7
solaya 2016-06-15 11:00:31 +08:00
参考 eloquent
|
8
zsx 2016-06-15 11:01:51 +08:00
Laravel Eloquent softDelete 是 deleted_at
|
9
learnshare 2016-06-15 11:03:29 +08:00
Boolean 记录数据状态, Time 记录操作时间,可以共存。
可以扩展一整套操作记录日志的数据出来,记录所有操作(谁,什么时间,干了啥)。 |
12
loading 2016-06-15 11:19:55 +08:00 via Android
|
13
hwsdien 2016-06-15 13:29:50 +08:00
deleted_at
|
14
greenmoon55 2016-06-15 13:35:38 +08:00
这点开销无所谓吧,可以两个都记
|
15
CrowQu 2016-06-15 13:35:48 +08:00
用 boolean ,除去性能上的考虑以外,代码逻辑、维护成本会很低。数据库中尽量少用一个字断代表多个含义。
|
16
kenshinhu 2016-06-15 13:37:31 +08:00
@korvin updateTime 是用来保存 该记录的修改时间(save 触发), 使用 Boolean 来作为 删除的软标记,那就可以知道删除时间或 save 触发的上一次时间点
|
17
mko0okmko0 2016-06-15 14:34:34 +08:00
我个人是 long 栏位,放的是 UTC/GMT 时间转整数,全球一致大好.
注解栏写上负值意义,例如预设-1 就是未删除,-2=xx,-3=yy...正值就是有删除而且有时间精确到毫秒. 缺点是要查"每周三谁删除了什么"这种时间范围查找比较难搞,有这种需求就用时间日期栏位.注解预设时区. 然后独立出状态栏位,文字栏或是数字状态栏位都可. updateTime 这栏会因为任何变更导致更新此栏,避免问题所以不优先考虑. bool 栏位假如有天要换资料库就难搞,不是每个资料库都有, 用整数栏位性能相等,状态值更多选择. "如果可以"一栏描述完成,我"尽量不用"更多栏位.长长的栏位光是建模或是描述就很头痛. |
18
aiguow 2016-06-15 14:36:24 +08:00
删除时间应该用另一个表存(记录操作日志的表)
|
19
hantsy 2016-06-15 14:38:56 +08:00
@korvin 实际上这只是 Audit 的一部分,所有重要的修改( Create , Update , Delete )都应该是可查的。。。 Hibernate Envers 可以管理这些操作。
但之前的项目采用一些自定义的方案。 1. 标志 Delete 。。。 deleted(boolean), deleted_at(Date), deleted_by(User) 2. 生成 Event LOG 记录。 3. 所有标志为 Deleted 的记录对普通用户不可见,对 Admin 可见,用 Hibernate @Filter 可实现。 4. 操作以事件方式,可能通知其它变化,比如从 ElasticSearch 中删除对应的 Index 。 |
20
cloverstd 2016-06-15 14:42:25 +08:00
我想知道如果用软删除,是在删除的时候把所有的关联都标记为删除
还是只是标注删除的那一行,然后查询的时候,用 join 去查询呢 |
22
nandaye 2016-06-15 16:14:59 +08:00
数据仓库会用 “标记+时间”
|
23
realpg 2016-06-15 21:03:00 +08:00
一般软删除我都是直接移动记录到 deleted 表
只有少数情况管理后台才需要去查询 deleted ,大多数正常访问额外加上 deleted 不是的判断都会严重降低效率 |