2

我有一个案例,我需要存储 twitter 用户名、电子邮件和其他一些唯一的字段。但是,我只能稍后设置 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为空。你能建议我最好的表结构吗?

4

3 回答 3

4

您可以设置一个虚拟的唯一值,但不是最好的。您可以管理应用程序逻辑中的唯一性,而不是最好的。我认为最好的方法是使用另一个只有两个字段的表:id并且只有当您拥有 twitter 用户名时才twitter_username使用唯一键并插入。此外,两列twitter_username上应该存在一对一的关系。id

于 2010-10-19T04:12:52.513 回答
2

您已将 twitter_username 设置为“NOT NULL”。尝试

`twitter_username` varchar(32) NULL
于 2010-10-19T04:10:39.647 回答
0

你能不能只允许你的 twitter 参数为 NULL 并在应用程序级别强制执行唯一性?(即在 php/.net/无论你使用什么)

或者,将 twitter 帐户详细信息存储在链接到您的用户 ID 的单独表中

于 2010-10-19T04:07:48.453 回答