2011-08-19 120 views
0

我建立一個網站,都會有公司的一幫和自己的業務上市,所以他們將有自己的地址,城市,州,郵政編碼等爲城市/州

我發現MySQL數據庫設計這個網站在這裏: http://jesseprice.com/mysql-city-state-zip-latitude-longitude-database/它有一個所有的城市,州,拉鍊,縣,拉特,長的數據庫。

我導入了上面的數據庫,所以我的問題是如何將它連接到我的公司表?當一家公司報名參加時,我想我可以爲該州降落下來,然後下降到在該州發現的城市,從數據庫中拉出來,以便他們從中選擇,然後選擇郵政編碼。這會起作用嗎?所以他們不需要自己進入呢?

我只是有點困惑如何正確地做到這一點,所有使它一起工作。

謝謝。

+0

嘗試使用主鍵作爲公司表的外鍵來建立兩個 – pif

+0

之間的關係,因此zip_code是我剛剛下載的數據庫上的主鍵。在我公司的桌子上,我附上了什麼? – Drew

+0

@Drew,您需要在您的公司表中包含郵政編碼的其他字段,您可以將其與郵政編碼查詢表 –

回答

1

選項1:

所有字段添加到您的地址表,參考上增加了選擇的表,將城市,州,郵編,縣,lat和長到你的表。

優勢

  • 可以提供國際支持未做更新下載的表。
  • 您可以在不丟失數據的情況下更新下載的表(不太可能)
  • 所有數據均可在一個單表查詢中使用。
  • 緯度/經度搜索應該更快。
  • 允許在下載表中可能無法使用的地址中保持靈活性。

選項2:

只添加一個zip場,併爲所有的查找,從下載表格提取數據。

優勢

  • 歸 - 所有記錄都在一個表。減少驅動器空間。

我實際上會建議將字段添加到託管表中,並將下載的表保存爲只讀,可替換的參考表。

0

你需要有下面的表格設計(企業/城市) -

CREATE TABLE `companies` (
    `companyID` smallint(5) unsigned NOT NULL AUTO_INCREMENT, 
    `companyName` varchar(150) NOT NULL DEFAULT '', 
    `address` varchar(300) NOT NULL DEFAULT '', 
    `cityID` smallint(5) NOT NULL, 
    `countryID` varchar(3) NOT NULL, 
    PRIMARY KEY (`companyID`), 
    KEY `cityID` (`cityID`), 
    KEY `countryID` (`countryID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


CREATE TABLE `countries` (
    `countryID` varchar(3) NOT NULL DEFAULT '', 
    `countryName` varchar(52) NOT NULL DEFAULT '', 
    `localName` varchar(45) NOT NULL, 
    `webCode` varchar(2) NOT NULL, 
    `region` varchar(26) NOT NULL, 
    `continent` enum('Asia','Europe','North America','Africa', 
'Oceania','Antarctica','South America') NOT NULL, 
    PRIMARY KEY (`countryID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

CREATE TABLE `cities` (
    `cityID` mediumint(8) unsigned NOT NULL AUTO_INCREMENT, 
    `cityName` varchar(50) NOT NULL, 
    `stateID` smallint(5) unsigned NOT NULL DEFAULT '0', 
    `countryID` varchar(3) NOT NULL DEFAULT '', 
    PRIMARY KEY (`cityID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

你可以從這裏下載世界城市/國家的完整列表在mysql中的格式 -

http://myip.ms/info/cities_sql_database/World_Cities_SQL_Mysql_Database.html