2010-01-24 79 views
3

说我有一张票,这张票有一个所有者和一个接受者。所有者标识在创建标签时设置,并且接受者标识设置为默认为NULL。在这种情况下,接受者可能也不是所有者。我知道在编程逻辑中这是微不足道的,但我想知道它是否可以在数据库中完成。是否可以创建2个可能不具有相同值的字段?

将两个字段设置为唯一:UNIQUE(owner_id, taker_id);不会工作,因为所有者可以同时拥有许多未取得的故障单。也许是一张三重唯一的钥匙和票证ID,但是我觉得在我的设计中可能会有一些缺陷。

另外一个好处是,看看这会在Django

回答

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是在引发重复键错误维基描述一个辅助程序..

0

像MySQL不支持CHECK约束,我建议你,如果你想上分贝值

相关问题