
个人感觉用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 PRO 一般软删除我都是直接移动记录到 deleted 表 只有少数情况管理后台才需要去查询 deleted ,大多数正常访问额外加上 deleted 不是的判断都会严重降低效率 |