2009-09-20 169 views
3

我正在構建一個應用程序,該應用程序允許人們在城市的不同區域(約10個城市)發佈信息。你們是否知道有這種信息的任何現有(規範化)數據庫/數據集?或者我需要從頭開始創建一個?任何指針建議非常感謝!基於位置的應用程序

+0

您正在尋找專爲此類信息設計的數據庫模式,還是正在尋找具有事物位置的現有數據庫。如果是後者,你想要什麼樣的東西? – 2009-09-20 18:40:58

+0

是的,一個數據庫模式會起作用。我正在考慮將城市與城市特定區域連接起來的模式。例如,紐約市(市中心,中城,上城,切爾西等)。我想知道是否要根據郵政編碼進行此操作,並將郵政編碼映射到區域名稱中......我的應用程序基本上會列出不同區域的業務......感謝您的回答! – berto77 2009-09-21 17:57:09

+0

喜歡這個網站的方式:http://www.thrillist.com/list/Boston – berto77 2009-09-21 18:02:59

回答

-2

你可以將它保存爲兩個整數經度和緯度(我想,如果我的地理位置是正確的)

1

歸在這種情況下是有點問題的,因爲原子性要求規定單個屬性存儲的單個值給定的領域,所以當看着座標系統時,事情變得很模糊。有幾個選項。這些都是完全正常化的。

分開的點表

在這種方法中你有一個會像(PostgreSQL的符號)的表:

CREATE TABLE geo_points (
    id bigserial not null unique, 
    x bigint, 
    y bigint, 
    z bigint, 
    primary key (x, y, z) 
); 

記錄將進入此表,並評論將加盟在geo_points.id上。

點類型的方法

各種數據庫都有類型存儲點。如果我們假設一切都在地面上,我們不需要追蹤海拔,我們可以:

CREATE TABLE tagged_location (
    id bigserial not null unique, 
    user_id int references users(id), 
    location point, 
    comment text not null, 
    primary key (user_id, location) 
); 

通過這種方法,分可能看起來像'(134.22222, 94.4444)'和不同的座標系可以由數據庫管理系統提供支持。這些可以包括平面座標,球座標等。選擇座標系非常重要,因爲它會影響距離計算等單位。例如,如果使用球座標,則距離通常以度數度量,所以如果要將其轉換爲英里或公里,則需要做額外的工作。

數值數組方法

可以代表一個點作爲數字數組。這通常是沒有原生點類型的解決方法。這符合1NF,因爲每個數組代表單個位置的2d或3d座標。普通性很重要,所以整個數組表示一個單一的值(即它是一個元組而不是一個包或一個包)。這與點類型的上述方法是等價的,除了通常你必須做自己的距離計算,並且點看起來像'{134.22222, 94.4444}'

最後,有很多不同的方法都完全標準化的問題數據庫設計真的受到你的RDBMS和你的用例的限制。你可能不會找到完全適合你的用例的現成設計。

相關問題