Postgresql复合唯一键(LastName、FirstName、MiddleName)不工作?

Postgresql复合唯一键(LastName、FirstName、MiddleName)不工作?,sql,postgresql,laravel,unique,Sql,Postgresql,Laravel,Unique,我在Laravel(postgresql)中有以下模式 正如您所注意到的,我有一个由lname、fname和mname组成的复合唯一键。但是,我将mname设置为nullable(),因为并非所有人都有中间名 但是,在向数据库添加数据时(postgresql) 它成功地保存了!我做错了吗?解决这个问题的方法是什么?请帮助。记住基本规则: NULL!=空或空 即使两者都有NULL值,也无法对其进行比较,因为它们未定义NULL不等于零NULL等于未定义。像这样想一个NULL就像Chuck Norri

我在Laravel(postgresql)中有以下模式

正如您所注意到的,我有一个由
lname
fname
mname
组成的复合唯一键。但是,我将
mname
设置为
nullable()
,因为并非所有人都有中间名

但是,在向数据库添加数据时(postgresql)


它成功地保存了!我做错了吗?解决这个问题的方法是什么?请帮助。

记住基本规则:

NULL!=空或空

即使两者都有
NULL
值,也无法对其进行比较,因为它们未定义
NULL
不等于零
NULL
等于未定义。像这样想一个
NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比

因此,你的钥匙:

Last1 NULL First1
Last1 NULL First1 
是唯一的,因为
空值
不可比较


要使其正常工作,请将
NULL
中间名默认为
'
字符串或零长度字符串。

记住基本规则:

NULL!=空或空

即使两者都有
NULL
值,也无法对其进行比较,因为它们未定义
NULL
不等于零
NULL
等于未定义。像这样想一个
NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比

因此,你的钥匙:

Last1 NULL First1
Last1 NULL First1 
是唯一的,因为
空值
不可比较


要使其正常工作,请将
NULL
中间名默认为
'
字符串或零长度字符串。

记住基本规则:

NULL!=空或空

即使两者都有
NULL
值,也无法对其进行比较,因为它们未定义
NULL
不等于零
NULL
等于未定义。像这样想一个
NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比

因此,你的钥匙:

Last1 NULL First1
Last1 NULL First1 
是唯一的,因为
空值
不可比较


要使其正常工作,请将
NULL
中间名默认为
'
字符串或零长度字符串。

记住基本规则:

NULL!=空或空

即使两者都有
NULL
值,也无法对其进行比较,因为它们未定义
NULL
不等于零
NULL
等于未定义。像这样想一个
NULL
就像Chuck Norris,因为没有什么可以和Chuck Norris相比

因此,你的钥匙:

Last1 NULL First1
Last1 NULL First1 
是唯一的,因为
空值
不可比较



要使其正常工作,请将默认的
NULL
中间名改为
'
字符串或零长度字符串。

请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令产生的实际SQL运行。要获取表定义,请连接
psql
并运行
\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接
psql
并运行
\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接
psql
并运行
\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。但是,不要剥夺一个人奋斗和经验的特权,对吗?当你尝试插入另一个叫John Smith的人时会发生什么?请显示ORM/任何抽象工具生成的实际表和约束,以及insert命令所产生的实际SQL运行。要获取表定义,请连接
psql
并运行
\dt members
。对于SQL,请从ORM查询日志中找到它。请阅读并重新考虑此模式。@CraigRinger这篇文章非常好,但我相信他需要更好地理解null的概念。用名字作为钥匙在某个时候会让你很难受。然而,不要否认一个人有奋斗和经验的特权,对吗?当你试图插入另一个叫约翰·史密斯的人时会发生什么?小小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:真、假、未知。@Denis yes unknown是正确的,但是Chuck Norris的比较不太好。微小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:真、假、未知。@Denis yes unknown是正确的,但是Chuck Norris的比较不太好。微小的挑剔:正确的术语应该是未知的,而不是未定义的。对于三值逻辑:tr