PostgreSQL - 整数[]最佳实践

2024-01-01

最近在开发一个网络应用程序时,我决定在数据模型中使用整数[]。有 2 个表,一个包含文章数据,第二个包含标签(标签 ID 和描述),决定在article.tags integer[] 列中标记一篇文章的标签 ID。

As 米伦·拉德夫 https://stackoverflow.com/users/15785/milen-a-radev指出:

提示:数组不是集合;搜索特定的数组元素可能是数据库设计错误的标志。考虑使用一个单独的表,其中每个项目都有一行,该项目将成为数组元素。这将更容易搜索,并且对于大量元素来说可能会更好地扩展。

不仅如此,结果还必须使用 JDBC 和 iBatis 来处理整数[],我应该说“有趣”。

目前,我可以摆脱我必须做的事情的工作实施。为了简单起见,它可能会使用存储article.id 和tag.id 关系的单独表进行重新设计。

最后,我很困惑整数[]最适合什么用途以及在什么情况下使用?

我想我经过一番努力才明白它不适合什么。


在处理树结构(例如注释线程)时,我在 PostgreSQL 中使用了数组。您可以将从根到节点的路径存储为分支编号数组。然后,以正确的显示顺序拉出整个树就很简单了:

SELECT stuff
FROM comments
WHERE thread = X
ORDER BY path -- This would be the array.

PostgreSQL 以唯一合理的方式比较数组。使用数组作为从根开始的路径还为您提供了一种计算节点深度的简单方法。您可以使用字符串(例如每个分支编号 3 个基于 96 的数字)和 ASCII-betical 排序来达到相同的目的,但数组更清晰。

是的,还有其他处理树的方法,这些方法更加迂腐正确,但使用数组提供了非常清晰的实现。如果我进行了大量的树操作,那么维护路径数组将涉及大量繁忙的工作,因此我可能会采用不同的表示形式。

不完全是 Java 特有的,但在某些情况下,数组是手头数据的自然且有用的表示(甚至在 SQL 中)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PostgreSQL - 整数[]最佳实践 的相关文章

随机推荐