2008-08-23 152 views
39

什麼是「最佳」的方式來存儲數據庫中的國際地址?以模式的形式回答,並解釋爲什麼你選擇正常化(或不是)你做的方式。也解釋你爲什麼選擇每個領域的類型和長度。將國際地址存儲在數據庫中的「最佳」方式是什麼?

注意:您決定您認爲哪些字段是必需的。

+0

去年我對這件事感到厭倦! [數據庫中的地址](http://mojoai.blogspot.com/2010/12/addresses-in-databases.html) – 2011-05-09 10:25:29

+0

郵政編碼可能很複雜 - 例如,愛爾蘭共和國沒有一般的郵政編碼系統,儘管都柏林都有郵編(所有編號爲1-24,但6W除外)。 – Geoglyph 2009-01-15 13:40:08

+1

經討論可以幫助.. http://stackoverflow.com/questions/1159756/how-should-international-geographical-addresses-be-stored-in-a-relational-databa – chandraP 2014-01-09 16:30:54

回答

24

平原自由格式文本。

驗證世界上所有的郵政編碼太難了;一個固定的國家名單過於政治敏感;強制性的州/地區/其他行政區域是不正確的(我經常被問到我住在哪個縣 - 當我不這樣做時,因爲大倫敦根本不是一個縣)。

更重要的是,它是沒有必要的。您的應用程序不太可能以任何嚴肅的方式對地址進行建模。如果您想要郵政地址,請提供郵政地址。大多數人並不那麼愚蠢,除了郵寄地址之外,如果他們這樣做,他們可以再次親吻他們新購買的物品。

這是一個例外,如果你正在做一些自然限制到一個國家的東西。在這種情況下,您應該要求提供{郵編,門牌號碼},這足以識別郵政地址。我想你可以用美國的擴展郵政編碼實現類似的事情。

-3

您需要提供更多關於計劃如何使用數據的詳細信息。例如,像City,State,Country這樣的字段既可以是單個表格中的文本,也可以是使用外鍵鏈接到單獨表格的代碼。

最簡單的將是

Address_Line_01(必需,非空白) Address_Line_02 Address_Line_03 地標 市(必需) 引腳(必需) Province_District 國家(必填) 國家(必填)

以上所有可以是文本/ Unicode與適當的字段長度。

電話號碼(如適用)。

+1

只有一堆國家有州。 – 2009-09-18 19:16:24

9

在過去,我已經對他們的網站上的ups/fedex送貨地址表單(我想如果他們不知道如何處理國際訂單,我們全部結束)後需要成爲國際化的表單進行建模。他們使用的字段可以用作設置模式的參考。

5

一般來說,你需要明白你爲什麼要一個地址。是用於運輸/郵寄嗎?那麼確實只有一個要求,那就是國家是分開的。其他線路是自由形式的,由用戶填寫。原因在於郵件的通用轉發策略:對於外國的任何傳入郵件轉發時不會查看其他地址行。因此,詳細信息只能由位於該國的郵件分揀機進行分析。像接收者一樣,他們會熟悉國家的慣例。

(UPS可能聚集在一起的一些小歐洲國家,e ..所有的低地國家可能來自比利時 - 這個想法依然成立。)

2

我認爲添加國家/城市和地址文字會很好。國家和城市應分開報告。經理總是要求這些你不期望的報告,我不希望通過大型數據庫運行LIKE查詢。

2

不給Facebook過分尊重。但是,數據庫的整體結構似乎在每天啓動的許多Web應用程序中被忽略。很明顯,我不認爲有一個完美的解決方案可以覆蓋所有可能的地址結構變量,而不需要經過努力。這就是說,結合自動填充Facebook管理位置輸入數據,並消除其大部分冗餘條目。他們通過充分組織他們的數據庫以便以低成本,低錯誤的方式向客戶實時提供自動完成信息,從而使他們或多或少地從現有列表中選擇正確的位置來做到這一點。

我認爲最好的解決方案是訪問第三方數據庫,其中包含您所需的地理範圍,並使用它來初始化您的用戶位置信息。這可以讓你避免創建自己的團隊。幸運的是,您可以通過允許新用戶直接從第三方供應商處接收正確的自動完成信息來減少服務器上的負載。最終,您將能夠根據用戶輸入數據中包含在您自己的數據庫中的信息填充大多數自動完成功能,以獲取位置信息,例如城市,國家等。

相關問題