Я не вижу проблем с сохранением почтового индекса в виде числа, даже если вы не собираетесь выполнять над ним математические операции.
В нашем корпоративном хранилище данных мы получаем данные из многих устаревших систем. В результате мы видим, что используется много мусорных данных.
Возьмем наш случай, когда у нас есть географический идентификатор, который представляет собой заполненное нулями 4-значное «числовое» значение. Это поле часто используется для объединения таблиц.
Я бы выбрал один из двух подходов: 1) объявить столбец как поле char длины 4 и добавить CONSTRAINT LIKE '[09] [09] [09] [09]' 2) определить его как числовую длину 4 и, если пользователи этого хотят, отформатируйте значение только при отображении.
Подход с цифрой 1 избавляет вас от необходимости постоянного форматирования, что не составляет особого труда, но если вы часто фильтруете и даже индексируете / объединяете столбец, я бы сказал, что у нас нет варианта №2.
Третья причина в том, что мой опыт заключается в том, что люди просто ленивы, когда дело доходит до добавления ограничений в базу данных, или они невежественны. Я думаю, что это больше лень, лично. Я считаю, что существующие ограничения в основном применяются как изменения в приложении, которое первоначально собирает данные, и эти изменения не применяются единообразно.
В результате наше хранилище данных в конечном итоге получает все виды вариаций, включая непоследовательное предварительное заполнение нулями или обоснование значения.
Когда вы определяете что-то как INTEGER, вы автоматически получаете более эффективное хранилище, особенно при индексации по столбцу, а также и редактирования, которое все понимают, и, скорее всего, будут последовательно применяться в унаследованных системах разработчиками баз данных с различными возможностями.
У меня нет проблем с вариантом № 1, за исключением использования поля в индексе и моей озабоченности подходом, когда вы принимаете поле как афа-число, люди склонны добавлять в него больше мусора.
Взять, к примеру, наш идентификатор сотрудника Peoplesoft. Кто-то решил добавить «X» перед «числом», заполненным нулями, состоящим из 6 символов, чтобы обозначить, что работник является подрядчиком. Это нарушает мою личную практику не объединять отдельные части информации в одно поле. Это вызвало всевозможные проблемы несоответствия в разных системах. Если бы это поле было числовым, никто бы не попытался это сделать.
Комментарии?
Вот что происходит:
Поскольку встроенный элемент занимает несколько строк, jQuery предоставит вам крайнюю левую позицию этого элемента, а не смещение начала элемента.
Чтобы обойти это, попробуйте этот плагин:
jQuery.fn.inlineOffset = function() {
var el = $('<i/>').css('display','inline').insertBefore(this[0]);
var pos = el.offset();
el.remove();
return pos;
};
Плагин создаст временный элемент и вставит его непосредственно перед целевым элементом - затем он вернет смещение этого временного элемента.
Пример использования:
alert( jQuery('strong').inlineOffset().left );
] Причина, по которой вы получаете результат в 8 пикселей, заключается в том, что даже если элемент начинается на полпути через ваш контейнер, поскольку есть разрыв строки, его левый край находится на расстоянии 8 пикселей от страницы.
У меня одно из тех ощущений, что, вероятно, есть способ сделать это лучше, чем этот, но первое, что я мог придумать, чтобы обойти эту проблему, - это вставить другой элемент прямо перед
и проверьте его положение:
$("<span><span>").insertBefore($('#s')).offset();
Я считаю, что смещение относительно документа, а позиция относительно родителя.