我有一个商店数据库。到目前为止,您只能在注册用户时购买东西,因此我对客户电子邮件地址有唯一索引,因为每个客户只能在数据库中注册一次。
现在我想提供一个没有自己注册的订单("作为客人订购")。我的想法是在用户数据库中添加一个字段"来宾BOOL NOT NULL DEFAULT false"指示用户是否创建为访客。但是,由于允许订单作为访客,因此可以在用户表中多次使用相同的电子邮件地址(因为一个用户可以作为访客订购多个时间)。
所以现在我需要类似的东西:字段"电子邮件地址"应该是独一无二的,但只有当字段"客人"是假的。
是否可以使用mysql功能执行此操作,或者是否必须从电子邮件中删除唯一索引并确保在我的代码中每封电子邮件都应该是唯一的,但前提是它不是来宾?< / p>
答案 0 :(得分:1)
你不能在MySQL中轻松做到这一点。其他数据库提供过滤索引和计算列,这两者都使这成为可能。
一种选择是让guestid是唯一的,但对于非来宾,只有一个值(比如-1,但不是NULL
)。然后,您可以在(emailaddress, guestid)
上创建唯一索引。
您甚至可以使用触发器维护此类列。当然,如果你使用触发器,你也可以用这种方式强制执行约束。