PostgreSQL有效存储ID列表的方法

时间:2016-04-28 11:26:55

标签: postgresql

在我的PostgreSQL中,我有两个表boardcards表,它们之间有OneToMany个关系(一个board可以有多个cards)。< / p>

用户可以在电路板上放几张卡片。为了实现此功能,我通常会创建另一个名为cards_on_hold的{​​{1}} {{}}}表,并将保留ID放在此表中。为了获取电路板的这些数据,我会在OneToManyboard之间使用JOIN。

PostgreSQL中有没有更有效的方法来存储持有ID的卡?例如,某些功能可以将此列表内联存储在cards_on_hold表中?我稍后需要在board SQL子句中使用此ID列表来过滤卡片组。

1 个答案:

答案 0 :(得分:4)

Postgres确实支持整数数组(假设你的id是整数):

http://www.postgresql.org/docs/9.1/static/arrays.html

然而,与单独的表相比,操纵该数据有点困难。例如,使用单独的表格,您可以提供唯一性保证,这样您就不会有重复的ID(假设您需要)。要使用数组实现相同的功能,您必须创建一个存储过程来检测重复项(例如,在插入时)。那将很难(如果可能的话)与简单unique约束一样有效。更不用说你失去了一致性保证,因为你不能在这样的数组上加上外键约束。

因此,一般情况下,内联列表会出现问题。与此同时,我怀疑你会获得任何显着的性能提升。所有数组都不应该用作&#34;聚合外键&#34; IMHO。

总而言之:我建议你坚持一个单独的桌子。