我希望再多一个SQL明智的人可以帮助我。假设下面的表和关系被压缩了。
orders(PK_refno,customer, status)
order_accessories(PK_refno,PK_acc)
accessories(PK_acc,name,desc)
正如您所看到的,这是一个典型的1:*----*:*----*:1
方案,问题或我关注的是更新时,因为每个订单所具有的附件都可以修改,这意味着用户可以添加/删除附件。
我认为使用MySQL的唯一方法是删除所有附件,然后插入更新的附件。
我不喜欢这种方式。我认为可能有一种SQL方法可以做到这一点。也许有人可以建议和高级查询(我当然会研究)
我想到的另一种方式是:
我不喜欢这个,因为它可以在应用程序中完成,而不是在数据库中完成。
答案 0 :(得分:0)
我只想补充一点,我首先删除了与要更新的订单匹配的所有记录,然后重新插入新的记录。
答案 1 :(得分:0)
我们假设桌子就是这样开始的。
order_accessories
PK_refno PK_acc
1 73
1 74
1 75
1 86
1 92
我们还要说75应该是76.假设一个理智的用户界面,用户可以将75更改为76.一个理智的用户界面会将此语句发送到dbms。
update order_accessories
set PK_acc = 76
where (PK_refno = 1 and PK_acc = 75);
如果75首先不应该在那里,那么用户只会删除那一行。一个理智的用户界面会将此语句发送到dbms。
delete from order_accessories
where (PK_refno = 1 and PK_acc = 75);