设计数据库架构

时间:2019-02-05 18:26:13

标签: postgresql database-design

我在Postgres中有一张优惠券表,其中有50多个列。

数据库模式类似于:

  • id:字符串,
  • code:字符串,
  • restrict_to_user:text [] //一个存储优惠券有效用户的配置文件ID的数组,
  • restrict_to_hotel:text [] //优惠券有效的酒店数组 还有更多条目。

当前字段strict_to_user存储一个用户ID数组,但是如果restrict_to_user字段变大,则查询变慢。

如何在DB中存储strict_to_user字段。同样,将来还会有更多的限制类型。如何处理它们?

1 个答案:

答案 0 :(得分:0)

从数据一致性的角度来看,您可能希望规范化架构,而不是在数组中列出用户,旅馆等。例如,在您的couponsusers表之间有一个联接表,该表可以跟踪受限于特定优惠券的用户。您可以对优惠券和用户外键组合添加唯一约束,以避免记录重复项。使用数组方法,您容易产生重复,因此您需要在查询(例如unnest()后跟group by)或应用程序代码中处理数组。

在大规模情况下,可变长度类型的数组还存在潜在的性能问题。那就是如果您确实坚持text[],我怀疑应该是integer[]。参见https://heapanalytics.com/blog/engineering/dont-iterate-over-a-postgres-array-with-a-loop