I have seen various posts on how to implement the deletion of reliant rows from other tables making use of CASCADE DELETE or other ways of creating or l king up dependencies and producing powerful SQL.
I am perhaps not crazy about the thought of using CASCADE delete if for no other explanation than the overhaead concerns simply because that the CASCADE issues therefore many DELETEs for records that have numerous dependencies that have their very own many dependencies (not to mention the fact that the outcome are hard to track rather than all that well-suited to manufacturing environments).
Therefore, having resigned myself to composing them in one single way or another, i am wondering exactly what the trade-off is always to putting all the necessary deletes into a stored procedure or even a delete trigger.
I love the DELETE trigger option, because the semantics are kept by it of deletion straight forward. That is
Will need care of the many deleting that should be cared for and no solitary designer can make the error of maybe not calling the deletion procedure
Nonetheless, I am concerned about the utilization of causes since I appear to notice a fair amount of ‘expert’ recommendations against their [frequent] use.
From my viewpoint, the actual implementation of the TRIGGER vs the stored procedure seems nearly identical. Therefore, supplied internally we follow a practice that is consistent it appears that the TRIGGER solution should work out simply fine.
Will there be a[or that is best most frequent] practice that should be followed? What should my concerns take the temporary and long term? For the many part, these deletions will be released from a client application – most likely relying on the Entity Framework for information access/manipulation; how should that influence my decision?
Please feel free to post links to exhaustive factors of this topic as my efforts have not yet yielded any.
2 Answers 2
Causes have the clear downside without you being able to postpone their execution that they fire right away. Under hefty usage, the body may be therefore busy performing all those causes, it’ll grind up to a halt.
If you can do something like
- produce a “note” in a table which dependent rows need to be deleted
- schedule a cleanup task that does its work during off-peak hours, e.g. during the night time
Your system that is overall performance be better. This nevertheless calls for you could wait a while involving the time the “parent” row(s) gets deleted, unless you actually delete the reliant youngster rows.
But so you could definitely use a trigger first and see how it behaves and how it affects your system performance as you say – the code written is almost the same. If it gets overweight on your system, “de-couple” those events (a moms and dad row being deleted, and the dependent youngster rows being eliminated) by using such a “asynchronous” model with a kept proc being called at given intervals doing the cleaning.
Ther is nothing incorrect with appropriate causes. The people who’re because they were p rly written or because thier developers were t incomptent to think that something could be happening in a trigger against them often have had bad experiences.
In this case though, Iw oud not do that task in a trigger. The key reason why is the identical reason why that you don’t wish to accomplish it using delete that is cascading. If somebody deltes a thing that features a million kid documents, you have locked things up.
Deletions usually do not take place only from an interface mousemingle reviews, but in this case I prefer the saved proc approach as you may use it to delete documents that have an ordinary level of records and if some one needs to delete an incredible number of records in a adhoc query, they can write code to delete utilizing batch processing as opposed to all at one time.
Also anybody who is attempting to delete manually (for such things as dedupping for example or perhaps a the motion of a client’s information to some other database) can get errors if you will find kid documents which is really a positive thing in my own mind becasue it generates them think about whether the record must certanly be deleted. For instance you might not want to delte thier orders but rather move them to a differnt customer (the record you are retaining) if you were deleting a bunch of duplicate records,. Therefore in the event your process strikes the FK constraint, you know that the dedupping porcess posseses an problem and you will correct it. And somtimes those error that is FKs justa clue you don;t desire to delete. SO perhaps you can delte an individual and their documents inteh adress table but you would not want to delete if you hit an FK inteh order table. It’s t simple to make automatic deletes like cascade delete and triggers where you forget that sometimess teh FK error is suggesting that you need to’t delete.