存储用户定义的段 JSONB 与单独的表?

mer*_*ort 3 postgresql schema database-design

我想存储用户定义的段。一个段将由几个不同的规则组成。我想我要么创建一个单独的“规则”表,其中包含三列:属性名称、运算符和值。例如,如果细分是美国的用户,则其各自列中的规则将为“国家/地区 = 美国”。一个段可以有很多规则。

另一个选项是通过 Postgres 将这些作为 JSONB 存储在段表的“规则”列中。我会遵循与上面类似的模式,并使用一系列规则或其他东西。每种方法的优点和缺点是什么?

也许这两种方法都不是正确的方法。

Bor*_*lev 7

选择基本上取决于您希望读取数据的方式。

如果出现以下情况,您最好使用 JSON:

  • 您不会(使用子句WHERE)通过规则进行过滤
  • 您不需要获取统计数据(即GROUP BY
  • 您不会暗示对属性/运算符/值有任何限制
  • 您只需选择值 ( SELECT ..., Rules)

如果满足这些要求,您可以将数据存储为 JSON,从而消除 JOIN 和子选择,消除规则上主键和索引的开销等。

但如果您不满足这些要求,您应该将数据存储在通用的关系设计中 - 您的方法 1。