我有一个案例,我需要存储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
设置为空。你能告诉我最好的餐桌结构吗?
答案 0 :(得分:4)
您可以设置虚拟唯一值,但不是最佳值。
您可以在应用逻辑中管理唯一性,而不是最佳。
我认为最好的方法是使用只包含两个字段的另一个表:id
和twitter_username
,twitter_username
上有唯一键,只有拥有推特用户名时才插入。
此外,id
列上应该存在一对一的关系。
答案 1 :(得分:2)
您已将twitter_username设置为“NOT NULL”。尝试
`twitter_username` varchar(32) NULL
答案 2 :(得分:0)
你能不能只为你的twitter参数允许NULL并在应用程序级别强制执行唯一性? (即在php / .net /无论你使用什么)
或者,将Twitter帐户详细信息存储在链接到您的用户ID的单独表格中