@
stach 要说理论都很抽象,我就举个 Java Hibernate 的例子吧。
Java 对象:
class Entity{
Integer intValue = null;
Integer intValueHasDefault = 2;
String stringValue = null;
Decimal decimalValue = null;
Boolean isSuccess = false;
Boolean isHasError = true;
}
默认映射方式下的数据库表:
create table entity(
int_value int default null,
int_value_has_default int default 2,
string_value varchar(255) default null,
decimal_value number default null,
is_success bit/tinyint default 0,
is_has_error bit/tinyint default 1,
)
java 对象这边,默认值是否是 null,完全取决于业务的需要,不用考虑数据库。查询更新数据操作的都是 Java 对象,不是 SQL 语句。
数据库这边,如果 DBA 确定性能上不适合用 null,那么修改数据库和映射关系。
上面这种设计方式,必须要完整 ORM (本例中是 Hibernate )的支持,在国内还不是主流。国内用得多的是半 ORM ( MyBatis ),还没有解开业务开发和数据库开发。