FALSE 和 TRUE 与 NULL 和 TRUE

OTA*_*TAR 3 sql postgresql plpgsql postgresql-9.5

我有类型的列BOOLEAN

首先(在INSERT),值将始终为FALSE,只有在之后才可以将列更新为TRUE

所以问题是:制作此列NOT NULL DEFAULT FALSE,或制作此列DEFAULT NULL然后更新为TRUE(如果那么也将反转更新,设置列NULL而不是FALSE值,所以在这种情况下,永远不会使用FALSE值)

从性能和节省存储角度来看,哪种选择会更好?

Joe*_*orn 5

它对存储没有任何意义的影响。根据其他可为空的列,如果此列碰巧将可为空的位图溢出到下一个字节,那么我们最多谈论一个字节,但很可能它根本不会添加任何存储。

对于性能(以及程序员的生产力/维护),这在很大程度上取决于您计划如何使用它。这里的信息远远不够,如果不邀请任何真正阅读此问题的人参加您的所有项目会议,也不可能获得足够的信息。

就我个人而言,当我有一个默认为 false 的布尔列(无论您选择如何表示它),然后在某个时刻变为 true 并保持 true时,我喜欢使用可为空的DateTime列作为该值,其中任何日期都意味着该值为 true,NULL 表示 false。我的经验是,您几乎总是最终想知道该值变为真实的日期和时间。

举个例子,我在高等教育机构工作。这项业务中发生的一件事是向学生发送经济援助奖励信。然后学生签名并退回信件。已接受的奖项稍后可能会被拒绝或取代,但这不会改变学生已签署这封信并接受该奖项的事实。法规要求我们将这些信件存档,但从数据库的角度来看,只需知道信件中的奖项是否被接受的布尔问题就足够了。很快我们就发现我们还需要知道奖项何时被接受。因此,该字段使用日期时间列。