2009-10-26 44 views
1

目前我們存儲我們的地址數據,像這樣:將街道地址數據清晰地存儲而不僅僅是字符串有什麼好處嗎?

string suiteNumber (ie. unit number) 
string streetNumber (building number) 
string streetName 
string streetDirection (N/NW/S/etc.) 
string streetType (rd/st/ave/etc.) 
// ... etc. (postal code/city/province/state/country 

但我正在與時務解析出第5個地址部分和導入地址(從我可以告訴常見)的問題。

我在想,如果街道地址只是一個字符串(db中的varchar),所有這一切都將變得非常容易。

有兩個參數,我已經給出了爲什麼我們應該保持原樣: 1.搜索更容易,當您可以搜索只是街道名稱或號碼等,但我在想一個SQL腳本沿線的選擇x從地址WHERE街道地址喜歡「%INPUT%」;當然,它不是那麼快,但它可以工作(並且該搜索的數據集僅限於客戶比我們存儲的所有地址的集合小得多)。

  1. 目前我們有一個系統標記公寓 - 如果您發現1個人在地址A是公寓,我們標記他們,它會搜索該街道上的所有其他人/ streetname和他們的標誌,以及(這是一個有時重要的業務需求)

我已經儲存所有的,因爲在地址無數例外的字符串。

所以我問,是否需要/想要分開存儲街道地址部分的特殊原因?

回答

4

我寫了一篇關於這段時間的整篇博文。將各條數據存儲在單獨的字段中有很好的理由。尤其對於地址數據的驗證。

當然,這取決於您所在的行業以及信息的使用方式。如果無效的地址數據不會讓您的公司花費任何東西,那麼通過一切手段存儲無效數據。請注意,儘管如此,您可能希望將這些數據用於郵寄,人口統計報告等。如果數據無效,在事實之後修復它並不是微不足道的。

這裏是我的博客文章:

http://www.endswithsaurus.com/2009/07/lesson-in-address-storage.html

此外,參照搜索 「哪裏的StreetAddress LIKE '%任何%'」。如果你要快速搜索自己的好處,這一切都很好,但是當你試圖自動化依賴地址數據的系統部分,甚至試圖刪除重複內容時,爲用戶提供自動建議等。性能降低到地址表越大,它將變得不可用的程度。

如果地址無效並不擔心會導致公司真正的現金損失,那麼這不是一個問題 - 但是,如果您沒有使用任何有利的財務(或可能是在未來),那麼爲什麼你將這些信息存儲在第一位呢?

@Snorfus啊,你一定是在大草原。我忽略了包括在我的博客文章中發佈關於土地描述的內容,但是我正在考慮在後期發佈這篇文章。

法律分部主要用於石油&阿爾伯塔省,薩斯喀徹溫省和馬尼托巴省的天然氣和其他主要資源行業(儘管它們也可在B.C.的部分地區找到,但它們並不是如此普遍使用)。他們都採用相同的格式:科,鄉,範圍,子午線。例如:

SE 28-12-17-W5

這是第28條,鄉12,17範圍的東南角落,第5經絡的西部。

您可以簡單地使用單個字段並使用正則表達式解析它,或將它分解爲包含LSD分解的單獨字段。在性能方面,在SQL Server中運行正則表達式可能會很痛苦。我的看法與一般地址數據相同,因爲每條數據都是獨立的獨立數據段,因此應將其存儲在不同的字段中。但是,由於這類地址數據的絕大多數是而非而非普通大衆用來代替街道地址,所以我可能會建議設計一些能夠將這些信息與主要信息分開(但鏈接到)的東西地址數據。然而,鑑於土地描述/ LSD也是每個加拿大地址的一部分,我可能會試圖根據數據庫的目標受衆將其存儲在我的主地址表中。

這裏有一個關於艾伯塔省國土資源系統的故障後:

http://www1.agric.gov.ab.ca/%24department/deptdocs.nsf/all/agdex10302

有一件事你會經常在石油發現&天然氣至少(這是我的經驗,大部分來自)工人們通常只會提到LSD的前兩部分 - 即12箇中的28個,或者16箇中的43個。該LSD的其餘部分由該地址 - 即大草原,Fox Creek,Wolf Lake等

+0

非常有趣的博客文章。你如何處理Land Data(至少在加拿大)?像土地部分,陸地部分,土地所有者/西部地區,土地美元線等? – 2009-10-26 19:03:57

+0

+1非常有趣的博客文章。谷歌地圖怎麼弄出我的意思是通過自由文本輸入?我可以拋出幾乎任何類型的地址格式,它運行良好。 – I82Much 2009-10-26 20:06:53

+0

我假設,但這是我得到的:他們有一堆商品電腦來解析你輸入的信息。然後對照已驗證並正確存儲的數據進行檢查,以便快速進行快速掃描。每個機器都必須解析數百萬個地址才能驗證數據,這是值得懷疑的。十幾臺機器可以解析和驗證加拿大僅有的10萬個獨立地址,這比單臺機器對120萬個列表的驗證要快得多。 – BenAlabaster 2009-10-26 20:14:03

0

在歐洲,街道地址通常是一個名字加一個「數字」 (其中數字可以像「3a」)。我已經看到了單獨存儲它們的數據庫:出於一個原因,您可以在官方數據庫中查找街道名稱以驗證它們(例如,以防止出現拼寫錯誤)。因此,對於這種用例,將可驗證和不可驗證部分保留在不同列中是有意義的。

我懷疑你可以找到一個理由進一步分解它,除了一個模糊的恐懼,你可能會失去信息。

0

如果您遵循面向對象的方法來建模整個域,那麼這是一項好處。您的問題讓我想起這個博客標題 March is not a number作爲答案。街道和地址可以說是類似的東西(「街道不是字符串」)。 SnOrfus在他的評論中指出了一個有效的問題。

2

我曾經認爲這是一個好主意,直​​到我的應用程序被部署並且有一個持續的請求流進入更改。當時,我住在加拿大安大略省,我認爲我知道標準地址的樣子。直到某些客戶的地址結合P.O.盒子和街道地址合而爲一。然後艾伯塔省的客戶開始介紹他們在另一個答案中提到的結構化代碼。然後不列顛哥倫比亞省在那裏沒有街道或街道號碼,只是一個場地和隔間和農村路線。 C4,S16 RR7 Mountainville。然後與美國供應商一起,郵政編碼規則走出了窗口。然後,偶爾的英國客戶出現在數據庫中,你認爲你知道的所有地址都會出現在窗口中。一個沒有街道號碼的建築物名稱,兩個街道名稱,兩個城鎮名稱都在一個地址!

Bright House, 
Waverly Crescent off Oxford Road, 
Seething-under-Norton, Banbury, 
Oxfordshire 
OB7 3VT 
United Kingdom 

這是一個組成的例子,但它們確實存在。英國人設法解決問題,因爲每個本地公司都有一個最新的全國地址數據庫,他們需要的只是郵編和房子名稱或號碼。剩下的部分從數據庫中填入。

在這個地址的情況下,可能會有另一個位於諾頓下的Waverly Crescent,這就是爲什麼第二個街道名稱。而且Seething-under-Norton是一個長期被納入班伯裏鎮的村莊,所以這兩個名字都在地址中。在英國的地址你經常會得到不存在的市鎮。它們被認爲是郵政城鎮,因爲它們只存在於郵政系統內。這個名字通常有一個歷史的基礎。很多倫敦地址就像那些一次寫倫敦的人,另一次是萊頓或南瑞斯利普或希靈頓。所有信件都會及時送達。

所以,除非你的軟件的功能是阻止外部地址輸入到系統中,否則不要這樣做!

順便說一下,你提到了通過街道名稱識別同一條街上的所有人。你有沒有檢查過丹佛科羅拉多州哪裏有街道名稱結束並再次提起,再遠一英里。我曾經迷失在利特爾頓(丹佛郊區),試圖找到一個特定的地址,只是被告知我需要在別處有另一條這樣的街道。然後是英國人在每條道路上使用兩個或更多名字的做法。例如,將有一條Homerton路,然後命名爲Marsh Hill,然後是Homerton High Street,然後是Urswick Road,然後是Lower Clapton Road,這些路都在一兩公里的範圍內。更常見的是,在威克村會有一條諾頓道。如果你遵循它,一兩英里之後你會注意到你現在在Wick Road,進入諾頓村。

1

在我看來,這樣做有一定的好處,但在所有我已經看到它嘗試的情況下,這樣做的成本和複雜性超過了微不足道的好處。

問題不在於訓練/迫使用戶尊重所有單獨的領域,讓他們輸入以一致的格式組成和解決的所有不同部分 - 大多數人不認爲的街道地址由多達5個不同的部分組成,並且可能會像通常那樣進入東西。

因此,如果不是真正嘗試使用該系統的人,它可能是一個好主意。

0

雖然他們可能有利於獨立存儲地址的每個組成部分,但您必須根據業務需求和需求權衡成本。如果您沒有做任何與郵寄或運輸相關的任何事情,可能會使您的體系結構的方面顯得過於矯枉過正並使其複雜化。此外,對你的代碼進行操作的其他人可能不知道發生了什麼,並且在沒有意識到的情況下引入重大問題,從而破壞了數據庫。

舉個例子,在美國,下面是一條街的「交貨行」: 郵政信箱12345

在這種情況下,「郵政信箱」,實際上是街道名,而12345主號碼。正常的「格式化」和傳統觀點認爲,地址應該首先列出主要號碼,如「123 Main Street」中所示。

如果您要以標準方式將地址格式化回去,則必須記住最初的地址。

這就是驗證地址和標準化的地方。至少在美國和其他幾個國家,包括英國在內的現代國家,您可以將地址提交給在線地址驗證服務可以清理,標準化並驗證您的地址。通常,這些服務將返回地址,因爲它應該出現在郵件以及地址的組成部分。如果您有組件的業務需求,那麼您可以獨立存儲它們。否則,對地址驗證Web服務的另一個調用應該在期望的時間再次產生組件。

爲了充分披露,我是SmartyStreets的創始人。我們提供美國address verification服務,其中包括您的地址的CASS-Certified validation。如果您有任何問題,歡迎您親自與我聯繫。

+0

希望他們在兩年的時間裏解決了他們的問題。 (很久以前我曾在一家地址清潔公司工作......啊,回憶。) – 2011-10-13 03:46:19

+0

同意。我發佈這個更多的是那些遇到問題並正在尋找選擇的人。 – 2011-10-13 03:50:09

相關問題