PostgreSQL JSONB 与保留单独的表

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

我正在思考数据库设计,我想知道是否有人可以插话。我有一些结构化数据,我偶尔会过滤一些非结构化数据。我对性能思考了很多,所以我试图尽可能使其非规范化。人们对单独表上的索引 JSONB 列有意见吗?例如:

| (smurfs) id | name   | filters (GIN index)                 |
|-------------+--------+-------------------------------------|
|           1 | Papa   | { "color": "blue" }                 |
|           2 | Brainy | { "brain": "big", "color": "blue" } |

我会查询索引的 JSONB 数据。

或者:

| (smurfs) id | name   |
|-------------+--------+
|           1 | Papa   |
|           2 | Brainy |

| (filters) id | smurf_id | filter_type | filter_value |
|--------------+----------+-------------+--------------|
|            1 |        1 | color       | blue         |
|            2 |        2 | brain       | big          |
|            3 |        2 | color       | blue         |

我会将过滤器与查询数据连接起来。

有很多关于关系数据库中 JSON 滥用的讨论。这属于该类别吗?从良好设计的角度来看,其中一种会比另一种更好吗?性能更高吗?我正在尝试优化大表上的读取。似乎在第二种情况下,我有两张大桌子而不是一张。

database postgresql database-design postgresql-9.4 jsonb
1个回答
0
投票

从设计角度来看,我会以更传统的方式使用关系数据库,即将其标准化。

我会创建更多表格:

smurfs
smurf_color
smurf_brain
等等。我将定义属性的类型并创建索引。

如果您主要关心的是性能,这很可能是最好的选择。

注意:您还可以进行概念证明、创建 3 个模式、生成一些数据集并使用不同的过滤器测量每种情况下的搜索时间。

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