Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вопрос о флаге активации для пользователя
 
 автор: baston   (23.04.2010 в 14:36)   письмо автору
 
 

На некоторых (да, практически на всех) сайтах регистрация пользователя осуществляется стандартно: пользователь вводит свой логин, пароль, емайл. Далее ему на указанный емайл приходит письмо с предложением активировать учетную запись. После чего он получает доступ на сайт.

Насколько такая система регистрации оправдана и необходима? Ведь для того, чтобы ее реализовать, приходится добавлять (или иметь) специальный столбец в таблице пользователей - actived. Это типа флага - активирован или нет.

Или есть другие варианты регистрации и получения доступа пользователя к сайту?
Спасибо.

  Ответить  
 
 автор: cheops   (23.04.2010 в 14:52)   письмо автору
 
   для: baston   (23.04.2010 в 14:36)
 

Этот столбец много места не съест, а польза от него есть даже если для регистрации не требуется подтверждения e-mail (например, чтобы пользователей банить).

  Ответить  
 
 автор: baston   (23.04.2010 в 15:06)   письмо автору
 
   для: cheops   (23.04.2010 в 14:52)
 

У меня немного по-другому реализовано (в набросках).
У меня есть столбец status, в котором находятся айди из доп.таблицы status (active, locked). По умолчанию у меня все пользователи при регистрации становятся active.
Если я правильно понимаю, то суть вашего ответа и моей реализации одна.

  Ответить  
 
 автор: Valick   (23.04.2010 в 15:13)   письмо автору
 
   для: baston   (23.04.2010 в 15:06)
 

и зачем если не секрет?
достаточно было бы таблицы например с названием locked
в которую бы попадали айди опальных юзеров + время окончания бана + примечание (причина бана и т.д.)
а уж те граждане которые не попали в эту таблицу естественно со статусом active по умолчанию.

  Ответить  
 
 автор: cheops   (23.04.2010 в 15:15)   письмо автору
 
   для: Valick   (23.04.2010 в 15:13)
 

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

  Ответить  
 
 автор: Valick   (23.04.2010 в 15:34)   письмо автору
 
   для: cheops   (23.04.2010 в 15:15)
 

ну тут я больше думал о том чтобы избавиться от хранения ненужной информации например на форуме отираются 300 000 человек из них 20 000 в бане, так зачем же держать ненужную инфу (то что они активны) для 280 000 человек?
к тому же статусов может быть сколь угодно многоразных, и при моем подходе один и тот же юзер может находиться в неограниченном* количестве статусов одновременно.

  Ответить  
 
 автор: cheops   (23.04.2010 в 16:25)   письмо автору
 
   для: Valick   (23.04.2010 в 15:34)
 

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

  Ответить  
 
 автор: baston   (23.04.2010 в 15:28)   письмо автору
 
   для: Valick   (23.04.2010 в 15:13)
 

Ну, например, чтобы потом можно было добавить новую сущность (так это называется?), типа gold - пользователь, имеющий право на доп.возможности в системе.

  Ответить  
 
 автор: Valick   (23.04.2010 в 15:34)   письмо автору
 
   для: baston   (23.04.2010 в 15:28)
 

вот-вот... прочитайте мой ответ Хеопсу.

  Ответить  
 
 автор: baston   (23.04.2010 в 15:55)   письмо автору
 
   для: Valick   (23.04.2010 в 15:34)
 

То есть, опять отдельная таблица связей: id_user - id_status?

  Ответить  
 
 автор: Valick   (23.04.2010 в 16:06)   письмо автору
 
   для: baston   (23.04.2010 в 15:55)
 

можно просто id_user - status

  Ответить  
 
 автор: baston   (23.04.2010 в 16:13)   письмо автору
 
   для: Valick   (23.04.2010 в 16:06)
 

Вот проясните здесь пожалуйста, какой тип поля вы имели в виду под status? У меня в этом столбце предполагалось иметь айди. Тогда можно действительно иметь массу статусов.
А в вашем варианте (как я понял) каждому айди пользователя будет соответствовать текстовое значение статуса?

  Ответить  
 
 автор: Valick   (23.04.2010 в 16:24)   письмо автору
 
   для: baston   (23.04.2010 в 16:13)
 

это абсолютно не принципиальная разница для логики
если бы у Вас статусу 1 соответствовал краткий пересказ 1 и 2 тома войны и мир, а статусу 2 соответственно 3 и 4 том, то да не вынести их в отдельную таблицу бы ло бы преступлением по отношению к MySQL :)
а так используя текст мы проиграем в размере (он станет больше) и даже скорости выборки по этому полю (правда этого мы можем и не заметить), но выиграем в простоте кода (и возможно в общей скорости запроса) тут уже нужны экперементы.

  Ответить  
 
 автор: cheops   (23.04.2010 в 15:13)   письмо автору
 
   для: baston   (23.04.2010 в 15:06)
 

А ну в таком случае, действительно не зачем ещё один дополнительный столбец вводить.

  Ответить  
 
 автор: Trianon   (23.04.2010 в 15:41)   письмо автору
 
   для: baston   (23.04.2010 в 15:06)
 

>У меня есть столбец status, в котором находятся айди из доп.таблицы status (active, locked).

Как-то несовсем понятно.
И множественное число у глагола - в столбце находятся id - пугает. Сильно пугает.

  Ответить  
 
 автор: Valick   (23.04.2010 в 15:47)   письмо автору
 
   для: Trianon   (23.04.2010 в 15:41)
 

чем пугает? 0 - active, 1- locked, 2- gold всего аж три статуса :)

  Ответить  
 
 автор: baston   (23.04.2010 в 15:50)   письмо автору
 
   для: Trianon   (23.04.2010 в 15:41)
 

В таблице users есть столбцы id_user, name, user_id_status.
Есть другая таблица - status со столбцами: id_status и name_status.
Для каждого конкретного пользвоателя в ячейке user_id_status будет содержаться значение из таблицы status, а конкретно - соответствующий id_status.

  Ответить  
 
 автор: Valick   (23.04.2010 в 15:59)   письмо автору
 
   для: baston   (23.04.2010 в 15:50)
 

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

  Ответить  
 
 автор: baston   (23.04.2010 в 16:05)   письмо автору
 
   для: Valick   (23.04.2010 в 15:59)
 

Логично хранить, как вы и предложили, в таблице-связке.
Тогда у меня БД уже разрастается таблицами...

  Ответить  
 
 автор: Valick   (23.04.2010 в 16:07)   письмо автору
 
   для: baston   (23.04.2010 в 16:05)
 

лучше + одна маленькая таблица, чем + одно большое поле ;)
просто погуглите на счет нормализации таблиц и баз данных даже просто прочитав об этом станет уже легче, ну а если в этом еще и разобраться, то жить станет гораздо легче :)

  Ответить  
 
 автор: baston   (23.04.2010 в 16:24)   письмо автору
 
   для: Valick   (23.04.2010 в 16:07)
 

Да, спасибо. Нашел информацию.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования