【问题标题】:MySQL Database Design for City/State城市/州的 MySQL 数据库设计
【发布时间】:2011-08-19 02:29:34
【问题描述】:

我正在建立一个网站,其中将有很多公司及其业务列表,因此他们将有他们的地址、城市、州、邮政编码等。

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

我导入了上面的数据库,所以我的问题是如何将它连接到我的公司表?当一家公司注册时,我想我可以为该州做一个下拉列表,然后它会下拉到该州从数据库中提取的城市,以便他们从中选择,然后是邮政编码。那行得通吗?这样他们就不必自己输入了?

我只是对如何正确执行此操作以及如何使其协同工作有点困惑。

谢谢。

【问题讨论】:

  • 尝试使用主键作为company表的外键,建立两者之间的关系
  • 所以 zip_code 是我刚刚下载的数据库的主键。在我的公司表上,我把它附在什么上面?
  • @Drew,您需要在公司表中包含另一个包含邮政编码的字段,您可以将其与邮政编码查找表进行比较

标签: mysql database state zipcode city


【解决方案1】:

选项 1:

将所有字段添加到您的地址表中,在添加时引用选定的表,将城市、州、邮编、县、纬度和经度放入您的表中。

优势

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

选项 2:

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

优势

  • 标准化 - 所有记录都在一个表中。更少的驱动空间。

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

【讨论】:

    【解决方案2】:

    您需要有以下表格设计(公司/城市)-

    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

    .

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 2014-01-27
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      相关资源
      最近更新 更多