【发布时间】:2019-06-11 23:30:54
【问题描述】:
如何在 Postgres 中存储外部数据流中每条记录具有以下结构的数据: (时间戳, [(x1,y1, color1), (x2,y2, color2), ...]) ?
点数因记录而异。
我尝试使用 PostGIS:
CREATE TABLE AllPoints(
id serial,
time timestamp with time zone,
points geometry(POINT)[]
);
但我无法弄清楚如何在 PostGIS POINT 对象中捕获“颜色”属性(每个点都存在)。
我考虑的另一个选项是:将颜色为 JSON 的点数组存储在 JSONB 列中,但在这种情况下,我会丢失 PostGIS SQL 函数(例如,查找指定区域中的所有点)。
【问题讨论】:
-
如果你正确地对其进行规范化(即不使用数组),就像在包含点的表中添加一个新列一样简单
-
点数不固定;对于不同的时间戳,我们期望不同的点数,这就是我使用数组的原因。
-
一个表的行数也不是固定的。你在这里确实有一个经典的一对多关系。
-
如果颜色可以是
double precision,则可以在PostGIS中将其存储为“M维度”。 -
如果我理解正确,_a_horse_with_no_name 建议有 2 个表:T1(id,timestamp)和 T2(t1_id,POINT,color),其中 t1_id 是 T1(id)的 FK。对我来说看起来不错,我今天会试试看。
标签: postgresql postgis