用于存储用户配置文件的可空列或 jsonb?

dav*_*tgq 2 schema postgresql null database-design json

我决定使用可为空字段或 jsonb 来存储用户配置文件。最初,这将用于联系人:emailphone。我预计稍后可能会添加其他列,例如mobilewebsite。此外,可能还有其他不相关的字段,例如设置/首选项、保存的搜索等。

我已经决定我不想为此使用任何形式的键值存储(或任何涉及多对多关系的模式),除非有非常好的理由。

jsonb 的优点:

  • 如有必要,可以为每个“列”存储多个值
  • 添加新字段只需要 JS 编码和文档

jsonb 的缺点:

  • 将“列”名称存储为每个“行”的字符串的开销
  • Wonky 执行比较查询(我认为我的使用场景不适用)
  • 不得不期待意外

还有什么要添加到这个优点/缺点列表中的吗?尽管我只想使用可为空的列,但我认为忽略 jsonb 是一种疏忽 - 这似乎是一个令人信服的选择。

Erw*_*ter 5

您可以使用“两全其美”。将您知道的每个常规列实现为专用列(具有准确的正确数据类型,可能具有 NOT NULL / CHECK / PK / FK 等约束以强制执行详细规则、默认值和文档注释)并添加“全能”jsonb非常罕见的情况/后期添加/不需要上述任何功能的高度易变属性的列。

需要明确的是:“高度易变”并不意味着该值被更新了很多,这显然会反对任何文档类型,例如jsonb,使更新更加复杂和昂贵。这意味着属性本身(在元级别)发生了很大变化(不同的名称,稀有和随着时间的推移出现和消失或类似)。

大多数人低估了 NULL 存储的实际成本:

有关的: