因此,我正在为一个个人项目创建一个数据库,目的只是为了更好地了解PostgreSQL以及某些可以使用PostgreSQL数据库的语言和应用程序.
我意识到使用数组甚至不一定是兼容的(数组不是原子的,对吧?)用1NF.所以我的问题是:这种方式是否缺乏效率或数据安全?我应该早点学会不使用数组吗?
因此,我正在为一个个人项目创建一个数据库,目的只是为了更好地了解PostgreSQL以及某些可以使用PostgreSQL数据库的语言和应用程序.
我意识到使用数组甚至不一定是兼容的(数组不是原子的,对吧?)用1NF.所以我的问题是:这种方式是否缺乏效率或数据安全?我应该早点学会不使用数组吗?
Short answer to the title:不是
A bit longer answer:
您应该学会在适当的时候使用array.数组本身的设计并不差,它们就像一个字符可变字段一样是原子的(字符数组,不是吗?)它们的存在是为了让我们的生活更轻松,让我们的数据库更快更轻.在可移植性方面存在一些问题(大多数数据库系统不支持数组,或者以与Postgres不同的方式支持)
例子:
您有一个包含帖子和标签的博客,每个帖子可能有0个或更多标签.首先想到的是创建一个具有两列postid
和tagid
的不同表,并在该表中分配标记.
如果我们需要用tagid搜索帖子,那么就需要额外的表(当然要有适当的索引).
但是,如果我们只想将标签信息显示为帖子的额外信息,那么我们可以很容易地在帖子表中添加一个整数数组列,并从那里提取信息.使用额外表仍然可以做到这一点,但是使用数组可以减小数据库的大小(不需要额外表或额外行),并通过允许我们执行SELECT查询来简化查询,只需连接一个较少的表,而且看起来更容易被人理解(最后一部分在旁观者眼中,但我想我在这里代表了大多数).如果我们的标记是预加载的,那么甚至不需要一个连接.
这个例子可能很糟糕,但这是我第一次想到的.
Conclusion:
不需要array.如果你使用不当,它们可能是有害的.您可以在没有它们的情况下生活,并拥有一个强大、快速和优化的数据库.当您考虑可移植性时(例如,重写系统以使用其他数据库),则不能使用array.
如果您确定要坚持使用postgres,那么您可以在您认为合适的地方安全地使用array.它们的存在是有原因的,既不是糟糕的设计,也不是不合规的.当您在正确的位置使用它们时,它们可以帮助简化数据库 struct 和代码,以及优化空间和速度.仅此而已.