城市/州的MySQL数据库设计

时间:2011-08-19 02:29:34

标签: mysql database state zipcode city

我正在建立一个网站,里面会有很多公司和他们的商家名单,所以他们会有他们的地址,城市,州,邮政编码等。

我在这里找到了这个网站: http://jesseprice.com/mysql-city-state-zip-latitude-longitude-database/,其中包含所有城市,州,邮编,县,纬度,长度的数据库。

我上面导入了数据库,所以我的问题是我如何将它连接到我的公司表?当一家公司报名时,我想我可以为该州做一个下拉,然后它会下降到那个州的城市从数据库中拉出来,以便他们从那些中选择,然后是邮政编码。那会有用吗?所以他们不必自己输入它?

我对如何正确地做到这一点感到有些困惑,所有这一切都让它一起工作。

谢谢。

2 个答案:

答案 0 :(得分:1)

选项1:

将所有字段添加到地址表中,在添加时引用所选表格,将city,state,zip,county,lat和long放入表格中。

<强>优点

  • 您可以提供国际支持,而无需更新下载的表格。
  • 您可以更新下载的表而不会丢失数据(不太可能)
  • 所有数据都在一个单表查询中提供。
  • lat / lon搜索应该更快。
  • 允许下载表中可能无法使用的地址的灵活性。

选项2:

仅添加一个zip字段,对于所有查找,从下载的表中提取数据。

<强>优点

  • 规范化 - 所有记录都在一个表中。减少驾驶空间。

我实际上建议将字段添加到托管表中,并将下载的表保留为只读,可替换的引用表。

答案 1 :(得分: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