2011-04-10 76 views
0

我想要一個很好的方法來將這些一系列的點存儲在數據庫中。最好的MySQL數據類型

我認爲將是很好的幾種方法首先是一個文本類型,然後使用分隔符來sperate點所以它看起來像這樣的DB

+----------------------------+ 
| x_points | 1:2:3:4:5... | 
| y_points | 1:2:3:4:5... | 
+----------------------------+ 

那麼Web應用程序將拉點並將它們繪製在畫布上。

有沒有更好的方法將點存儲到數據庫中的一行?

對於複雜的功能,點可以是每個圖1000個點,然後每個點的分隔符,這樣一個船的字符加載。


由於評論我會盡力詳細說明。我正在使用畫布來繪製用戶輸入的函數。用戶還可以繪製圖形,並且我想存儲圖形的線數據,我也可以以相同的方式存儲這些圖形,並且計算點只需要發生一次。

樣本seniro將是一個用戶可以繪製y = x^2然後圈出y截距。然後他們可以鏈接到該畫布,並且會重新繪製y截距和圖形的圓圈。當然這是一個簡單的例子,但我無法弄清楚如何最好地將點存儲在畫布上。

希望這有助於更多。

+1

你有什麼要求,你會查詢這些數據嗎?您是否考慮過將某種矢量格式存儲爲blob(二進制)還是文本(SVG)? – Novikov 2011-04-10 00:03:52

+0

如果你不得不使用文本類型的任何方式,我可能會序列化PHP數組......它會因爲格式更長,但這種方式,你不必擔心無意中搞亂了你的解碼/編碼過程或有稍後切換格式信息某些原因,您需要添加額外的信息點 – prodigitalson 2011-04-10 00:07:14

回答

5

這被稱爲一對多關係。你有一個形狀和許多實際點。你通常想把這些點放到一個單獨的表中,像這樣。

+----------------------+  +-----------------+ 
|  Shape   |  | Point_Values | 
+----------------------+  +-----------------+ 
| shape_id (INT)  |  | shape_id (INT) | 
| shape_name (VARCHAR) |  | point_x (INT) | 
+----------------------+  | point_y (INT) | 
           +-----------------+ 

要創建新形狀,請在Shape表中插入一個新形狀。然後在Point_Values表中創建一個或多個值。當您想要返回並獲取值時,可以使用如下所示的連接:

SELECT s.shape_name, v.point_x, v.point_y 
FROM Shape s 
JOIN Point_Values v ON s.shape_id = v.shape_id 
WHERE s.shape_id = 5 

這具有非常靈活的優點。每個形狀可以有0個或更多個點,並且有一個隱含的強制實施,即必須有相同數量的x和y點。