Как избежать дублирования адресов в таблице базы данных - PullRequest
5 голосов
/ 15 мая 2009

Я стараюсь не изобретать велосипед, когда речь идет о хранении уличных адресов в таблице только один раз. Ограничения уникальности не будут работать в некоторых распространенных ситуациях:

100 W 5th Ave
100 West 5th Ave
100 W 5th

200 N 6th Ave Suite 405
200 N 6th Ave  #405

Я мог бы реализовать некоторую бизнес-логику или триггер, чтобы нормализовать все поля перед вставкой и использовать ограничения уникальности для нескольких полей в таблице, но было бы легко пропустить некоторые случаи с чем-то, что сильно отличается от уличных адресов. *

Лучше всего будет универсальный идентификатор для каждого адреса, возможно, основанный на GPS-координатах. Перед сохранением нового адреса посмотрите его GUID и посмотрите, существует ли GUID в таблице адресов.

Такая организация, как Mapquest, Почтовая служба, FedEx или правительство США, вероятно, имеет такую ​​систему.

Кто-нибудь нашел хорошее решение для этого?

Вот моя таблица адресов (генерируется JPA):

CREATE TABLE address
(
  id bigint NOT NULL,
  "number" character varying(255),
  dir character varying(255),
  street character varying(255),
  "type" character varying(255),
  trailingdir character varying(255),
  unit character varying(255),
  city character varying(255),
  state character varying(255),
  zip integer,
  zip4 integer,
  CONSTRAINT address_pkey PRIMARY KEY (id)
)

Ответы [ 4 ]

4 голосов
/ 15 мая 2009

Найдите адрес на картах Google и используйте написание, которое они используют.

0 голосов
/ 16 июня 2009

Я остановился на услуге USC WebGIS из-за их приятного интерфейса веб-службы и простоты регистрации.

Геокоды не подходят в качестве уникального ключа для адресов улиц по ряду причин. Например, геокодирование не может различить различные объекты в комплексе кондоминиумов или многоквартирных домах.

Я решил использовать проанализированный адрес из результата геокодирования и наложить уникальные ограничения на номер улицы, название улицы, единицы, город, штат и почтовый индекс. Это не идеально, но это работает для того, что я делаю.

0 голосов
/ 15 мая 2009

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

Похоже, геокодирование может обеспечить решение. При геокодировании вводом может быть адрес улицы, а выводом будут координаты широты и долготы с достаточной точностью для разрешения конкретного здания.

Есть более серьезная проблема с двусмысленностью адресов, чем я думал. Это со страницы Википедии о геокодировании:

"... в Бостоне, штат Массачусетс, есть несколько 100 улиц Вашингтона, поскольку несколько городов были аннексированы без изменения названий улиц."

На странице Википедии о геокодировании есть список ресурсов (многие из которых бесплатны) для выполнения геокодирования.

0 голосов
/ 15 мая 2009

Вам нужна поддержка регулярных выражений, таких как синтаксис. Вы можете придумать какую-нибудь автоматную функцию, которая будет анализировать токены и пытаться сопоставить их, а затем развернуть или свернуть их в сокращения. Я бы посмотрел в glob () как функции, которые поддерживают *? и т.д. на Unix как быстрое грязное исправление.

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