关于数据库null/not null/default的思考

=== 总原则 ===

1. 为确保数据完整性和逻辑性,重要字段,配置字段,影响多个关系或者程序运行的字段(如:trans_id_sql_str(抓取程序要用它来查询数据库),应尽量not null

2. 在not null的状况下,不该不加考虑地给default值,不然将形成数据误导, 应只对重要性不高,或者逻辑上能够给default值的给default值,如性别-未知,初始金额-0,初始计数-0,时间-now()等

3. 在table注释或api文档中,应明确提示字段状况:sql

- not null (must supply anytime)
- not null (grauntee by default or trigger)
- allow null (be careful!)

4. 在sql程序或应用程序中,应严格按上面的api文档,该判断null的判断null,不应判断的不要乱判断,以避免引发误导。而且可以使程序的逻辑更为清晰。 数据库

5. 在是否null和是否给默认值的状况下,不该因考虑批量导入不完整的初始数据或测试数据的方便性而作出妥协。 

=== allow null 的典型状况 ===

1. 外键缺失
将缺失外键默认设为0(对应一条id为0的假数据)是个坏主意,会带来比null更大的麻烦——关系误导从而产生连环错误。故这种状况仍是应显式指明能够为null,明确表示关联关系不存在。

2. 确实可能一会儿提供不了,而且也不会有重大或连锁影响的。
如:用户 UA,给默认值''是毫无心义的。 
相关文章
相关标签/搜索