在MIS应用中,经常可以遇到很多核心的规则,比如说:身份证必须18位,原来为15位,出生日期必须小于系统日期;年龄必须大于0等等.这些规则必须明确定义,否则数据一旦能存储到数据库,那么这种数据极有可能是错误数据,为以后系统大量实施后的分析带来很大的困难.
最明显的例子是日期类的字段,我们通常都需要对日期类字段进行查询分析,并且日期型字段一般范围比较广从
1900-01-01
到
9999-01-01
都是合法的日期范围,如果我们的程序在应用中没有做严格的判断,根据业务进行的严格判断!那么用户极有可能录入类似
6000-01-01
的数据,根据业务逻辑,这种数据可能是根本违法的数据;在这种时候我们需要在数据库保存前做最后的最重要的数据的验证,限制其规则.
大家都在讨论将应用于数据库无关,比如J2ee架构就想消除系统平台和数据库平台的区别;我对这个看法稍有微词;如果只把数据库做数据存储,是否有些浪费了数据库的强大功能,不用数据库的主外键约束,能否真正解决数据一致性问题完全不考虑数据库,能否处理异端苛刻情况下的性能问题.我不知道.
但我想,既然数据库提供了这么强大的功能,我们在适合使用的时候就应用使用;业务->模型->数据,应用总之要把数据存储到数据库中;数据才是最重要的财富.
那么在数据进入数据库之前,我们为什么不利用数据库的功能做最后的,最关键的内容约束和验证呢?