如何在 PostgreSQL 中为实体建模自定义属性?

问题描述 投票:0回答:1

我有一个实体表。所有实体都有必需的属性,其中之一是bucket_id,用户也可以为实体定义自定义属性(attribute_name + value)。 我需要对这些实体进行以下操作:

  1. 通过任意属性组合过滤一个桶中的实体(必须快,只能相等)
  2. 获取一个存储桶中所有实体的自定义属性名称列表(必须快)
  3. 所有自定义属性和一些必需的属性都可以更新(可能会很慢)

必需的属性可以是表列。我找到了两种存储自定义属性的方法:

  • 存储json并使用GIN-index进行快速过滤
  • 将属性名称存储在单独的表中,并在多对多表中使用 (entity_id, custom_attribute_id) 键存储值,但在这种情况下,我需要对任何新的条件进行连接,例如 (attribute_id = ? ANDEntity_id =Entity.id)正如我所见,查询中的自定义属性

这些方法中哪一种更好或者您能提出更好的建议吗?

sql postgresql
1个回答
0
投票

与此类问题一样,这取决于情况。

JSONB 可能是更简单的方法,特别是当您查询实体时您始终需要所有自定义属性时,它也可能比 JSON 更紧凑,如果它变大将会被压缩。

存储为单独的表可以为您使用的索引类型提供一定的灵活性,例如如果你只需要相等,可以使用哈希索引,你也可以考虑将表分区成更小的块以提高性能。

我通常更喜欢单独的表和连接,因为它们提供了更大的灵活性,并且您使用纯 SQL 进行查询,但 JSON 字段是无模式的,因此它可以更加动态,而无需触及表结构。

© www.soinside.com 2019 - 2024. All rights reserved.