java - 使用空字符串而不是 null - 一个好的做法?

标签 java hibernate database-design

考虑数据库中的例子:

CREATE TABLE users (
  id INTEGER IDENTITY PRIMARY KEY,
  last_name VARCHAR (50) DEFAULT '' NOT NULL,
  first_name VARCHAR (50) DEFAULT '' NOT NULL,
  email VARCHAR(50) DEFAULT '' NOT NULL)

并考虑使用 Hibernate 作为 ORM 与该数据库交互的程序。

在我看来这意味着:

  • 避免空指针异常
  • 避免检查空值的需要

这是好的做法吗?请举例说明优缺点。

最佳答案

正如 PeterMmm 所写,“Null”具有特殊含义,通常由数据库引擎中的特殊运算符支持。

“良好实践”是那些可以表达任何意思的短语之一,但稍微解释一下论点:

  • 可维护性:坏主意。大多数开发人员习惯于在数据库系统中实现 NULL 的方式,并且需要在您的设计中接受特殊培训。

  • 容错:坏主意。如果一列不允许为空,这通常意味着您的应用程序设计中的某些内容。如果用户记录必须有一个有效的电子邮件地址,您现在不能再在数据库级别验证它 - 因此您的数据库可能会逐渐填满虚假数据,并且您只有在尝试发送电子邮件时才会发现到 ''。 “空指针”异常是特性,不是错误!

  • 性能:根据 http://www.sql-server-performance.com/2007/datatypes/ , NULL 比较慢。

关于java - 使用空字符串而不是 null - 一个好的做法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7723242/

相关文章:

java - 您可以在不使用 JTA 的情况下在 OSGi 环境(如 Karaf)中使用 Hibernate 5.2 StatelessSession 吗?

java - 二维数组的相邻值 (java)

java - 在 sqlite 上使用图像的更有效方法?

java - 如何诊断和修复 hibernate/jpa 显然没有正确发送 unicode 字符作为 SQL 2008 上查询的参数

java - 在没有选择语句的情况下强制 Hibernate 插入

database-design - 在数据库中存储行之间的顺序的最佳方法是什么?

java - 在没有 Spark 的 Scala 中使用 parquet-mr

java - hibernate auditions 为一个表中的多个插入生成相同的 rev id

json - 解析json结构的速度

ruby-on-rails - 搜索特定表是否比在特定表中搜索特定条目更快?