Mysql

數據庫設計——GIS點數據

  • March 30, 2022

我正在考慮是否應該向現有表中添加列或使用新表。該數據庫是關於鳥類、隨時間推移的位置和築巢位置。

我需要儲存的數據是點 (X,Y) 位置數據。該數據將來自 GPS,雖然兩個位置可能非常接近,但我認為即使您認為自己站在同一個位置,兩次獲得相同的 X、Y 的可能性也很小。

第一個表稱為健康檢查(每個健康檢查都與一隻鳥相關,一隻鳥在其一生中有許多健康檢查)。每次進行健康檢查時,都會記錄位置和日期。

第二個表稱為 Nest - 每個巢都有一個位置。巢是不可變的——即它們不會移動。

如何查詢這些數據?

每隻鳥的健康檢查位置 (X,Y) 將隨時間繪製(查詢),以查看鳥的移動位置。

巢位置將一次全部繪製出來(即查詢所有巢位置並繪製它們)。很多時候,可能有 50% 的時間鳥在健康檢查期間的位置將是巢表中巢的位置。

涉及的鳥類數量約為300。db是MySQL。

位置 (XY) 數據是否應該放在自己的表中?

如果需要,我可以提供更多資訊。

將建議將所有位置都放在一個表中,並且有一列數據類型為 char(1),其值為 H(health) 和 L(Location) 以區分位置。這也將幫助您在將來添加更多位置類型。

不,我將 GPS 位置視為數字。如果您使用的是SPATIAL索引,請使用POINT(). 如果不使用SPATIAL,請參閱此選擇數據類型:http: //mysql.rjweb.org/doc.php/find_nearest_in_mysql#representation_choices

嘗試“標準化”點沒有任何優勢。由於 GPS 的不精確性,坐在巢中的鳥可能會或可能不會註冊相同的 (X,Y)。所有操作都必須意識到這種不精確性。

您可能需要另一張表來提供每隻鳥的“最新”位置。“health_check”表給出了歷史記錄,每隻鳥的最新條目與“最新”中的一個條目是多餘的。這將簡化某些操作。

對於繪圖,我認為幾百個“鳥”和“巢”沒有問題。(繪製每隻鳥的整個旅行歷史需要時間並導致幾乎無用的圖表。)

為了發現哪隻鳥在特定的巢穴中(反之亦然),需要數百次距離計算,因此在當今的 CPU 上很實用。(一百萬隻鳥——那將是另一回事。)

引用自:https://dba.stackexchange.com/questions/310310