2010-01-24 83 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約束,我建議你,如果你想上分貝值

相關問題