说我有票,这张票有一个所有者和一个接受者。创建故障单并将接受者ID设置为默认值为NULL时,将设置所有者ID。在这种情况下,接受者可能也不是所有者。我知道这在编程逻辑中是微不足道的,但我想知道它是否可以在数据库中完成。
将两个字段设置为唯一:UNIQUE(owner_id, taker_id);
不会工作,因为所有者可以同时拥有许多非拍摄的故障单。也许是三个唯一的钥匙以及机票ID,但我觉得我的设计可能缺少一些东西。
额外的好处是看看如何在Django中完成这项工作
答案 0 :(得分:3)
在Django中,您可以在模型中使用“unique_together”。
http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together
unique_together =((“所有者”,“接受者”),)
答案 1 :(得分:2)
这可以通过mysql中的约束或触发器来完成。
http://forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints
您需要确保条件owner_id<>始终强制执行taker_id。
这可能在应用程序方面做得更好,因为您可能希望在启动分配故障单的任务(警报,状态等等)之前立即发送相应的消息...
在mysql中,可以这样做:
DELIMITER $$
create trigger self_assign_check before insert on helpdesk.ticket for each row
begin
if new.taker_id = new.owner_id then
call fail(’Owner cannot take his own ticket’);
end if;
end $$
DELIMITER ;
请注意,它会对插入产生影响(在许多情况下可忽略不计)。 fail
是wiki中描述的一个帮助程序,它引发了一个重复的键错误。
答案 2 :(得分:0)
因为mysql不支持CHECK约束我建议你在数据库级别上使用触发器