sql - 空数组在 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 值,那么我应该怎么做呢?
解决方案
您应该使用一个空数组。
NULL 值表示“未知”,因此在这样的条件下它不会像预期的那样工作:
WHERE NOT ARRAY[42] <@ followers
这<@
是“包含”运算符,结果不会是TRUE
if followers IS NULL
。
我还建议避免将 NULL 值存储为数组元素。包含 NULL 的数组与空数组不同,同样,NULL 的语义可能会导致混淆。
推荐阅读
- graph - 使用实体解析连接图
- javascript - 在 C++ 节点 nan 插件中处理 JavaScript 对象
- laravel - 推送器身份验证未按预期工作
- ios - 在 Objective C 中通过 Pinterest API 删除 Pinterest pin
- c# - selenium 错误的 xpath 与 li c#
- python - 从 ALS(交替最小二乘法)算法获取分析的用户组
- php - 使用 Docker 执行内置 PHP 服务器文件
- azure - 在没有 rbac 问题的情况下在 aks 中部署 nginx-ingress
- angular - 如何在angular5中列出ng2-select中的客户?
- python - 从 Telegram 的私人频道转发帖子