【发布时间】:2017-04-11 01:13:08
【问题描述】:
假设我有三种类型的数据:A's、B's 和 C's。 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 字段,还是应该有自己的表并对它们进行联合查询?需要明确的是,提要只有共享字段。我还需要它是向前兼容的——我知道事实上未来的类型将有一个 ID、一个 created_at 字段和一个作者,但除此之外,这是公平的游戏。
谢谢!欢迎询问详情。
编辑:啊,是的,我忘了提到我还想(在将来的某个时间点)在字段上创建索引(如果行有它),以便我可以搜索所有“foo”==“bar”的行。如果一行没有 foo,那不应该打破这个。
【问题讨论】:
标签: sql database postgresql schema