MySQL Set NULLABLE Уникальное поле

У меня есть случай, когда мне нужно сохранить имя пользователя в Твиттере, адрес электронной почты и некоторые другие поля, чтобы быть уникальным. Однако позже я могу установить имя пользователя в твиттере. Не в процессе регистрации. Как я могу справиться с этим в SQL?

Вот моя текущая структура SQL:

CREATE TABLE `kios_users` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(32) NOT NULL,
 `password` varchar(60) NOT NULL,
 `email` varchar(100) NOT NULL,
 `no_hp` varchar(15) NOT NULL,
 `twitter_oauth_token` varchar(60) NOT NULL,
 `twitter_oauth_token_secret` varchar(60) NOT NULL,
 `twitter_username` varchar(32) NULL,
 `verify_level` enum('just_reg','hp_ok','all_ok') NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `email` (`email`),
 UNIQUE KEY `no_hp` (`no_hp`),
 UNIQUE KEY `username` (`username`),
 UNIQUE KEY `twitter_username` (`twitter_username`)
) ENGINE=MyISAM

С такой структурой я не могу установить twitter_username опустошить. Можете ли вы предложить мне лучшую структуру стола?

3 ответа

Решение

Вы можете установить фиктивное уникальное значение, но это не самое лучшее. Вы можете управлять уникальностью в логике приложения, а не в лучшем случае. Я думаю, что лучше всего использовать другую таблицу только с двумя полями: id а также twitter_username с уникальным ключом на twitter_username и вставлять только тогда, когда у вас есть имя пользователя Twitter. Кроме того, должны быть отношения один к одному на обоих id колонны.

Вы установили для twitter_username значение "NOT NULL". Пытаться

`twitter_username` varchar(32) NULL

Не могли бы вы просто разрешить NULL для своих параметров в твиттере и обеспечить уникальность на уровне приложения? (т.е. в php/.net/ что бы вы ни использовали)

Кроме того, сохраните данные учетной записи Twitter в отдельной таблице, связанной с вашим идентификатором пользователя.

Другие вопросы по тегам