2011-08-19 102 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