最近在开发网络应用程序时,我决定在数据模型中使用 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/