在SQL中的单个条目中存储多个坐标

时间:2014-03-05 20:36:47

标签: sql sqlite

通过做一些研究我找不到这个,所以我决定在这里问一下。

我的问题是我想在数据库中存储路由(开始,检查点,结束)。每个点都有x,y和z位置(在C中浮动),可能是一个角度(也是浮点x,y,z)和水平&垂直尺寸。最多有22个点(开始,结束,20个检查点)。目前我已经使用以下类型的文本文件完成了它:

[begin]
posx = 1230.169800
posy = 2459.526611
posz = -86.520058
angx = 20.961914
angy = 19.720459
angz = 0.000000

[end]
posx = 3784.660400
posy = 7311.252930
posz = -489.097229
angx = 9.080200
angy = 93.345337
angz = 0.000000
horizontal = 100
vertical = 100

[cp]
posx = 2871.044189
posy = 3165.119141
posz = -541.189758
angx = 0.000000
angy = 0.000000
angz = 0.000000
horizontal = 100
vertical = 100

[cp]
posx = 2328.984375
posy = 4327.809082
posz = -254.201324
angx = 0.000000
angy = 0.000000
angz = 0.000000
horizontal = 100
vertical = 100

我想知道是否有一种在SQLite中存储此类数据的有效方法。我能想到的一件事是为每个点(22,非常多)提供一个文本列,并在加载单个路径时解析它们。

我能想到的另一种方法是将每个点存储为单个条目,然后将它们链接到路径条目。这样我仍然需要22列外键。

有更好的方法吗?

提前致谢, 尤西

1 个答案:

答案 0 :(得分:1)

如果您在根中添加点序列号(其中起点将具有sequence_number=0并且end将具有最大sequence_number),则可以稍微修改您提到的第二个选项:

create table route (id integer primary key,
  // other fields like name, etc
);

create table point (
   id integer primary key,
   route_id integer,
   sequence_number integer not null,
   posx real not null,
   posy real not null,
   posz real not null,
   angx real not null,
   angy real not null,
   angz real not null,
   horizontal null,
   vertical null,
   CONSTRAINT route_fk FOREIGN KEY(route_id) REFERENCES route(id)
);