我在Postgres中有一张优惠券表,其中有50多个列。
数据库模式类似于:
当前字段strict_to_user存储一个用户ID数组,但是如果restrict_to_user字段变大,则查询变慢。
如何在DB中存储strict_to_user字段。同样,将来还会有更多的限制类型。如何处理它们?
答案 0 :(得分:0)
从数据一致性的角度来看,您可能希望规范化架构,而不是在数组中列出用户,旅馆等。例如,在您的coupons
和users
表之间有一个联接表,该表可以跟踪受限于特定优惠券的用户。您可以对优惠券和用户外键组合添加唯一约束,以避免记录重复项。使用数组方法,您容易产生重复,因此您需要在查询(例如unnest()
后跟group by
)或应用程序代码中处理数组。
在大规模情况下,可变长度类型的数组还存在潜在的性能问题。那就是如果您确实坚持text[]
,我怀疑应该是integer[]
。参见https://heapanalytics.com/blog/engineering/dont-iterate-over-a-postgres-array-with-a-loop