Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Делить или не делить таблицы БД

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 12 Март 2011 - 10:14

Делаю простой запрос, а конекта нет. В чем проблема?

Поля для авторизации пользователя хранить в самой таблице пользователя, или создать новую таблицу?

 

 

  • 0


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Март 2011 - 12:21

Banderas,

Прошу прощения, проблема в банальной ошибке - не взял переменную в одинарные кавычки.. упс)

Когда делаем сайт на локалке, советую включить отображение всех ошибок (error_reporting в php.ini).
Если уж никак не можешь отследить ошибку в запросе, выведи напрямую ответ об ошибке:
mysql_query("Запрос...") or die(mysql_errno().": ".mysql_error());

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

Раз уж создал тему, то хочу задать вопрос. Поля для авторизация пользователя хранить в самой таблице пользователя, или создать новую таблицу?

Поля для авторизации login и password я так понимаю... Это неотъемлемая часть таблицы пользователей. Не нужно вводить лишних усложнений, если они не рентабельны. Разбиение таблиц производят обычно когда есть соответствие записей в таблицах 1 <-> много, много <-> 1 или много <-> много.
У тебя же у каждого пользователя свои данные для авторизации, зачем здесь разбиение? Если бы можно было обощить какие-либо данные, то тут можно и разбивать на таблицы.
  • 0

#3 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 12 Март 2011 - 13:21

ZiTosS, спасибо, знал что нужно включить error_reporting(E_ALL), но не знал где.
Нет, я имел ввиду поля подтверждения регистрации. При регистрации пользователь получает случайный код c sha1 шифрованием на имейл. В то же время код заноситься в БД. И переходя по ссылке я получаю логин пользователя и код. Если для данного пользователя, полученный код равен коду с БД - изменяю поле check_auth на 1 - отмечаю что пользователь подтвердил регистрацию.
Тоесть в моей БД пользователя добавилось ещё 2 таблицы, одна из которых больше не будет использоваться. Рационально ли это? Или после подтверждения регистрации просто удалить это поле (поле с sha1 кодом)?
  • 0


#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 12 Март 2011 - 13:45

Banderas, рационально это все свести в одну таблицу, т.к. у тебя одному пользователю соответсвует один хеш для подтверждения и никак иначе.
Простой пример для понимания разбиения на таблицы.
Есть у нас БД Школа, в ней 1 таблица Ученики" с полями:
идентификатор (id)
ФИО
Класс
Характеристика
и т.д.
Так вот, понятное дело, что в данной таблице собраны все ученики школы с разных классов. Естественно часть учеников относится к одному классу, часть учеников относится к другому классу и т.д. Когда мы в поле класса будем хранить, например - "10А". Это текстовое поле. У некоторых учеников оно может повторяться, но получается что ученики одного класса никак не связаны по данному полю. Например, у нас задача, название класса 10Д изменили на 10Ж. Мы при редактировании учеников бывшего 10Д класса случайно забыли отредактировать записи нескольких учеников. При том бы нам пришлось редактировать каждую запись ученика из бывшего класса 10Д.

Теперь представим, что мы вынесли классы в отдельную таблицу "Классы". А из таблицы учеников ссылаемся на таблицу классов по полю id_class.
Захотелось нам теперь изменить название класса 10Д на 10Ж, это делается редактированием только одной записи в таблице "Классы".

Это называется - нормализация базы данных.
Т.е. одна запись из первой таблицы может использоваться много раз во второй таблице.
У нас, класс 10Ж из таблицы "Классы" будет много раз встречаться в записях таблицы "Ученики"
  • 0

#5 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 13 Март 2011 - 19:18

И, в любом случае, у тебя одному пользователю соответствует один ХЭШ. Если ты его больше не используешь, то можешь просто очистить поле. Или добавить еще одно, например `used`. И если оно равно 1 - то более этот хэш не прокатит. Но использовать все лучше в одной строке для одного пользователя.
  • 0

#6 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 18 Март 2011 - 16:53

Спасибо за ответы. Ещё небольшой вопрос. Стоит ли использовать $auth_code как хеш для запоминания пользователя. Тоесть хеш записывается в БД и в Куки. Если куки этого пользователя равны таблице из БД, то пользователя авторизован и ему не надо вводить логин и пароль.

Или лучше как то по другому офомить запоминания пользователя?
  • 0


#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 18 Март 2011 - 18:04

Banderas, нет. Хеш для авторизации пользователя не подойдет. Украли куки у администратора - и имеем полный доступ к ресурсу... Разве это хорошо? Попозже опишу методику запоминания пользователя.
  • 0


Оформление форума – IPBSkins.ru