代码之家  ›  专栏  ›  技术社区  ›  jtm

是否可以创建两个值可能不同的字段?

  •  3
  • jtm  · 技术社区  · 15 年前

    假设我有一张票,这张票有一个主人和一个接受者。当创建票据时,所有者ID被设置为,而接受者ID被设置为默认值为空。在这种情况下,接受者可能不是所有者。我知道在编程逻辑中这样做很简单,但是我想知道是否可以在数据库中完成。

    将两个字段设置为唯一: UNIQUE(owner_id, taker_id); 不会工作,因为业主可以有许多非采取的门票在同一时间。可能是一个三重的唯一键和票ID,但是我觉得我的设计可能有点欠缺。

    另外一个额外的奖励是看看如何在Django完成这项工作。

    3 回复  |  直到 15 年前
        1
  •  3
  •   dannyroa    15 年前

    在Django中,您可以在您的模型中使用“独特的”。

    http://docs.djangoproject.com/en/dev/ref/models/options/#unique-together

    唯一的一起=((“所有者”,“接受者”),)

        2
  •  2
  •   jspcal    15 年前

    这可以通过MySQL中的约束或触发器来实现。

    http://forge.mysql.com/wiki/Triggers#Emulating_Check_Constraints

    您将希望确保始终强制执行条件所有者ID<gt;使用者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中描述的引发重复键错误的帮助程序。

        3
  •  0
  •   TomaszSobczak    15 年前

    由于mysql不支持check约束,我建议您在db级别使用触发器