|
|
1
2
我不得不不同意伊恩的观点。三值逻辑和二值逻辑一样可行。桌子上的人是活着还是死了,或者你不知道他是活着还是已经死了。如果迈克有他的方式,你不能在这里使用一点。你需要一个FK到状态表,1=活着,2=死亡,3=未知。 该位的全部目的是节省空间,您始终可以将列设置为CHAR(1),并使用约束将值限制为T或F、Y或N(或U)。 但我认为伊恩误解了迈克说的话。Mike并不反对使用Nulls,毕竟他认为在流程完成之前,EndDate列应该为null。他只是说不要在列中为空值注入神秘属性。..就像它是知道一个进程是否处于某种状态的关键。 事实上,数据库中的null具有某些非常有用的副作用。Oracle(可能是其他数据库)不索引空值。所以,如果你有一个只有一个值很重要的列,比如说你有一份永远不会清除的员工列表和一个索引的is_Active_Employment位列。在这种情况下,对于一家成熟的企业,您拥有的员工人数>>>比你现在的员工人数还要多。假设你有1%的1和99%的0。 该索引比需要的大99倍。它正在索引所有的1,这很好,因为它们是表的1%,但它也为你永远无法使用该索引查找的行加载了0。如果你想要所有不活跃的员工,索引将被忽略,并执行FTS。因此,从数据库的角度来看,1和NULL的效率要高得多。 |
|
|
2
1
依我之见,你不应该在bit/boolean字段中允许null。 Mike Hadlow在这里有一个很好的帖子: http://mikehadlow.blogspot.com/2006/10/nullability-voodoo.html 根据定义,布尔值是一种双态类型。通过使其可以为空,您添加了第三个状态。它会在某个时候回来困扰你。 |