Что лучше для базы данных пользователей? - PullRequest
0 голосов
/ 23 июля 2011

Привет и спасибо за чтение моего поста У меня возникли небольшие проблемы при изучении базы данных в MySQL. Теперь я настроил это уже, но недавно, но другой человек сказал мне, что моя таблица участников медленная и бесполезная, если я собираюсь иметь много участников!

Я просматривал это много раз и делал поиск в Google, но не вижу в этом ничего плохого, может быть, потому что я новичок в этом? может кто-нибудь из вас, sql эксперты, посмотрит и скажет, что с ним не так, пожалуйста:)

--
-- Table structure for table `members`
--

CREATE TABLE IF NOT EXISTS `members` (
  `userid` int(9) unsigned NOT NULL AUTO_INCREMENT,
  `username` varchar(20) NOT NULL DEFAULT '',
  `password` longtext,
  `email` varchar(80) NOT NULL DEFAULT '',
  `gender` int(1) NOT NULL DEFAULT '0',
  `ipaddress` varchar(80) NOT NULL DEFAULT '',
  `joinedon` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `acctype` int(1) NOT NULL DEFAULT '0',
  `acclevel` int(1) NOT NULL DEFAULT '0',
  `birthdate` date DEFAULT NULL,
  `warnings` int(1) NOT NULL DEFAULT '0',
  `banned` int(1) NOT NULL DEFAULT '0',
  `enabled` int(1) NOT NULL DEFAULT '0',
  `online` int(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`userid`),
  UNIQUE KEY `username` (`username`),
  UNIQUE KEY `emailadd` (`emailadd`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=19 ;

--
-- Dumping data for table `members`
--

Это будет сайт для часто задаваемых вопросов / советов по играм, я ожидаю, что в один прекрасный момент я получу большое количество участников, но я подумал, что хочу попросить убедиться, что все в порядке, еще раз, мир.

Ответы [ 3 ]

3 голосов
/ 23 июля 2011

Разве другой человек объяснил, почему он думает, что это медленно и бесполезно?

Вот несколько вещей, которые, я думаю, можно улучшить:

email должно быть длиннее - от моей головы, 320 должно быть достаточно длинным для большинства адресов электронной почты, но вы можете посмотреть это.

Если поля int(1) являются простыми полями включения / выключения, то вместо них могут быть tinyint(1) или bool.

Как указывает @cularis, поле ipaddress может не подходящего типа. INT UNSIGNED лучше, чем varchar для IPv4. Вы можете использовать INET_ATON() и INET_NTOA() для конвертации. См:

Лучший тип поля для IP-адреса?
Как сохранить IPv6-совместимый адрес в реляционной базе данных

Как указывает @Delan Azabani, ваше поле password слишком длинное для значения, которое вы храните. MD5 создает строку из 32 символов, поэтому достаточно varchar(32). Вы можете переключиться на более безопасный SHA2 и использовать функцию MySQL 'SHA2 ()' .

Узнайте, как использовать ядро ​​базы данных InnoDB вместо MyISAM. Помимо прочего, он предлагает ограничения внешнего ключа, блокировку на уровне строк и транзакции. См. Стоит ли переходить с MyISAM на Innodb? .

1 голос
/ 23 июля 2011

Помимо того, что сказал @Delan, я заметил, что;

  1. JoinedOn столбец, определенный как ON UPDATE CURRENT_TIMESTAMP. Если вам нужно сохранить только дату присоединения, вам не следует обновлять поле при обновлении записей.
  2. IPAddress столбец VARCHAR(80). Если вы храните IP-адреса типа IPv4, это будет слишком долго.
  3. Пустая строка ('') как DEFAULT для NOT NULL столбцов. Не хорошо, если намерение иметь значение (отличное от '') в поле.
  4. Пустая строка ('') как DEFAULT для UNIQUE полей. Это противоречит обязательным ограничениям, если вы хотите иметь уникальное значение (кроме '').
1 голос
/ 23 июля 2011

Я не думаю, что это обязательно медленно, но я заметил, что среди всех других текстовых полей, где вы использовали varchar, вы использовали longtext для поля пароля.Похоже, вы собираетесь хранить пароль в базе данных - не делайте этого!

Всегда используйте криптографический хэш фиксированной длины (например, SHA-1)или SHA-2) пароля пользователя и поместите его в базу данных.Таким образом, если ваш сервер базы данных будет взломан, пароли пользователей не будут открыты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...