Postgresql 在外键列中,我应该使用null还是0表示“0”;“没有价值”;

Postgresql 在外键列中,我应该使用null还是0表示“0”;“没有价值”;,postgresql,postgresql-9.4,Postgresql,Postgresql 9.4,假设我有一个项的表,其中一列是color\u id,这是colors表的外键。并非所有物品都有颜色。如果使列为空,那么当我在where子句中引用颜色时,我可能需要使用 where color_id is not distinct from ? 而不是简单的 where color_id = ? 。。。在这种情况下,?可能为空,以搜索没有颜色的项目。这是个坏主意吗?我不介意冗长,但我在某个地方读到索引不起作用,因为与没有区别,我的第一次实验证实了这一点。使用的查询与使用=的查询没有区别,所用的

假设我有一个
项的表
,其中一列是
color\u id
,这是
colors
表的外键。并非所有物品都有颜色。如果使列为空,那么当我在
where
子句中引用颜色时,我可能需要使用

where color_id is not distinct from ?
而不是简单的

where color_id = ?
。。。在这种情况下,
可能为空,以搜索没有颜色的项目。这是个坏主意吗?我不介意冗长,但我在某个地方读到索引不起作用,因为
没有区别,我的第一次实验证实了这一点。使用
的查询与使用
=
的查询没有区别,所用的时间比使用
=
的查询要长得多


colors
中创建一行表示“无颜色”是否更好,可能是
id=0
,然后创建
项。color\u id
a
not null
列?

我认为文档和语义正确性值得额外按下一些键,但这有点基于观点。同意。我更新了这个问题,以澄清我更关心的是,不使用
上的索引与
=
上的索引没有区别。如果Postgres不能使用索引,我会感到惊讶。您可以通过
EXPLAIN
进行检查(尽管可能还有其他原因导致它不选择使用索引)。我尝试了多次使用EXPLAIN进行查询,它正在进行顺序扫描。我也很惊讶!可能对它使用parital index是空的条件会有所帮助。