在我的PostgreSQL中,我有两个表board
和cards
表,它们之间有OneToMany
个关系(一个board
可以有多个cards
)。< / p>
用户可以在电路板上放几张卡片。为了实现此功能,我通常会创建另一个名为cards_on_hold
的{{1}} {{}}}表,并将保留ID放在此表中。为了获取电路板的这些数据,我会在OneToMany
和board
之间使用JOIN。
PostgreSQL中有没有更有效的方法来存储持有ID的卡?例如,某些功能可以将此列表内联存储在cards_on_hold
表中?我稍后需要在board
SQL子句中使用此ID列表来过滤卡片组。
答案 0 :(得分:4)
Postgres确实支持整数数组(假设你的id是整数):
http://www.postgresql.org/docs/9.1/static/arrays.html
然而,与单独的表相比,操纵该数据有点困难。例如,使用单独的表格,您可以提供唯一性保证,这样您就不会有重复的ID(假设您需要)。要使用数组实现相同的功能,您必须创建一个存储过程来检测重复项(例如,在插入时)。那将很难(如果可能的话)与简单unique
约束一样有效。更不用说你失去了一致性保证,因为你不能在这样的数组上加上外键约束。
因此,一般情况下,内联列表会出现问题。与此同时,我怀疑你会获得任何显着的性能提升。所有数组都不应该用作&#34;聚合外键&#34; IMHO。
总而言之:我建议你坚持一个单独的桌子。