2010-09-29 3 views
3

Мне нужно создать схему базы данных для хранения информации о пользователе (id, name, p/w, email address ... и т. Д.). При выборе этих полей я всегда выбирал произвольные суммы. С учетом этого у меня есть два вопроса:Пользовательская схема для сайта

1) Каковы хорошие размеры для этих полей? Я уверен, что существует максимальная длина адреса электронной почты, например ... и т. Д.

2) Теперь мне нужно сохранить почтовые адреса пользователей для покупок кредитных карт, включая международные почтовые адреса. Это область, в которой я не хочу выбирать произвольные размеры.

Кто-нибудь знает о хорошей схеме для любого? Возможно, есть проект для этого?

Спасибо!

ответ

1

Я дам вам руку с частью 1. В общем, вы не должны сильно подчеркивать размер ваших полей БД MySQL, вам не нужно точно указывать номер прямо - просто убедитесь, что кто-то с разумным ответом не убирает свои данные.

`id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
`username` varchar(255), 
`email` varchar(255), 
`password` char(256) 

Обратите внимание, что для пароля у меня есть поле с символом 256 бит вместо поля varchar. Thats, потому что вы никогда не должны хранить текстовые пароли в базе данных. Вместо этого вы должны всегда хранить пароль в хэшированном формате с помощью своего рода уникальной «соли» для этого пароля. Вы можете найти несколько обучающих программ в Интернете, а длина поля пароля зависит от типа хэширования, который вы используете в пароле.

1

Также рассмотрите, какой двигатель db вы будете использовать и будет ли первичный ключ электронной почтой, rowid или произвольным числом. Обычно я сохраняю пароли во второй таблице, называемой «безопасность», используя хэш, как было предложено выше. Вот пример.

CREATE TABLE IF NOT EXISTS `users` (
    `user_id` varchar(255) NOT NULL, 
    `active` char(1) default 'Y', 
    `created_date` INTEGER UNSIGNED default 0, 
    `email` varchar(255) default NULL, 
    `first_name` varchar(255) default NULL, 
    `last_name` varchar(255) default NULL, 
    `modified_date` INTEGER UNSIGNED default 0, 
    PRIMARY KEY (`user_id`, `active`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 
+0

Интересно. Я никогда раньше не видел, чтобы два поля использовались для первичного ключа. Как вы используете «активный» таким образом? – Ethan

+0

Это нормально для пользователя, чтобы инактивировать (я предпочитаю не удалять, чтобы сохранить FK на других таблицах). Но тогда я не хочу ограничивать этот user_id от кого-то другого. Таким образом, с этим user_id может быть только один активный пользователь. Лучшим примером является электронная почта как user_id, поскольку электронные письма могут повторяться, когда пользователь прекращает обслуживание с интернет-провайдером. – AutoSponge

0

Это довольно сложный вопрос, потому что, на мой взгляд, есть разница между тем, что вы «должны» позволить и то, что считается допустимым по IETF.

Максимально допустимый адрес электронной почты - 256 символов, который включает в себя косую черту в начале и конце адреса электронной почты (поэтому всего 254 используемых символа). Вы можете найти подробную информацию об этом на this page by Dominic Sayers.

Но будет ли у любого законного пользователя действительно длинный адрес электронной почты?

Что касается адресов улиц, я не верю, что это указано где угодно, однако согласно the world's longest website самым длинным названием улицы является 72 символа. Поэтому, если вы сделали поле 100 символов, у вас будет более чем достаточно места для уличного адреса.

Вам не нужно слишком беспокоиться о том, чтобы все на 100% правильное, вы должны больше заботиться о качестве данных, которые вы решили принять в базу данных (убедитесь, что они действительны/чисты). Также предоставляйте четкие сообщения об отказе, если кто-то вводит что-то слишком простое - и убедитесь, что с владельцем веб-сайта есть простой способ связаться с ним, если это произойдет.

Одна вещь, которую я хотел бы отметить, NoSQL - это все ярость прямо сейчас, и она использует механизмы без базы данных, например MongoDB и CouchDB. Это не best solution for everything, однако, если вы очень обеспокоены тем, что у вас правильная схема, возможно, база данных без схемы может быть хорошим вариантом.

+0

Спасибо. Это именно то, что я искал. Я пытался найти это сам, но я, очевидно, использовал неправильные условия поиска. Я посмотрел варианты NoSQL, но я ушел, чувствуя, что MySQL - более безопасная ставка. В настоящее время они не кажутся очень зрелыми из-за моей способности поддерживать их. Я понимаю, что Digg и другие сайты используют их, но у них есть разработчики для поддержки этих приложений внутри компании. Мне нужно что-то, что просто работает и стабильно для хранения информации пользователя и файлов, которые они загружают. Мысли? – Ethan

+0

Рад, что это могло бы помочь, я бы согласился с тем, что, если вы не уверены в способности поддерживать технологию кровотечения, чтобы держаться подальше и идти с проверенной и надежной системой. – tplaner

Смежные вопросы