Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Как правильно спроектировать таблицу

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Vaio
Отправлено: 11 Июня, 2013 - 00:34:52
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




Мне нужно создать таблицу со следующими полями

user_id, email, password, firstname, lastname, status, created.

Выборка будет в основном проводиться по id (он будет уникальным AUTO_INCREMENT), также как я понимаю нужно его сделать PRIMARY KEY.
Также будет выборка по email и password, поэтому возможно будет смысл их сделать индексами? И если использовать индексы нужно какой-то специальный запрос писать?

Вот, что получилось

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE users (
  2. user_id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. email varchar(100) DEFAULT '' NOT NULL,
  4. password varchar(40) DEFAULT '' NOT NULL,
  5. firstname varchar(32) DEFAULT '' NOT NULL,
  6. lastname varchar(32) DEFAULT '' NOT NULL,
  7. STATUS varchar(10) DEFAULT '' NOT NULL,
  8. created Datetime NOT NULL,
  9. PRIMARY KEY (user_id),
  10. KEY email (email),
  11. KEY password (password)
  12. ) ENGINE=`InnoDB` CHARACTER SET `utf8` COLLATE `utf8_bin`;
  13.  


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

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE user_session_id (
  2. id mediumint(8) UNSIGNED NOT NULL AUTO_INCREMENT,
  3. user_id mediumint(8) UNSIGNED NOT NULL,
  4. session_id varchar(100) DEFAULT '' NOT NULL,
  5. PRIMARY KEY (?),
  6. ) ENGINE=`InnoDB` CHARACTER SET `utf8` COLLATE `utf8_bin`;
  7.  

Здесь выборка будет по user_id, что назначить как PRIMARY KEY id или user_id?

Подскажите, пожалуйста.

(Отредактировано автором: 11 Июня, 2013 - 00:38:53)

 
 Top
imya
Отправлено: 11 Июня, 2013 - 08:35:47
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




id, user_id будет внешним ключом, если вы конечно будете связывать эти 2 таблицы.


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Vaio
Отправлено: 11 Июня, 2013 - 09:16:54
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




А как связывать таблицы и можно сделать, чтобы при добавлении записи в таблицу users сразу создавалась запись в таблице user_session_id?
 
 Top
imya
Отправлено: 11 Июня, 2013 - 09:37:03
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM users AS u JOIN user_session_id AS ses WHERE u.user_session_id = ses.user_id


При добавлении записи в одну таблицу добавляйте и во вторую, проблема в чём? Логика простая вроде...


-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
Vaio
Отправлено: 11 Июня, 2013 - 12:23:34
Post Id


Гость


Покинул форум
Сообщений всего: 116
Дата рег-ции: Дек. 2012  


Помог: 0 раз(а)




imya пишет:
При добавлении записи в одну таблицу добавляйте и во вторую, проблема в чём?

Думал может можно упроститы этот процесс, чтобы mysql сам создавал в связанных таблицах соответствующие поля.

Я все равно никак не могу понять, когда нужно использовать PRIMARY KEY, когда KEY, когда UNIQUE, когда INDEX и в чем вообще разница между ними?

Правильно ли я сделал создав новую таблицу user_session_id для session_id или лучше оставить его в users?

(Отредактировано автором: 11 Июня, 2013 - 12:25:14)

 
 Top
AlexAnder
Отправлено: 11 Июня, 2013 - 12:51:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 915
Дата рег-ции: Авг. 2012  
Откуда: Россия


Помог: 34 раз(а)




Vaio пишет:
можно сделать, чтобы при добавлении записи в таблицу users сразу создавалась запись в таблице user_session_id?

вроде через триггеры можно Растерялся

(Отредактировано автором: 11 Июня, 2013 - 12:53:02)



-----
Оказывается, недостаточно читать справочники, чтобы правильно писать коды. sadex ©

Форумы стали местом обучения программированию, а не решения трудных вопросов. KingStar ©
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB