2014-03-05 46 views
0

我無法通過做一些研究找到這個,所以我決定在這裏提問。在SQL中的單個條目中存儲多個座標

我的問題是,我想存儲路由(開始,檢查點,結束)在數據庫中。每個點都有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列的外鍵。

有沒有更好的方法來做到這一點?

由於提前, 尤西

+0

你的第二個解決方案稍作修改應該可以工作。該路由可以像'route_id,from_node,to_node'這樣的表創建,其中起點具有'from_node',目的地將'end_node'設置爲null。您可以稍後查詢並檢索路徑。 – user2989408

+0

我真的不明白它將如何處理檢查點?我會有開始和結束,但檢查站呢? – jussi

+0

一個例子是'101-NULL-1,101-1-2,101-2-3,101-3-4,101-4-5,101-5-NULL'。假設route_id是101,它以Node_id = 1開始,並以Node_id = 5結束,同時按順序通過節點2,3和4。這基本上是數據庫中圖形的表示。 – user2989408

回答

1

你提到可以用輕微的修改就可以使用,如果你在根加點的序列號的第二個選項(其中開始點將具有sequence_number=0和端將具有最大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) 
);