关于PostgreSQL中的空字段和空值的最佳实践

时间:2018-08-17 11:52:10

标签: java postgresql database-design

我正在编写一个简单的Web应用程序,向潜在的雇主展示我的编码技能。它与API连接并接收JSON文件,然后使用Jackson对其进行反序列化,并以表格形式显示在浏览器中。我想使用户能够使用Hibernate将Java对象保留在Postgres数据库中。我可以使用它,并且可以很好地完成工作,但是我想使其更高效。

只要JSON响应中没有要放入对象字段的数据(现在所有可能的JSON属性都以String字段的形式出现在Java类/休眠实体中),我就放一个空String({{ 1}}),然后在所有字段都包含某些东西且没有空对象的情况下,将其存储在数据库中。

我应该只存储已有的,不将空字符串放入数据库中(而是使用null)还是我现在正在以正确的方式进行操作?

2 个答案:

答案 0 :(得分:0)

Null是缺少值。空字符串是一个值。但这对内存影响不大。如果要重复显示数据,并且在检索时不希望从null转换为空字符串,则可以使用空字符串”。

但是,如果您要为空字符串”以外的其他值设置唯一约束,请使用null。

有时可以使用null和empty''来区分数据是否已知。对于已知但不可用的数据,请使用空白;对于未知数据,可以使用null。

答案 1 :(得分:0)

在未知值时使用NULL

切勿使用空字符串。

例如,如果您有一个客户没有提供他的地址,则不要说他的地址是'',请说它是{{ 1}}。 NULL明确声明“无价值”。

对于必须使您的Web应用程序正常工作的 值的数据库列,请在这些列上设置NULL数据约束的支持表。

在单元测试中,调用NOT NULL,..._ address_is_null_并测试成功或失败(取决于测试是否应该触发任何错误或触发异常)。

不建议在数据库中将NULL用作 sentinel ,这是一个特殊的值,表示除''以外的其他含义。那是因为我们不知道您的意思。另外,可能会有多个特殊情况,如果您首先使用'',则添加其他结构会更加困难(除非您陷入使用甚至更多特殊字符串来枚举其他特殊情况的错误做法)情况,例如“ 已删除”等)。