java - PostgreSQL - 整数 [] 最佳实践

标签 java sql postgresql jdbc ibatis

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

作为Milen A. Radev指出:

Tip: Arrays are not sets; searching for specific array elements can be a sign of database misdesign. Consider using a separate table with a row for each item that would be an array element. This will be easier to search, and is likely to scale better for a large number of elements.

不仅如此,而且不得不使用 JDBC 和 iBatis 处理 integer[],我应该说“有趣”吗?

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

最后,我对 integer[] 最适合用于什么情况以及在什么情况下使用感到困惑?

我想我已经弄清楚了它不适合的地方。

最佳答案

在处理评论线程等树结构时,我在 PostgreSQL 中使用过数组。您可以将从根节点到节点的路径存储为分支编号数组。然后,以正确的显示顺序拉出整棵树是一件简单的事情:

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

PostgreSQL 以唯一明智的方式比较数组。使用数组作为从根开始的路径还可以让您轻松计算节点的深度。您可以使用一个字符串(比如每个分支号有 3 个 base-96 数字)和 ASCII-betical 排序来达到相同的目的,但数组要清晰得多。

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

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

关于java - PostgreSQL - 整数 [] 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4797323/

相关文章:

SQL Server UNION - 默认 ORDER BY 行为是什么

postgresql:带有选择查询的 INSERT INTO 语句

postgresql - 从 Postgres 服务确定集群目录

java - 通过 cmd 提示符运行 java 时未得到预期结果

java - new String() 与文字字符串性能

java - 我们可以借助另一个类的构造函数来初始化一个对象吗?

java - 如何在 Android Studio 上使用 View 参数调用方法

mysql - 联合两个表并重命名表特定列

c# - 从存储过程刷新数据

postgresql - FluentMigrator Postgres(Npgsql) 引用