在数据库设计中对字段是否可空的设计大家是如何处理的?
    如果将除了主键的其他字段都设置为可空,然后再在程序中进行控制,这样跟在数据库中控制字段是否可空有何区别?会产生一些不好的因素吗?

解决方案 »

  1.   

    一般是否可空是通过程序来实现的,这样程序的友好性更好。如果数据库设置的话有些情况可能会有问题,比如说一个表有多个功能,需要多人协作来完成的功能。操作应该是先INSERT 后update .如果设置为非空,插入时就会出错。
      

  2.   

    1,数据库中设定字段是否为空,是用来格式化数据的,考滤数据完整性.
    比如昨天有人问
    select * from tb where a not like '%a%'
    那么 a为null的也不出现.
    数据不进行格式化,对一些经验不足的朋友来说,在程序处理时,就会发生一些意想不到的事.
    除此之外,即便写为
    select * from tb where a not like '%a%' or a is null
    或 where isnull(a,'') not like '%a%'
    数据检测处理完成了, 但 isnull或 is null的处理,效率不高. 从性能上来看,我们也要求数据格式化.
    所以一般情况下, 尽量要求数据不允许为空, 不需要写值的字段给默认值.
    比如 tb里的a,不写值的话给 ''
    当然,如果null在项目开发时,已被设定为某一个项状态的约定,那么就不能给默认值了,否则就与业务逻辑冲突了.2,程序中进行是否为空的设置,这个主要依赖业务逻辑的,跟数据表的设置没大关系.