因此,我正在为一个个人项目创建一个数据库,目的只是为了更好地了解PostgreSQL以及某些可以使用PostgreSQL数据库的语言和应用程序.

我意识到使用数组甚至不一定是兼容的(数组不是原子的,对吧?)用1NF.所以我的问题是:这种方式是否缺乏效率或数据安全?我应该早点学会不使用数组吗?

推荐答案

Short answer to the title:不是

A bit longer answer:

您应该学会在适当的时候使用array.数组本身的设计并不差,它们就像一个字符可变字段一样是原子的(字符数组,不是吗?)它们的存在是为了让我们的生活更轻松,让我们的数据库更快更轻.在可移植性方面存在一些问题(大多数数据库系统不支持数组,或者以与Postgres不同的方式支持)

例子:

您有一个包含帖子和标签的博客,每个帖子可能有0个或更多标签.首先想到的是创建一个具有两列postidtagid的不同表,并在该表中分配标记.

如果我们需要用tagid搜索帖子,那么就需要额外的表(当然要有适当的索引).

但是,如果我们只想将标签信息显示为帖子的额外信息,那么我们可以很容易地在帖子表中添加一个整数数组列,并从那里提取信息.使用额外表仍然可以做到这一点,但是使用数组可以减小数据库的大小(不需要额外表或额外行),并通过允许我们执行SELECT查询来简化查询,只需连接一个较少的表,而且看起来更容易被人理解(最后一部分在旁观者眼中,但我想我在这里代表了大多数).如果我们的标记是预加载的,那么甚至不需要一个连接.

这个例子可能很糟糕,但这是我第一次想到的.

Conclusion:

不需要array.如果你使用不当,它们可能是有害的.您可以在没有它们的情况下生活,并拥有一个强大、快速和优化的数据库.当您考虑可移植性时(例如,重写系统以使用其他数据库),则不能使用array.

如果您确定要坚持使用postgres,那么您可以在您认为合适的地方安全地使用array.它们的存在是有原因的,既不是糟糕的设计,也不是不合规的.当您在正确的位置使用它们时,它们可以帮助简化数据库 struct 和代码,以及优化空间和速度.仅此而已.

Database相关问答推荐

为多个列 Select 最新的非空值

存储具有公共链接但 ID 很长的用户文件是否安全?

数据库设计:文件路径的首选字段长度

SQLServer:如何对按外键依赖性排序的表名进行排序

如何开始使用 SQLCipher for android?

MySQL 中的多个 OR 子句

如何使用 INSERT ... ON CONFLICT ... 更新所有列?

mySQL 复制是否具有即时数据一致性?

如何在 SSIS 中插入新记录之前清空我的目标表?

PDO SQL 状态00000但仍然错误?

如何配置 NLog 以写入数据库?

我如何做大于/小于使用 MongoDB?

SQLite3 UNIQUE 约束失败错误

App=EntityFramework 在 Sql 连接字符串中有什么作用?

MongoDB 是否支持浮点类型?

如何解析来自 Google 快讯的数据?

Spring data : CrudRepository 的保存方法和更新

包含 8000 万条记录并添加索引的表需要超过 18 小时(或永远)!怎么办?

使用命令行在 Mysql 中导入压缩文件

清空数据库是什么意思?