3

我正在开发一个使用 PHP 和 MySQL 的网站,用户可以在其中注册。在注册表单中,他们需要填写国家、州和城市。我想知道将它保存在我的数据库中是否是个好主意。我很困惑,因为 Facebook、谷歌和其他人都有自动填写表单,这些输入标签会建议你所在的国家、州甚至城市。

4

6 回答 6

3

您不应该单独保存所有三个,country_id例如state_idcity_id。原因是这是冗余信息。一个城市隐含地属于一个国家属于一个国家。通过将它们保存为单独的值,您不会获得任何信息,只会引入混淆数据的风险(因为您可以将日本、华盛顿、柏林保存为一组,这是无效且不一致的信息)。

您应该在数据库中创建一个层次树。城市有一个母州有一个母国。然后你只需要向用户询问他们的城市,所有其他信息都是隐含的。从哪里获取数据是一个不同的主题。例如,您可以尝试 Google 的 API。

于 2011-07-07T04:46:24.783 回答
2

问题是你是否想让它适用于世界上的每个人,或者只适用于美国地址——以及你试图收集信息的目的是什么。

如果您的网站是电子商务网站并且您想收集送货地址,则您需要对您的输入进行相当高质量的验证——否则 UPS 不会将这些东西交付给您的客户。

另一方面,如果您只是想对人们的位置有一个相当好的了解,但邮政地址质量并不重要,只需使用像 PlaceFinder 这样的免费网络服务

http://developer.yahoo.com/geo/

它应该允许您让您的用户只输入地址而不将其拆分为城市/州/国家/地区,并且只需将生成的地点 ID (woeid) 存储在您的数据库中。

于 2011-07-07T04:44:01.073 回答
1

一般来说,我建议你有只读的国家列表,所以用户只能选择但不能添加。然后,对于州和引用,有一个预先加载的列表,但允许用户添加一个。(您可以从任何您想要的 Internet 数据库或服务中预加载此列表,例如 yahoo 的)。

在所有情况下,建议对他们(因为可用性)和您(因为它会减少数据重复)来说都是一个很好的加分项

希望这可以帮助。干杯

于 2011-07-07T04:43:44.243 回答
1

Also take into account, that there are cities which have the same name but are located in separate countries. Riga is a capital city of Latvia and also Riga is in USA, Michigan.

于 2011-10-24T08:04:46.210 回答
0

这取决于您的业务需求。如果您想提供区域化服务(具有基于用户地理区域的 logc),那么是的,您绝对应该将这些区域保存在数据库中。

另一方面,您必须设计您的数据库来保存您的区域(至少有 3 个表处于 1-n 关系或 1 个表具有父/子关系)并用有效数据填充该数据库 - 您是否拥有所有国家/地区/来自世界各地的州和城市?

于 2011-07-07T04:43:06.957 回答
0
CREATE TABLE `pl_countries` (
  `countryID` int(4) NOT NULL auto_increment,
  `iso` char(2) NOT NULL,
  `name` varchar(80) NOT NULL,
  `printable_name` varchar(80) NOT NULL,
  `iso3` char(3) default NULL,
  `numcode` smallint(6) default NULL,
  `top_flag` tinyint(1) NOT NULL,
  `status` tinyint(1) NOT NULL,
  PRIMARY KEY  (`countryID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

CREATE TABLE `cities` (
  `city_id` bigint(20) NOT NULL auto_increment,
  `countryID` bigint(20) NOT NULL,
  `city` varchar(30) NOT NULL default '',
  `top_city` tinyint(1) NOT NULL,
  PRIMARY KEY  (`city_id`),
  KEY `country_id` (`country_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

使用上述结构进行城市到国家的映射。您还可以标记顶级城市和国家。

于 2011-07-20T17:39:35.510 回答