Размер по умолчанию для полей базы данных

Какой размер вы используете для общих полей базы данных, таких как имя, фамилия, адрес электронной почты, пароль и т. д.? Я вижу эти общие поля во многих базах данных блогов, форумов, электронной коммерции и т. д. Но я не знаю, есть ли какая-то ссылка или значение по умолчанию для размера этих общих полей. Итак, я хочу знать, какой метод/ссылка/основа, которую вы используете для выбора размера для общих полей.


person Click Ok    schedule 19.02.2009    source источник
comment
См.: stackoverflow.com/questions/512614/   -  person PartialOrder    schedule 19.02.2009


Ответы (5)


Отчасти это зависит от вашей СУБД. Некоторые, например MySQL 5, заботятся о длине столбца VARCHAR(n), а не о столбце TEXT неограниченной длины; другие, например PostgreSQL, считают TEXT и VARCHAR(n) внутренне идентичными, за исключением того, что длина проверяется в столбцах VARCHAR(n). Написание чего-то вроде VARCHAR(65536) в PostgreSQL глупо; если вам нужен столбец неограниченной длины, выберите ТЕКСТ и покончите с этим.

Конечно, иногда попытка сохранить слишком длинное значение нарушит ваш макет или позволит кому-то злоупотребить системой, выбрав длинное имя без пробелов (например). Обычно то, что я делаю для таких полей имени пользователя, просто выбираю верхнюю длину, чтобы любой, кто хочет более длинное имя пользователя, пытался создать проблемы; 64 символа — хорошее круглое значение, и, похоже, оно работает хорошо. Для реальных имен и адресов (которые не так часто отображаются пользователям, как имя пользователя), вам нужно использовать что-то более длинное. Вам нужно значение, достаточно большое, чтобы оно могло принять любой допустимый ввод, но не настолько большое, чтобы кто-то мог вставить в поле строку длиной в гигабайт только для атаки на вашу систему. 1024 символа вполне разумны: 1 КБ — это достаточно небольшой объем текста, с которым легко работать, круглое число и больше, чем любая вменяемая адресная строка или имя.

Адреса электронной почты, согласно соответствующему RFC, номер которого мне лень искать прямо сейчас, могут быть не длиннее 320 символов. Итак, длина поля вашей электронной почты. Оказывается, SMTP ограничивает длину полей до 256 символов; поскольку адреса электронной почты должны быть заключены в квадратные скобки, самый длинный действительный адрес электронной почты на самом деле составляет 254 символа. (Эта страница содержит более подробную информацию.) Итак, там длина поля вашего электронного письма.

Пароли должны НИКОГДА храниться в виде открытого текста, поэтому поле пароля должно быть массивом байтов или типом BLOB, длина которого должна быть достаточной для хранения вывода используемой вами хэш-функции (или самый большой элемент используемой криптографической группы для более продвинутых схем, таких как SRP-6a).

person kquinn    schedule 19.02.2009
comment
Только программисты считают, что 64 — это хорошее круглое значение :) - person Greg Hewgill; 19.02.2009
comment
Знаешь, я читал красивую строку с круглым значением и ничего не думал об этом, пока ты тоже не упомянул об этом. :-) - person lc.; 19.02.2009
comment
Это значит, что нас трое, я даже не думал об этом, на самом деле я сказал себе, что 64 — это хорошее круглое число, может быть, даже 128, если вы хотите более широкое поле, я и мое проклятое мышление программирования. - person UnkwnTech; 19.02.2009
comment
Электронная почта, согласно RFC, может иметь длину до 320 символов. ДА, я однажды просмотрел это, и да, ваша память не подвела вас. :) - person alphadogg; 19.02.2009

мне нравится 16, 32, 64, 128 или 256

person Steven A. Lowe    schedule 19.02.2009
comment
странно, но так близко к моему - я просто округляю свое - 10, 20, ... 120, 250 - person IEnumerator; 19.02.2009
comment
степень двойки делает компьютер счастливым! - person Steven A. Lowe; 19.02.2009

Удвойте свои оценки. А затем удвоить их, чтобы вместить юникод.

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

person Learning    schedule 19.02.2009

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

SELECT MAX(LEN(lastname)) FROM dbo.MyDatabase

даст вам все, что вам нужно.

ОБНОВЛЕНИЕ: Не используйте число, которое вы получили точно. Очевидно, что вы можете немного увеличить его в зависимости от вашей неопределенности, если только у вас нет очень большой выборки.

person alphadogg    schedule 19.02.2009

Что я обычно делаю, так это думаю о том, насколько длинным может быть значение поля, а затем удваиваю его, чтобы быть в безопасности.

Например. Имя: varchar(70) Электронная почта: varchar(200)

person Fritz H    schedule 19.02.2009
comment
Адрес электронной почты может содержать до 320 символов. - person PartialOrder; 19.02.2009