2011-07-09 49 views
1

我有一個引用和郵政編碼表。事實上,一個城市可以有多個郵政編碼,所以我應該如何設置數據庫,以便在輸入城市名稱時獲得正確的拉鍊,或者在輸入郵編時獲取正確的城市。在數據庫中設置此數據的最佳方式是什麼?

這應該是一個包含所有數據的表,還是三個有城市的地方,一個有拉鍊,第三個有正確的關聯?

+1

什麼是「一個城市」?是否不僅僅是城市的文字名稱?什麼是「所有數據」?這是一個很遠的辦法,但是在郵政編碼中是否還有更多的數據而不僅僅是一個數字? –

+0

郵政編碼也可以與多個城市相關聯。對於邊界重疊狀態邊界的城市,還有多個州。郵政編碼與郵遞員如何駕駛其路線有關;地理是巧合。 –

回答

3

我只使用一個郵政編碼表作爲主鍵和城市的索引(加快搜索)。如果您有多對多的關係(一個郵政編碼可以有多個城市),那麼三表解決方案可能會很有用,但除此之外,我認爲這只是不必要的複雜性。

+0

這是非常特定於域的,但不是很可能兩個城市共享相同的郵政編碼嗎?在不同的國家呢? – phtrivier

+0

phtrivier,你是對的,這是特定領域的,所以根據他/她的需要,我的答案可能不是最好的。 –

+0

嗯,我非常傾向於多對多,因爲這將覆蓋具有相同zip的多個城市,反之亦然。 現在我堅持與如何把這一張桌子上的任務,並將其分成三個:) –

0

在Kissimmee居住併爲UPS工作(記憶郵政編碼),佛羅里達州Kissimee和Celebration的城市郵政編碼爲34747。我個人使用多個表格:國家,地區(州)和地區(城市)。國家表格中有國家名稱和其他相關數據。地區表基本上是相同的,但具有國家名稱的外鍵。地方表具有區域名稱的外鍵,以及郵政編碼和其他相關數據。我在地方表(地名,區域,郵政編碼),區域表(名稱,國家)和國家表格(名稱)中創建了一個引用多個列的主鍵,以幫助提高性能。因此,我的地方表格可以處理(基西米,FL,34747)和(Celebration,FL,34747)以及(Orlando,FL,32801)和(Orlando,FL,32802)。無論如何,如果我通過郵政編碼或城市搜索,我會處理返回多個結果。然而,根據您的源數據是如何獲取的,您可能需要在地方表中創建一個布爾型「大都市」列,以表明(在我的示例中)基西米是Celebration的metrolopitan區域,並且每個郵政編碼只允許一個大城市。

+0

這與@Emil建議的基本相同。對主鍵應該如何設置稍作修改,以便我接受他的答案。 –

相關問題