Лучшие практики для хранения почтовых адресов в базе данных (RDBMS)?

Используя эту функцию PHP mysql_escape_string(), вы можете быстро получить хорошую профилактику.

Например:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."'

mysql_escape_string - Сбрасывает строку для использования в mysql_query

Для большей профилактики вы можете добавить в конце ...

wHERE 1=1   or  LIMIT 1

Наконец вы получаете:

SELECT * FROM users WHERE name = '".mysql_escape_string($name_from_html_form)."' LIMIT 1
99
задан Charles 22 March 2013 в 22:33
поделиться

8 ответов

Добавление к тому, что Jonathan Leffler и Paul Fisher сказали

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

6
ответ дан Community 24 November 2019 в 05:05
поделиться

Где "компромисс" в хранении ZIP как ЧИСЛО или VARCHAR? Это - просто выбор - это не компромисс, если нет преимущества для обоих, и необходимо бросить некоторые преимущества для получения других.

, Если сумма zip не имеет значения вообще, Zip, поскольку число не полезно.

2
ответ дан 24 November 2019 в 05:05
поделиться

Если Вы не собираетесь сделать математику на уличных числах или zip / индексы, Вы просто приглашаете будущую боль путем хранения их как численных данных.

Вы могли бы сохранить несколько байтов тут и там, и возможно получить более быстрый индекс, но что делает Вас, когда почтовые США, или безотносительно другой страны, с которой Вы имеете дело, решает вводить альфы в коды?

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

7
ответ дан seanb 24 November 2019 в 05:05
поделиться

Необходимо определенно рассмотреть номер дома хранения как символьное поле, а не число, из-за особых случаев, таких как "получисла", или мой текущий адрес, который является чем-то как "129 А" — кроме A, не рассматривают как число квартиры для услуг по доставке.

17
ответ дан Paul Fisher 24 November 2019 в 05:05
поделиться

Как 'международный' пользователь, нет ничего более расстраивающего, чем контакт с веб-сайтом, который ориентирован только вокруг адресов американского формата. Это немного грубо сначала, но становится серьезной проблемой, когда проверка также фанатична.

, Если Вы обеспокоены движением глобального, единственный совет, я имею, должен сохранить вещи свободной формой. Разные страны имеют различные соглашения - в некоторых, номер дома прибывает перед названием улицы в некоторых он прибывает после. У некоторых есть состояния, некоторые регионы, некоторые округа, некоторые комбинации тех. Здесь в Великобритании, индекс не является индексом, это - почтовый индекс, содержащий и буквы и числа.

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

23
ответ дан Andrew Ferrier 24 November 2019 в 05:05
поделиться

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

существует, конечно, много существующих ранее ответов (проверьте модели данных в качестве примера в DatabaseAnswers, например). Многие существующие ранее ответы являются дефектными при некоторых обстоятельствах (не выбирающий Ответы DB вообще).

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

, По моему мнению, это часто (который не означает всегда ), разумный, чтобы и записать 'изображение адресного ярлыка' адреса и отдельно проанализировать содержание. Это позволяет Вам иметь дело с различиями между размещением индексов, например, между разными странами. Несомненно, можно записать анализатор и средство форматирования, которые обрабатывают эксцентриситеты разных стран (например, американские адреса имеют 2 или 3 строки; в отличие от этого, британские адреса могут иметь значительно больше; один адрес, в который я пишу периодически, имеет 9 строк). Но может быть легче сделать, чтобы люди сделали анализ и форматирование и позволили DBMS просто хранить данные.

8
ответ дан Community 24 November 2019 в 05:05
поделиться

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

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

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

11
ответ дан 24 November 2019 в 05:05
поделиться

Это может быть излишним, но если вам нужно решение, которое будет работать с несколькими странами, и вам нужно программно обрабатывать части адреса:

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

2
ответ дан 24 November 2019 в 05:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: