假设我有三种类型的数据:A
,B
和C
。 A看起来像这样:
{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"created_at": "2016-11-27 02:24:12.889637+00",
"author": "7d16389b-2d66-4c59-bb6a-87992a60d112",
"foo": "bar",
"baz": "zab",
"cat": "dog"
}
B看起来像这样:
{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"created_at": "2016-11-27 02:24:12.889637+00",
"author": "7d16389b-2d66-4c59-bb6a-87992a60d112",
"foo": "bar",
"baz": "zab",
"nak": "kan"
}
C看起来像这样:
{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"created_at": "2016-11-27 02:24:12.889637+00",
"author": "7d16389b-2d66-4c59-bb6a-87992a60d112",
"baz": "zab",
"cat": "dog"
}
他们的领域有(小)变化,但他们有一些一致的领域(“元数据”可以这么说)。每个都代表他们自己的数据类型 - B不是具有不同字段的A.但是,稍后我需要将最近的三个组合成一个“提要”:
[{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"type": "A",
},
{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"type": "B",
},
{
"id": "4ccdfb68-ce18-4361-bd90-e61f1fcf8d2b",
"type": "C",
}]
我是否应该使用共享字段和JSONB字段创建表示所有三个表的单个表,还是应该拥有自己的表并对它们进行联合查询?要清楚,Feed只有共享字段。我还需要这个是前向兼容的 - 我知道未来的类型会有一个ID,一个created_at字段和一个作者,但除此之外它是公平的游戏。
谢谢!随意询问详情。
编辑:啊,是的,我忘了提到我也想(在某个未来的点)在一个字段上做索引(如果该行有它),这样我就可以搜索所有“foo”==“bar”的行。如果一行没有foo,那不应该破坏它。
答案 0 :(得分:0)
由于以下几个原因,我选择使用单张表:
以下是表格说明:
Table "public.feed"
Column | Type | Modifiers
------------+--------------------------+---------------------------------------------------------------
id | uuid | primary key unique not null
created_at | timestamp with time zone | not null default now()
created_by | uuid | not null default '00000000-0000-0000-0000-000000000000'::uuid
data | jsonb |
Indexes:
"feed_pkey" PRIMARY KEY, btree (id)
"feed_created_at_index" btree (created_at DESC)
"feed_data_index" btree (data)
"text_index" gin (to_tsvector('english'::regconfig, data ->> 'text'::text))