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 в отдельной таблице, связанной с вашим идентификатором пользователя.