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
Форумы портала PHP.SU :: Версия для печати :: Как правильно спроектировать таблицу
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Как правильно спроектировать таблицу

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

1. Vaio - 11 Июня, 2013 - 00:34:52 - перейти к сообщению
Мне нужно создать таблицу со следующими полями

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?

Подскажите, пожалуйста.
2. imya - 11 Июня, 2013 - 08:35:47 - перейти к сообщению
id, user_id будет внешним ключом, если вы конечно будете связывать эти 2 таблицы.
3. Vaio - 11 Июня, 2013 - 09:16:54 - перейти к сообщению
А как связывать таблицы и можно сделать, чтобы при добавлении записи в таблицу users сразу создавалась запись в таблице user_session_id?
4. imya - 11 Июня, 2013 - 09:37:03 - перейти к сообщению
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM users AS u JOIN user_session_id AS ses WHERE u.user_session_id = ses.user_id


При добавлении записи в одну таблицу добавляйте и во вторую, проблема в чём? Логика простая вроде...
5. Vaio - 11 Июня, 2013 - 12:23:34 - перейти к сообщению
imya пишет:
При добавлении записи в одну таблицу добавляйте и во вторую, проблема в чём?

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

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

Правильно ли я сделал создав новую таблицу user_session_id для session_id или лучше оставить его в users?
6. AlexAnder - 11 Июня, 2013 - 12:51:37 - перейти к сообщению
Vaio пишет:
можно сделать, чтобы при добавлении записи в таблицу users сразу создавалась запись в таблице user_session_id?

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

 

Powered by ExBB FM 1.0 RC1