所以考虑一下: 我有两张桌子,第一张是“机器”,第二张是“出租”。我在名为“inRental”的机器中有一个布尔列,当机器没有租用时它是0,而当机器没有租用时它是1。我在租赁中也有一个名为“已完成”的布尔列,当机器仍在租赁时为0,租赁完成时为1(我不删除租赁条目,因为我想跟踪租赁历史)。所以我想要的是,当“租赁”中插入该机器的新租赁条目时,将列'machines.inRental'增加或设置为1。例如,当我创建新的租赁时,我做了:
INSERT INTO rentals VALUES (0,:machineID,0)
当发生这种情况时,我想:
UPDATE machines SET inRental=1 WHERE MachineID=:machineID
类似我希望租赁完成时:
UPDATE rentals SET finished=1 WHERE MachineID=:machineID
和
UPDATE machines SET inRental=0 WHERE MachineID=:machineID
表格是这样的:
RentalID MachineID finished ...
.....................................
1 5 1
2 6 1
3 7 0
MachineID inRental ...
.........................
5 0
6 0
7 1
我猜这是用触发器实现的,但是怎么样?我也听说触发器坏了,最好避免它们。有没有更好的办法?我知道它可能看起来列inRental是多余的,我可以只做JOINS,但我在子查询中使用很多次表'机器'与其他表,我发现它有点无效和混乱,必须使JOINs子查询,还是不是?