关于数据库表字段设计的一点经验
项目中我们通常使用ORM对数据库进行读写操作,在更新一条记录时大部分时候我们会先从数据库读取该记录,修改数据库实体类实例的属性后再更新。如果读取该记录时,返回字段列表未使用*或全部字段而是只返回部分字段,那么其它体类实例的其它属性值则为null,这样更新可能将表中对应字段也覆盖成null。
大多ORM可以跟踪属性变化或有快照功能,可以只更新修改过的字段。但是若忘记使用快照或其它原因,就很可能把不该为null的字段覆盖为null了。这时关于数据库表字段设计的一点经验就是:
1、除时间类型等字段外,字段都设为不允许null,防止把不该为null的字段覆盖为null;
2、除时间类型等字段外,字段使用默认值,以避免使用null值(如字符串使用空、数值使用0,逻辑使用false等)。
当然对应的数据库表实体类的属性默认值应为null,以防将未变更的相应字段覆盖为默认值。