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