| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > СУБД, общие вопросы > какие таблицы создать |
| Автор: JVM 1.2.2007, 17:35 |
| С БД знаком очень поверхностно, поэтому такой вопрос. Посоветуйте, какие таблицы создать в БД(использую MS SQL 2005), если есть следующее: full-name - фамилия и имя пользователя в системе e-mail - электронный адрес пользователя, может быть несколько type-rights - тип прав пользователя, под которыми он заходит в систему host-name - имя компьютера пользователя ip-host - IP-адрес компьютера пользователя password - пароль пользователя |
| Автор: Rodman 1.2.2007, 17:48 |
| ------------- TableUser ******** ID (INCREMENT) FIO (VARCHAR) - можно на три поля разделить EMail (VARCHAR) CodeTypeRight (INT) HostName (VARCHAR) IpHost (VARCHAR) Password (VARCHAR) ------------ ------------- TableTypeRight ******** ID (INCREMENT) Typ0eName (VARCHAR) ------------- |
| Автор: JVM 1.2.2007, 18:01 |
| а если у поьзователя несколько e-mail, то они записываются в TableUser под разными ID? |
| Автор: JVM 2.2.2007, 09:08 |
| Возникли еще вопросы. Как хранить IP-адрес? Могут ли мне понадобиться отдельные части IP? Использую Java. Стоит ли смотреть в сторону hibernate? |
| Автор: Rodman 2.2.2007, 09:31 |
| JVM, если у юзера могут быть несколько почтовых ящиков - то ------------- TableUser ******** ID (INCREMENT) FIO (VARCHAR) - можно на три поля разделить CodeEMail (VARCHAR) CodeTypeRight (INT) HostName (VARCHAR) IpHost (VARCHAR) Password (VARCHAR) ------------ ------------- TableTypeRight ******** ID (INCREMENT) TypeName (VARCHAR) ------------- ------------- TableEmail ******** ID (INCREMENT) IDUser (INT) EmailName (VARCHAR) ------------- а про IP - лучше хранить его целиком... |
| Автор: JVM 2.2.2007, 10:14 |
| Rodman, но если так делать, то в TableUser получается избыточность. Зачем в TableEmail создавать поле ID? Ведь сам по себе EmailName уже уникален. |
| Автор: Rodman 2.2.2007, 10:28 |
Я всегда при создании новой таблицы создаю ей ID - потому что при возможном (дальнейшем) расширении базы, может понадобится использования ID этой таблицы... (согласен, если тебе не надо, мож не добавлять это поле)... Решай сам... мож мой метод глупый, но ИМХО я так делаю, т.к. мои базы состоят как минимум из 20 таблиц... |
| Автор: LSD 2.2.2007, 11:49 | ||
Это мы должны знать?
Поищи по форуму, тема "естественные ключи vs синтетические" уже обсуждалась. |
| Автор: SergeBS 2.2.2007, 14:21 | ||
Rodman,
Не можно, а НУЖНО. JVM, На DelphiKingdom - статья Т.Тенцера "Естественные ключи против искусственных". Читай. Я давно сделал практический вывод для себя: в любой таблице - столбик типа autoinc иметь в обязательном порядке, даже если в ней никогда не будет больше 10 записей. Поскольку обычно "никогда" не бывает. Год-два - и вдруг нате. |
| Автор: Rodman 2.2.2007, 14:26 |
| SergeBS, не я же базу делаю, я просто советую... Я с тобой полностью согласен - писал выше |
| Автор: JVM 2.2.2007, 15:46 |
| Спасибо. Перевариваю. Вот статья http://vingrad.ru/DELPHI-DLP-002700 |
| Автор: skyboy 2.2.2007, 16:31 | ||
дело здесь, в первую очередь, не столько в "естественности", сколько в длине: при работе с самим адресом имеешь ключ переменной длины(что само по себе сильно влияет на скорость работы) и длиной - не менее 6 байт(ну, вроде "a@m.ru"), в то время, как unsigned long int, если память мне не изменяет, фиксировано 8 байт. И не больше. |
| Автор: JVM 7.2.2007, 18:10 |
| Rodman, елси у пользователя будет несколько email, то зачем TableUser создавать столбец CodeEMail (VARCHAR)? TableUser ******** ... CodeEMail (VARCHAR) ... |
| Автор: Rodman 13.2.2007, 16:18 |
| создай отдельную таблицу для Email |