我想存储用户定义的细分。细分将包含几个不同的规则。我以为我要么创建一个单独的表格" Rules"有三列:属性名称,运算符和值。例如,如果Segment是美国的用户,则该规则将是" country = US"在各自的专栏中。细分可以有很多规则。
另一个选择是通过Postgres将这些作为JSONB存储在"规则"段表中的列。我遵循与上述类似的模式,带有一系列规则或其他东西。每种方法的优缺点是什么?
也许这些都不是正确的做法。
答案 0 :(得分:1)
我会选择在关系数据库中单独存储数据的第一种方法。听起来您的数据(段 - >规则)将始终包含相同的结构(这非常简单),因此没有迫切的理由将数据存储为JSON。
作为附注,我认为您将需要“规则”表中的另一列,作为“细分”表的外键。
接近1的优点:
接近1的缺点:
关于您的最后一句,如果不了解您的预期功能,很难规定数据库设计。例如,如果属性名称具有超出单个段的含义,则您需要单独存储属性名称并在“规则”表中引用它们。
答案 1 :(得分:1)
选择基本上与您希望读取数据的方式有关。
如果符合以下条件,您最好使用JSON:
WHERE
子句)
GROUP BY
)SELECT ..., Rules
)如果满足这些要求,您可以将数据存储为JSON,从而消除了JOIN和子选择,消除了规则等主键和索引的开销。
但如果你不满足这些要求,你应该将数据存储在一个共同的关系设计中 - 你的方法1。