Что лучше? Страны, штаты и города на базе данных или нет? - PullRequest
2 голосов
/ 07 июля 2011

Я разрабатываю веб-сайт с PHP и MySQL, где пользователи могут зарегистрироваться. В форме регистрации они должны заполнить страну, штат и город. Я хочу знать, если это хорошая идея, чтобы сохранить его в моей базе данных или нет. Я в замешательстве, потому что Facebook, Google и другие имеют формы автозаполнения, где эти теги ввода указывают на вашу страну, штат и даже города.

Ответы [ 6 ]

2 голосов
/ 07 июля 2011

Вы не должны сохранять все три отдельно, как country_id, state_id и city_id.Причина в том, что это избыточная информация.Город неявно принадлежит государству, принадлежит стране.Вы не получаете никакой информации, сохраняя их как отдельные значения, и только рискуете испортить данные (поскольку вы можете сохранить Япония, Вашингтон, Берлин как набор, который является недействительной и противоречивой информацией).

Вы должны создать иерархическое дерево в вашей базе данных.Города имеют родительское государство, имеют родительскую страну.Тогда вам нужно только спросить пользователя о его городе, и вся остальная информация неявна.Откуда вы получаете эти данные - это другая тема.Вы можете попробовать API Google, например.

2 голосов
/ 07 июля 2011

Вопрос в том, хотите ли вы, чтобы это работало для всех в мире или только для адресов в США, а также для какой цели вы пытаетесь собрать информацию.

Если ваш сайт предназначен для электронной коммерции и вы хотите собирать адреса доставки, вам потребуется достаточно хорошее качество проверки ваших входных данных - в противном случае UPS не будет доставлять данные вашим клиентам.

Если, с другой стороны, вы просто хотите иметь достаточно хорошее представление о том, где находятся люди, но не обязательно иметь качество почтового адреса, просто используйте бесплатный веб-сервис, такой как PlaceFinder

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

Это должно позволить вашим пользователям просто ввести адрес, не разбивая его на город / штат / страну, и просто сохранить полученный идентификатор места (woeid) в вашей базе данных.

1 голос
/ 07 июля 2011

Как правило, я бы рекомендовал вам иметь список стран только для чтения, чтобы пользователь мог только выбирать, но не добавлять.Затем, для состояний и ссылок, имейте предварительно загруженный список, но разрешите пользователям добавлять один.(Вы можете предварительно загрузить эти списки из любой интернет-базы данных или службы, которую вы хотите, например, Yahoo).

Во всех случаях предложение является очень хорошим плюсом, для них (из-за удобства использования) и для вас (потому что это будетуменьшить дублирование данных)

Надеюсь, это поможет.Приветствия

0 голосов
/ 24 октября 2011

Также учтите, что есть города с одинаковыми названиями, но расположенные в разных странах. Рига является столицей Латвии, а также Рига в США, штат Мичиган.

0 голосов
/ 20 июля 2011
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 ;

Используйте приведенную выше структуру для сопоставления городов и стран.Вы также можете отметить лучшие города и страны.

0 голосов
/ 07 июля 2011

Это зависит от требований вашего бизнеса. Если вы хотите предлагать регионализированные услуги (имея лог в зависимости от географического региона пользователей), тогда да, вам обязательно нужно хранить регионы в БД.

С другой стороны, вам придется спроектировать вашу БД для хранения ваших регионов (по крайней мере, с 3 таблицами в отношении 1-n или 1 таблицей с отношением родитель / потомок) и заполнить эту БД действительными данными - у вас все страны / штаты и города со всего мира?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...