Універсальний спосіб зберігання географічної адреси / місцезнаходження в базі даних:
[Address] nvarchar(max) not null
Для цього потрібна найменша кількість програмного коду (а це зменшує витрати на обслуговування) і повністю сумісна з будь-якою адресою. Однак у нього є три великі проблеми:
Відсутність перевірки даних означає, що поле можна використовувати для інших цілей, ніж для збереження адреси. Однією з цілей є DOS-атака, призначена заповнити простір вашої бази даних, ввівши 2 ГБ даних у адресне поле.
Дані, що зберігаються таким чином, унеможливлюють їх обробку з метою бізнес-розвідки та обміну даними. Наприклад, скільки користувачів з Індії? Простий спосіб сказати це не існує, оскільки ці адреси не будуть нормалізовані.
Користувачі можуть помилково ввести неповну або явно неправильну адресу.
Щоб пом'якшити перший випуск, обмежте поле тим, що вважаєте розумним. Особисто я почав би з 1000 символів, а потім зменшив би його, виходячи з довжини адрес, введених першими користувачами, як тільки ви отримаєте набір даних досить великий.
Щоб пом'якшити дві інші проблеми, ви можете скористатись стороннім API, який аналізує адреси та представляє вам дані, що містять країну, місто, поштовий індекс тощо. Якщо можливо, API повинен мати змогу відображати адресу на повернення картці до користувача, щоб зменшити ризик для користувача ввести неповну або неправильну адресу: більшість користувачів знають, де вони живуть, і побачивши іншу позицію на карті, це негайно дасть їм зрозуміти, що вони повинні перевірити свій внесок.
Зауважте, що який би API ви не використовували, він не буде ідеальним. Він знайде більшість адрес, але не всі. Це означає, що якщо API повідомляє, що адреса не існує, але користувач наполягає на тому, щоб це було, ви повинні апріорі довіряти користувачеві, навіть якщо він може помилитися.
Це також означає, що ви все одно повинні зберігати вихідний вхід користувача, поруч із результатом API. Це означає, що схема стає:
[RawAddress] nvarchar(max) not null
[ParsedAddress] xml null