2014-02-27 193 views
0

我有两个列的情况,但这两个值的值应该是唯一的。所以,你可以考虑下表跨列唯一值

CREATE TABLE user_details(
    id int(11) AUTO_INCREMENT PRIMARY KEY, 
    email varchar(200), 
    secondary_email varchar(200), 
    unique key(email), 
    unique key(secondary_email) 
); 

我要的是,电子邮件无法跨emailsecondary_email列重复的功能。所以给定的电子邮件只能与一个用户连接。我们可以在没有触发器的MySQL中实现它吗?目前,我通过应用程序逻辑来管理它,而且有时很难处理,因为来自不同团队的模块中的不同人员在表中插入/更新数据。

此外,我的用户表是按数百万记录的顺序,也有二次移动的选项。创建第二个(或第三个)2倍大小的表格并加入两个(或三个)表格会加重我的情况。

在此先感谢您的所有投入..

+0

为电子邮件创建一个表,然后在(id,email_id)上做一个唯一键 –

回答

1

如果您的规范化设计,可以有引用您的用户资料的电子邮件表:

user_details_email 
------------------ 
user_details_id (FK) 
email_address 

凭借在user_details_id, email_address主键。您可以选择添加一个布尔列来将其标记为主要列。

+0

我已经添加了同样的问题本身。我的桌子太大了,我不能总是加入2/3桌子来获得用户的基本信息。 – georgecj11

+0

@cjg然后你需要一个触发器。如果你不想使用它,那么正确设计你的数据库。 – Kermit

+0

雅我同意,但触发器可以再次放慢东西:(我每天有1M左右的插入在这张桌子上。 – georgecj11