2010-10-19 92 views
2

我有一個情況,我需要存儲嘰嘰喳喳用戶名,電子郵件和其他字段是唯一的。但是,我只能稍後設置twitter用戶名。不在註冊過程中。我如何在SQL中處理這個問題?MySQL設置NULLABLE唯一字段

這裏是我當前的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

那麼,你有沒有遇到過任何問題? 'UNIQUE'可以存儲'NULLs' – zerkms 2010-10-19 04:10:56

回答

4

您可以設置一個虛擬唯一值,但不是最好的。 您可以在應用邏輯中管理唯一性,而不是最好的。 我認爲最好的辦法是使用另一個只有兩個字段的表格:idtwitter_username,並在twitter_username上使用唯一密鑰,並且只有在擁有twitter用戶名時才能插入。 此外,在id列上應該有一對一的關係。

0

難道你不只是允許NULL爲您的Twitter參數,並在應用程序級別強制唯一性? (即在PHP/.NET /無論你使用)

另外,存儲在鏈接到你的用戶ID的單獨的表

2

你已經設置TWITTER_USERNAME Twitter帳戶的細節是「NOT NULL」 。嘗試

`twitter_username` varchar(32) NULL