MySQL Set NULLABLE Уникальное поле - PullRequest
2 голосов
/ 19 октября 2010

У меня есть случай, когда мне нужно сохранить имя пользователя Twitter, адрес электронной почты и некоторые другие поля, чтобы они были уникальными.Однако позже я могу установить имя пользователя в твиттере.Не в процессе регистрации.Как я могу справиться с этим в 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 ]

4 голосов
/ 19 октября 2010

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

2 голосов
/ 19 октября 2010

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

`twitter_username` varchar(32) NULL
0 голосов
/ 19 октября 2010

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

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

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