具有多列的唯一索引/约束,一列可以为空

jfr*_*jfr 5 mysql index null

我的问题是是否有可能有由多列组成的唯一索引,其中一列可能包含NULL.

例子:命名“regulated_person” A表的数,包括列LAST_NAMEFIRST_NAMEBIRTH_DATEALIAS。的数据类型BIRTH_DATEdate,其他的则是 String/ VARCHARLAST_NAME,FIRST_NAME并且BIRTH_DATE不可为空,即它们需要值。ALIAS对于两个或更多人具有相同的名字/姓氏并且在同一天出生的情况,可作为决胜局。因为打破平局的情况并不常见,我想避免提供ALIAS值的需要,除非有必要。

作为后台,表的主键由自动增量生成器处理。唯一索引的目的是提供一个“业务键”,无需求助于主键即可识别行。我正在使用 MySQL 5.1.35 和 Hibernate ORM 版本。4.3.10.

欢迎任何有关除 MySQL 之外的服务器/数据库提供商的建议。

提前感谢您的任何指导,并提前为任何无意违反“论坛协议”的行为道歉,因为这是我第一次在任何地方提交问题。

ype*_*eᵀᴹ 6

由于alias列可以为空,如果添加了unique对复合材料的限制(last_name, first_name, birth_date, alias),仍然会有重复允许的,拥有相同的值在第3列NULLalias。当至少有一个值为空时,将跳过/接受该约束。关于 MySQL 的文档CREATE TABLE不是很清楚,但您可以测试其行为:

  • 一个UNIQUE索引创建的约束,使得该指数的所有值必须是不同的。如果您尝试添加具有与现有行匹配的键值的新行,则会发生错误。对于所有的发动机,一个UNIQUE索引,可以多NULL为可以包含列的值NULL

你可以做的是定义aliasasnot null并添加一个default值,(比如'NONE'or'DEFAULT'或空字符串'')。您(或用户)不必提供该值,它将自动保存在所有行中。一旦有人尝试添加与现有行具有相同姓氏、名字和出生日期的新行,unique约束将禁止它。我想你可以在那时添加一些过程,它会为 要求不同的值alias并添加新行。