首页 > 解决方案 > 空数组在 PostgreSQL 中是否等于 NULL,还是里面有 NULL 的数组?

问题描述

假设我想为用户提供一系列关注者和关注者,所以我创建了一个用户表,如下所示:

CREATE TABLE users (
  user_id SERIAL PRIMARY KEY,
  email VARCHAR(64) NOT NULL UNIQUE,
  username VARCHAR(64) NOT NULL,
  password TEXT NOT NULL,
  following INT[],
  followers INT[]
);

现在,我希望用户能够没有关注者或不关注任何人,所以我应该允许这些字段的 NULL 值还是应该只有一个空数组?如果第二种选择更好,我该如何实施?空数组是否自动等于 NULL?我宁愿把它作为一个空数组,根本没有任何 NULL 值,那么我应该怎么做呢?

标签: sqldatabasepostgresql

解决方案


您应该使用一个空数组。

NULL 值表示“未知”,因此在这样的条件下它不会像预期的那样工作:

WHERE NOT ARRAY[42] <@ followers

<@是“包含”运算符,结果不会TRUEif followers IS NULL

我还建议避免将 NULL 值存储为数组元素。包含 NULL 的数组与空数组不同,同样,NULL 的语义可能会导致混淆。


推荐阅读