【发布时间】:2020-07-14 15:13:22
【问题描述】:
我很好奇 MySQL 是否在这里也有方法。
我们有大量的稀疏表(医疗行业在这方面可能有点痛苦),其中有大量的列可以为空(或没有值/未知)。我们在数据库之上的微服务是 java它支持空值(或者对我们来说不存在)。我们还使用休眠提前将@NamedQuery JQL 预编译为 SQL(因此无法在查询翻译时翻译 u.col = :col 以包含 u.col 是null vs. u.col = null)。这意味着 hibernate 生成的 u.col = null 并不真正符合 SQL 标准(这真的太糟糕了,因为它会非常好,并且一直是我们雇用的每个开发人员的困惑之源。 ..即使是一些高级开发人员。我不明白他们为什么不只是消除那里的混乱 - 至少对于具有空值的语言来说会很好)。
然后我们有一个例子(但通常更像是 5/6 列)
firstName, middleName, lastName
我认为很明显我们不想要
John null Smith
在数据库中两次。那是没有意义的。不幸的是,我们可以有 2/3 列带有空值。然后,SQL 标准允许我们拥有大量重复项,并提前知道哪些值可以为空(我们只是不知道,因为每个客户都不断提出独特的情况,其中突然其中一列为空)。
这意味着像下面这篇文章中的第一个答案对我们来说不是很有用(因为您必须提前了解所有情况)...
Create unique constraint with null columns
(他有一个很好的答案!)唉,我们不得不猜测,这将是错误的。有什么方法可以告诉 postgres 在 5 列上创建索引并让空值是唯一的而不是不匹配的。
另一种方法是将 postgres 中的每个值都默认为 0 长度的字符串。我不确定postgres如何对待这些。我记得 oracle 只是将其视为 null。
关于如何在这里处理 postgres 有什么想法吗? MySQL 有什么东西可以解决这个问题吗?
谢谢, 院长
【问题讨论】:
标签: mysql postgresql