Хранение и запрос почтовых адресов - PullRequest
2 голосов
/ 02 февраля 2012

У меня есть система с понятием адресов (как в почтовых адресах). У нас есть таблица адресов с полями Address1-4, City, PostCode.

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

Например

Address1: Flat 23
Address2: Big Towers
Address3: 1 Baker Street
Address4: (Blank)
City: London
PostCode: W1U 6AA

Так, например, если вы хотите найти "Flat 23 in Big Towers", я мог бы напечатать "23 Big Towers" или "Big Towers 23" в поле запроса и ожидать, что он найдет вышеуказанное. Но поскольку поля разделены, этого трудно достичь.

Приложение является полностью проприетарным, поэтому внесение изменений в способ хранения адреса или его хранения несколькими способами является вполне осуществимым. Это пользовательский интерфейс C # и Java среднего уровня.

Есть ли у кого-нибудь предложения о том, как сохранить Адрес и структурировать поисковый запрос UI +, чтобы сделать это простым с точки зрения пользователя?

РЕДАКТИРОВАТЬ : добавлен пример

Ответы [ 4 ]

2 голосов
/ 02 февраля 2012

Исходя из вашего примера, вы можете создать сгенерированное поле, объединяющее все остальные поля (с разделителями пробелов). Тогда вы можете просто запросить это поле вместо других, например, (на вашем примере):

Сгенерированное поле:

Flat 23 Big Towers 1 Baker Street London W1U 6AA

Запрос:

SELECT
  * 
FROM
  Address
WHERE
  GeneratedField LIKE '%searchTerm1%' 
AND
  GeneratedField LIKE '%searchTerm2%'
AND
  GeneratedField LIKE '%searchTerm3%' 
1 голос
/ 02 февраля 2012

Есть ли у вас возможность подключения к стороннему API?Вы можете отправить запрос на карты Google или Yahoo с исходной строкой, а затем получить обратно хорошо разграниченный набор данных, который можно использовать для сравнения.Это может быть самым простым - пусть серверы Google сделают это за вас!В качестве прямого ответа, я бы сказал, сохранить каждый компонент адреса отдельно, а затем запросить результаты поиска API.

Я думаю, что здесь есть некоторые интересные дополнительные обсуждения:

Разбор пригодной для использования улицыАдрес, город, штат, почтовый индекс из строки

0 голосов
/ 02 февраля 2012

Вы можете сделать это просто с помощью параметризованного запроса. Просто окружите каждое текстовое значение % для MSSQL и добавьте их в качестве параметров для этого запроса:

SELECT * FROM Addresses WHERE Address1 LIKE @Address1 OR Address2 LIKE @Address2 OR Address3 LIKE @Address3 OR Address4 LIKE @Address4

parameters.Add("@Address1", String.Format("%{0}%", address1Text.Text)

0 голосов
/ 02 февраля 2012

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

Дает вам гораздо больше возможностей и простор.

...