Database design 所有空列的默认值

Database design 所有空列的默认值,database-design,Database Design,创建一个要求开发人员为所有空列指定默认值的策略有什么好处吗?是的,一致性 保持每个人都在同一页上是很重要的,这将确保您的开发人员不会在生产中获得意外的价值 我认为这是个好主意。如果您需要所有空列的默认值,您可以使它们都不为空 由于空值所涉及的三值逻辑,空值通常会引起混淆。例如,查询 select * from employee where job != 'MANAGER' 。。。可能需要返回所有非经理的员工。但是,当然,如果作业可以为null,那么此查询将不会返回作业为null的员工 这可能是

创建一个要求开发人员为所有空列指定默认值的策略有什么好处吗?

是的,一致性
保持每个人都在同一页上是很重要的,这将确保您的开发人员不会在生产中获得意外的价值


我认为这是个好主意。

如果您需要所有空列的默认值,您可以使它们都不为空

由于空值所涉及的三值逻辑,空值通常会引起混淆。例如,查询

select * from employee where job != 'MANAGER'
。。。可能需要返回所有非经理的员工。但是,当然,如果作业可以为null,那么此查询将不会返回作业为null的员工


这可能是默认值策略背后的基本原理

指定默认值只会转移问题,因为这些默认值本质上与空值具有相同的“含义”,因此您需要在代码中包含特殊的大小写来处理这些“特殊值”的“特殊含义”。

@TonyAndrews:

。。。可能需要返回所有非经理的员工。但是,当然,如果作业可以为null,那么此查询将不会返回作业为null的员工。这可能是默认值策略背后的基本原理

NULL是为了处理缺少的值而发明的,所以对于您的查询来说,在作业字段中不返回具有NULL值的行是完全合理的! 您要求DBMS返回作业不是“管理器”的行;这并不意味着不把那些不知道工作的人还给我。如果你也想失业,那就不同了

想象一下,可能有一些经理的工作字段为空(缺少,尚未输入),所以若数据库返回这些字段,查询结果将是绝对错误的


回到主要问题,我认为如果一个字段允许为NULL,那么在缺少值的情况下它应该为NULL,否则如果该字段从来没有缺少值(或者总是需要默认值),只需使用默认值使其不为NULL即可。这是基于特定条件下的业务逻辑。

是的,但你可以从“空意味着什么”中减少问题?在一堆问题空间中,“0的默认值意味着什么”。以上面的员工为例,虽然job==null的员工记录可能意味着该员工尚未分配工作,或者该员工已被解雇,但将员工默认为“unassigned”的记录更有意义。对于某些业务案例,虽然列具有默认值,但不可能,空值仍然是合法值?可以将空值放入具有默认值的可空列中。我可以想象,在大多数情况下,这会被认为是一个bug(忘记了将列设置为非null)。开发人员会说:“哎呀,我以为我在列上有一个默认值,为什么我在其中有这么多空值?”只有在插入中没有指定列,或者指定了列并传入default关键字时,才会使用默认值。然而,商业是一件有趣的事情,所以我想任何疯狂的要求都是可能的。用户说我希望字段默认为零,但有时也可以是未知的。