<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Don&#8217;t Delete &#8211; Just Don&#8217;t</title>
	<atom:link href="http://www.udidahan.com/2009/09/01/dont-delete-just-dont/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/</link>
	<description>Enterprise Development Expert &#38; SOA Specialist</description>
	<lastBuildDate>Fri, 23 Jul 2010 18:21:18 -0500</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-37031</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 13 Feb 2010 16:39:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-37031</guid>
		<description>SJB,

At that point, we create rollups of the data which can be stored for longer periods of time.</description>
		<content:encoded><![CDATA[<p>SJB,</p>
<p>At that point, we create rollups of the data which can be stored for longer periods of time.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: SJB</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-37029</link>
		<dc:creator>SJB</dc:creator>
		<pubDate>Fri, 12 Feb 2010 19:49:50 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-37029</guid>
		<description>How does this tie in with Data Protection laws, where data can only be held for x-amount of time?</description>
		<content:encoded><![CDATA[<p>How does this tie in with Data Protection laws, where data can only be held for x-amount of time?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: GBruenetti</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-37024</link>
		<dc:creator>GBruenetti</dc:creator>
		<pubDate>Tue, 09 Feb 2010 11:55:10 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-37024</guid>
		<description>Of course there is the need to delete things physically. Temporary data, old data, erroneous data.

Before the computers took over we had paper baskets and shredders in our businesses. Since the basic business requirements are mainly unchanged we also need the digital equivalent of them today. I don&#039;t want to filter my valuable information out of a trash mountain.

This observation does not mute your main point: Make sure you understand what your user wants/needs and *then* implement the correct logic for this. However, sometimes that can be a plain DELETE.</description>
		<content:encoded><![CDATA[<p>Of course there is the need to delete things physically. Temporary data, old data, erroneous data.</p>
<p>Before the computers took over we had paper baskets and shredders in our businesses. Since the basic business requirements are mainly unchanged we also need the digital equivalent of them today. I don&#8217;t want to filter my valuable information out of a trash mountain.</p>
<p>This observation does not mute your main point: Make sure you understand what your user wants/needs and *then* implement the correct logic for this. However, sometimes that can be a plain DELETE.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Service-Oriented, Event-Driven Part 1: Events &#171; christopherDeweese.com</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-36916</link>
		<dc:creator>Service-Oriented, Event-Driven Part 1: Events &#171; christopherDeweese.com</dc:creator>
		<pubDate>Thu, 24 Dec 2009 13:36:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36916</guid>
		<description>[...] Dahan posted an article titled “Don’t Delete – Just Don’t” a few weeks back.&#160; In that article Udi explores soft deletes versus hard deletes, but he [...]</description>
		<content:encoded><![CDATA[<p>[...] Dahan posted an article titled “Don’t Delete – Just Don’t” a few weeks back.&#160; In that article Udi explores soft deletes versus hard deletes, but he [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Leo</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-36889</link>
		<dc:creator>Leo</dc:creator>
		<pubDate>Fri, 11 Dec 2009 19:35:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36889</guid>
		<description>Thanks pal!!! I was wondering if someone was concern about the domain model.. I&#039;m trying to apply some DDD and it makes sense to me that deletes have a reason behind it.. I will say no to deletes from now on!!!

Saved my day!!!!

Thanks,
Leo!</description>
		<content:encoded><![CDATA[<p>Thanks pal!!! I was wondering if someone was concern about the domain model.. I&#8217;m trying to apply some DDD and it makes sense to me that deletes have a reason behind it.. I will say no to deletes from now on!!!</p>
<p>Saved my day!!!!</p>
<p>Thanks,<br />
Leo!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dare Obasanjo aka Carnage4Life - Building Scalable Databases: Perspectives on the War on Soft Deletes</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-2/#comment-36846</link>
		<dc:creator>Dare Obasanjo aka Carnage4Life - Building Scalable Databases: Perspectives on the War on Soft Deletes</dc:creator>
		<pubDate>Mon, 23 Nov 2009 13:32:52 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36846</guid>
		<description>[...] above that there are situations where one wants to hard delete data from the database in his post Don’t Delete – Just Don’t where he [...]</description>
		<content:encoded><![CDATA[<p>[...] above that there are situations where one wants to hard delete data from the database in his post Don’t Delete – Just Don’t where he [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: To Delete or Not To Delete &#8211; Read Bits</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36734</link>
		<dc:creator>To Delete or Not To Delete &#8211; Read Bits</dc:creator>
		<pubDate>Mon, 21 Sep 2009 12:41:54 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36734</guid>
		<description>[...] not the same as deleting. &quot;Delete&quot; is just the simplest term to use. Software developer Udi Dahan elaborates:  &quot;We’ve been exposing users to entity-based interfaces with “create, read, update, [...]</description>
		<content:encoded><![CDATA[<p>[...] not the same as deleting. &quot;Delete&quot; is just the simplest term to use. Software developer Udi Dahan elaborates:  &quot;We’ve been exposing users to entity-based interfaces with “create, read, update, [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36724</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 17 Sep 2009 17:41:28 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36724</guid>
		<description>David,

I absolutely agree that trying to solve this problem at the database level is very complex - especially when that database is used by many different applications.

The recommendation of not deleting is for a database that belongs in its entirety to a single application - what Martin Fowler calls an &quot;application database&quot;, as opposed to an &quot;integration database&quot;. In this kind of case, it is less likely to see that same kind of explosion that you&#039;ve experienced.

Hope that makes sense.</description>
		<content:encoded><![CDATA[<p>David,</p>
<p>I absolutely agree that trying to solve this problem at the database level is very complex &#8211; especially when that database is used by many different applications.</p>
<p>The recommendation of not deleting is for a database that belongs in its entirety to a single application &#8211; what Martin Fowler calls an &#8220;application database&#8221;, as opposed to an &#8220;integration database&#8221;. In this kind of case, it is less likely to see that same kind of explosion that you&#8217;ve experienced.</p>
<p>Hope that makes sense.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: David Nelson</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36716</link>
		<dc:creator>David Nelson</dc:creator>
		<pubDate>Wed, 16 Sep 2009 17:53:22 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36716</guid>
		<description>&quot;It is not just a &#039;tiny&#039; bit more complex.&quot;

I have to agree with this, as I see this problem occur frequently. In particular, I have seen it in relation to a data source that is central to most of the LOB applications my company writes (the security master for a trading firm). Because the data is so central, we cannot have one person or a group of people in charge of all access to that data; they would simply be overwhelmed. So everyone must have access to that data. But not everyone has the time to become an expert in the security master. And because the designer of the security master subscribes to the &quot;never delete&quot; policy, the number and combinations of statuses has exploded, and is continually increasing. It is very difficult to accurately write a query that will actually return the data that you think you are asking for.

Even something as simple as finding the ticker for a stock is non-trivial, because all of the previous tickers for the stock are still in the table (with various statuses depending on the reason for the change), AND the current ticker might have a status that indicates that it has been scheduled to be changed (but has not been changed yet). While there are some corner cases where seeing the entire ticker history for a stock might be useful, the vast majority of our operational systems don&#039;t care; they just want to know what the ticker is right now. But these systems must deal with the increased complexity for the sake of maintaining a history that is rarely if ever useful.</description>
		<content:encoded><![CDATA[<p>&#8220;It is not just a &#8216;tiny&#8217; bit more complex.&#8221;</p>
<p>I have to agree with this, as I see this problem occur frequently. In particular, I have seen it in relation to a data source that is central to most of the LOB applications my company writes (the security master for a trading firm). Because the data is so central, we cannot have one person or a group of people in charge of all access to that data; they would simply be overwhelmed. So everyone must have access to that data. But not everyone has the time to become an expert in the security master. And because the designer of the security master subscribes to the &#8220;never delete&#8221; policy, the number and combinations of statuses has exploded, and is continually increasing. It is very difficult to accurately write a query that will actually return the data that you think you are asking for.</p>
<p>Even something as simple as finding the ticker for a stock is non-trivial, because all of the previous tickers for the stock are still in the table (with various statuses depending on the reason for the change), AND the current ticker might have a status that indicates that it has been scheduled to be changed (but has not been changed yet). While there are some corner cases where seeing the entire ticker history for a stock might be useful, the vast majority of our operational systems don&#8217;t care; they just want to know what the ticker is right now. But these systems must deal with the increased complexity for the sake of maintaining a history that is rarely if ever useful.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36711</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Mon, 14 Sep 2009 17:10:12 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36711</guid>
		<description>Thomas(44 and 36 - I think),

That sums it up very well.</description>
		<content:encoded><![CDATA[<p>Thomas(44 and 36 &#8211; I think),</p>
<p>That sums it up very well.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Le &#8220;D&#8221; de CRUD est-il utile?</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36709</link>
		<dc:creator>Le &#8220;D&#8221; de CRUD est-il utile?</dc:creator>
		<pubDate>Mon, 14 Sep 2009 09:45:58 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36709</guid>
		<description>[...] suis d&#8217;accord avec Udi Dahan (Don&#8217;t Delete - Just Don&#8217;t) et Ayende sur le fait de ne pas détruire d&#8217;entitée. Dans les Enterprise Application, les [...]</description>
		<content:encoded><![CDATA[<p>[...] suis d&#8217;accord avec Udi Dahan (Don&#8217;t Delete &#8211; Just Don&#8217;t) et Ayende sur le fait de ne pas détruire d&#8217;entitée. Dans les Enterprise Application, les [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas (36)</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36708</link>
		<dc:creator>Thomas (36)</dc:creator>
		<pubDate>Sun, 13 Sep 2009 17:41:18 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36708</guid>
		<description>As I think about the natural key, surrogate key choice, I suppose it&#039;s no different than handling the unique constraint.</description>
		<content:encoded><![CDATA[<p>As I think about the natural key, surrogate key choice, I suppose it&#8217;s no different than handling the unique constraint.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas (36)</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36707</link>
		<dc:creator>Thomas (36)</dc:creator>
		<pubDate>Sun, 13 Sep 2009 17:31:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36707</guid>
		<description>#42
There is no question that the onus is on the developer to vet the real requirement about deletions from the stakeholders and IMO, it must be a deliberate decision to allow soft deletes as it is much costlier to implement. It can definitely create a RI/schema issue depending on how it is implemented. If you go the &quot;state&quot; column route, it can create a series of issues:

First, you are compelled to use surrogate keys as natural keys are out of the question because of the need to add a &quot;state&quot; column. Second, the only way to protect against referencing an inactive value at the database level is to use triggers. Third, we lose our database level referential integrity that tells us that an about to be deleted value has been referenced. If we simply change the state, it does nothing to compel us to correct the child references to use an active parent value or to change the state of those child records. Lastly, you have to code against phantom values: 

For example, suppose we have a status table with a name column and a series of attributes. We cannot put our unique constraint on name alone; it must be on the state and the name. For each addition, we must check whether we have ever had the given name and if so, &quot;reactivate&quot; it. If we simply reactivate, the new status will contain the attributes of the previously deleted instance unless we guard against that. 

It is more error prone because it is more work to implement correctly especially in reporting as all the report designers have to know to account for the state column. 

If we go the route of a mirror table contained deleted values, that has its own set of issues. None of these problems are insurmountable, but they do add work, which means cost which means a cost/benefit problem for the stakeholder. 

IMO, soft deletes must be a conscious, well thought out decision as it adds cost to the project which can be substantial depending where the soft deletes are needed. It is not just a &quot;tiny&quot; bit more complex. Every query has to account for the state and typically those errors happen in reporting.</description>
		<content:encoded><![CDATA[<p>#42<br />
There is no question that the onus is on the developer to vet the real requirement about deletions from the stakeholders and IMO, it must be a deliberate decision to allow soft deletes as it is much costlier to implement. It can definitely create a RI/schema issue depending on how it is implemented. If you go the &#8220;state&#8221; column route, it can create a series of issues:</p>
<p>First, you are compelled to use surrogate keys as natural keys are out of the question because of the need to add a &#8220;state&#8221; column. Second, the only way to protect against referencing an inactive value at the database level is to use triggers. Third, we lose our database level referential integrity that tells us that an about to be deleted value has been referenced. If we simply change the state, it does nothing to compel us to correct the child references to use an active parent value or to change the state of those child records. Lastly, you have to code against phantom values: </p>
<p>For example, suppose we have a status table with a name column and a series of attributes. We cannot put our unique constraint on name alone; it must be on the state and the name. For each addition, we must check whether we have ever had the given name and if so, &#8220;reactivate&#8221; it. If we simply reactivate, the new status will contain the attributes of the previously deleted instance unless we guard against that. </p>
<p>It is more error prone because it is more work to implement correctly especially in reporting as all the report designers have to know to account for the state column. </p>
<p>If we go the route of a mirror table contained deleted values, that has its own set of issues. None of these problems are insurmountable, but they do add work, which means cost which means a cost/benefit problem for the stakeholder. </p>
<p>IMO, soft deletes must be a conscious, well thought out decision as it adds cost to the project which can be substantial depending where the soft deletes are needed. It is not just a &#8220;tiny&#8221; bit more complex. Every query has to account for the state and typically those errors happen in reporting.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jørn Wildt</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36706</link>
		<dc:creator>Jørn Wildt</dc:creator>
		<pubDate>Sun, 13 Sep 2009 17:17:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36706</guid>
		<description>Udi wrote: adding a single where clause might make it a *tiny* bit more complex, but I’d hardly go so far as to say “error-prone”.

Unfortunately, &quot;error-prone&quot; is no so far off. It probably depends on how you structure your code, but adding an extra status to some central widely used entity can ripple changes to many places: you can have a bunch of reports that need to be changes, querying in the UI needs to be changed, the new status has to be added as an extra parameter to UI search windows, you may need to add extra language translation for that status and so on.

In short, adding a simple status can have wide spread consequences.

The SQL etc. might be rather trivial to fix, but the biggest problem is to locate all the places that need fixing - and *that* is error prone.

Neither is a big test suite going to help you: all your test will run fine since none of them are aware of the new status. Adding new tests helps of course, but figuring out which to add is also a problem.

This is *not* to say that I prefer a technical delete over true bussiness logic. I just want to illustrate that it might be a bit more expensive than exptected.

If you have a good solution then please share it :-)</description>
		<content:encoded><![CDATA[<p>Udi wrote: adding a single where clause might make it a *tiny* bit more complex, but I’d hardly go so far as to say “error-prone”.</p>
<p>Unfortunately, &#8220;error-prone&#8221; is no so far off. It probably depends on how you structure your code, but adding an extra status to some central widely used entity can ripple changes to many places: you can have a bunch of reports that need to be changes, querying in the UI needs to be changed, the new status has to be added as an extra parameter to UI search windows, you may need to add extra language translation for that status and so on.</p>
<p>In short, adding a simple status can have wide spread consequences.</p>
<p>The SQL etc. might be rather trivial to fix, but the biggest problem is to locate all the places that need fixing &#8211; and *that* is error prone.</p>
<p>Neither is a big test suite going to help you: all your test will run fine since none of them are aware of the new status. Adding new tests helps of course, but figuring out which to add is also a problem.</p>
<p>This is *not* to say that I prefer a technical delete over true bussiness logic. I just want to illustrate that it might be a bit more expensive than exptected.</p>
<p>If you have a good solution then please share it <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36705</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sun, 13 Sep 2009 15:48:29 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36705</guid>
		<description>Thomas (40),

The question of business status is more important than the answer. What I mean by that is that as long as the business people are making the tradeoffs between complexity/cost and value in the statuses, then we as developers have done our job.

It&#039;s when we assume that deleting (whether soft or not) is a good enough technical solution - without vetting that with the business, that we overstep our responsibility.

To your point #1, we don&#039;t bypass RI - we actually model the business life cycle of important entities. And to point #2, correspondingly, we show users what they need to see - adding a single where clause might make it a *tiny* bit more complex, but I&#039;d hardly go so far as to say &quot;error-prone&quot;.

Thanks for your comments.</description>
		<content:encoded><![CDATA[<p>Thomas (40),</p>
<p>The question of business status is more important than the answer. What I mean by that is that as long as the business people are making the tradeoffs between complexity/cost and value in the statuses, then we as developers have done our job.</p>
<p>It&#8217;s when we assume that deleting (whether soft or not) is a good enough technical solution &#8211; without vetting that with the business, that we overstep our responsibility.</p>
<p>To your point #1, we don&#8217;t bypass RI &#8211; we actually model the business life cycle of important entities. And to point #2, correspondingly, we show users what they need to see &#8211; adding a single where clause might make it a *tiny* bit more complex, but I&#8217;d hardly go so far as to say &#8220;error-prone&#8221;.</p>
<p>Thanks for your comments.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas 2</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36704</link>
		<dc:creator>Thomas 2</dc:creator>
		<pubDate>Sun, 13 Sep 2009 06:05:38 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36704</guid>
		<description>To be fair to Thomas, posting 40 is written by another Thomas than the Thomas of posting 36 ;)</description>
		<content:encoded><![CDATA[<p>To be fair to Thomas, posting 40 is written by another Thomas than the Thomas of posting 36 <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36703</link>
		<dc:creator>Thomas</dc:creator>
		<pubDate>Sun, 13 Sep 2009 05:59:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36703</guid>
		<description>Interesting article!

The way I see it, if you (as suggested) chose to replace physical deletes 
with modelling the business rules underlying this operation, you will still 
be faced with the two main problems associated with soft deletes.

1. You bypass the referential integrity of the RDMS. (delete is replaced with status)
2. You end up with more complicated and error-prone queries.

It&#039;s a tradeoff, but if you can&#039;t come up with an argument of why you should model
the business rules underlying the delete operation - maybe avoiding the two
problems above and keeping the model simple is the best choice. In my experience, 
when you introduce new entity states, you quickly end up in a situation where users cannot explain the difference between two states.</description>
		<content:encoded><![CDATA[<p>Interesting article!</p>
<p>The way I see it, if you (as suggested) chose to replace physical deletes<br />
with modelling the business rules underlying this operation, you will still<br />
be faced with the two main problems associated with soft deletes.</p>
<p>1. You bypass the referential integrity of the RDMS. (delete is replaced with status)<br />
2. You end up with more complicated and error-prone queries.</p>
<p>It&#8217;s a tradeoff, but if you can&#8217;t come up with an argument of why you should model<br />
the business rules underlying the delete operation &#8211; maybe avoiding the two<br />
problems above and keeping the model simple is the best choice. In my experience,<br />
when you introduce new entity states, you quickly end up in a situation where users cannot explain the difference between two states.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ray</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36702</link>
		<dc:creator>Ray</dc:creator>
		<pubDate>Sat, 12 Sep 2009 16:21:32 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36702</guid>
		<description>Agree so much!</description>
		<content:encoded><![CDATA[<p>Agree so much!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36700</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 12 Sep 2009 06:17:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36700</guid>
		<description>Thomas,

You&#039;re absolutely right - sometimes MS Access really is the right tool for the job &lt;wink /&gt;.</description>
		<content:encoded><![CDATA[<p>Thomas,</p>
<p>You&#8217;re absolutely right &#8211; sometimes MS Access really is the right tool for the job <wink />.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36699</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Sat, 12 Sep 2009 06:15:57 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36699</guid>
		<description>Dhananjay,

See my answer (12) to Andy. If the user mistakenly added an entity, then we could call entity.AddedByMistake(); which may result in a delete.

Other actions are just as easy to revert when you have the original context.

Hope that answers your questions.</description>
		<content:encoded><![CDATA[<p>Dhananjay,</p>
<p>See my answer (12) to Andy. If the user mistakenly added an entity, then we could call entity.AddedByMistake(); which may result in a delete.</p>
<p>Other actions are just as easy to revert when you have the original context.</p>
<p>Hope that answers your questions.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Thomas</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36698</link>
		<dc:creator>Thomas</dc:creator>
		<pubDate>Fri, 11 Sep 2009 18:38:26 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36698</guid>
		<description>Flexibility equates to complexity. Hard deletes are easier to implement but can have far more profound effects. Soft deletes are more flexible, but require a lot more work to implement properly. As someone mentioned, every report and every screen has to account for the state of the record. In some cases, they have to allow for ignoring the state (i.e., don&#039;t filter on anything). Thus, it is not just a matter of gleaning from the user what they are really trying to accomplish, it is a matter of presenting a cost/benefit proposal of development time vs flexibility.</description>
		<content:encoded><![CDATA[<p>Flexibility equates to complexity. Hard deletes are easier to implement but can have far more profound effects. Soft deletes are more flexible, but require a lot more work to implement properly. As someone mentioned, every report and every screen has to account for the state of the record. In some cases, they have to allow for ignoring the state (i.e., don&#8217;t filter on anything). Thus, it is not just a matter of gleaning from the user what they are really trying to accomplish, it is a matter of presenting a cost/benefit proposal of development time vs flexibility.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Dhananjay Goyani</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36697</link>
		<dc:creator>Dhananjay Goyani</dc:creator>
		<pubDate>Fri, 11 Sep 2009 07:52:46 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36697</guid>
		<description>Udi,
The status thing that you are suggesting is sort of incremental where in the user will create something first and then will act upon - cancellation, retirement, marking it as inactive, etc. I follow your point in saying that such scenario should be handled by marking the instance with appropriate status rather physically removing from the system.

Well, the concern here is with something you want to revert. Revert an action completely which was by mistake (different than status increments). And there comes physical and its counterpart &#039;IsDeleted&#039; can play a big role. Such entries are useless by any meanse, and can create mess in the system - so the best option is to throw them out - obviously with care. ;-)

Your thoughts?</description>
		<content:encoded><![CDATA[<p>Udi,<br />
The status thing that you are suggesting is sort of incremental where in the user will create something first and then will act upon &#8211; cancellation, retirement, marking it as inactive, etc. I follow your point in saying that such scenario should be handled by marking the instance with appropriate status rather physically removing from the system.</p>
<p>Well, the concern here is with something you want to revert. Revert an action completely which was by mistake (different than status increments). And there comes physical and its counterpart &#8216;IsDeleted&#8217; can play a big role. Such entries are useless by any meanse, and can create mess in the system &#8211; so the best option is to throw them out &#8211; obviously with care. <img src='http://www.udidahan.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Your thoughts?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36694</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 10 Sep 2009 16:45:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36694</guid>
		<description>Lex,

Taking up a GUID in the case of a mistake is not such a big deal. However, since we can set up a preliminary state for data as its being typed in (where most mistakes happen), data in that state doesn&#039;t actually count towards reserving a given name/code/resource. When entities in that state are &quot;published&quot; or &quot;authorized&quot; is when we check for uniqueness and &quot;reserve&quot; that name/code/resource.

As for the archival, I acceded that point above in my comments to Andrig.

Thanks for your comments</description>
		<content:encoded><![CDATA[<p>Lex,</p>
<p>Taking up a GUID in the case of a mistake is not such a big deal. However, since we can set up a preliminary state for data as its being typed in (where most mistakes happen), data in that state doesn&#8217;t actually count towards reserving a given name/code/resource. When entities in that state are &#8220;published&#8221; or &#8220;authorized&#8221; is when we check for uniqueness and &#8220;reserve&#8221; that name/code/resource.</p>
<p>As for the archival, I acceded that point above in my comments to Andrig.</p>
<p>Thanks for your comments</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36693</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 10 Sep 2009 16:38:23 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36693</guid>
		<description>Ian,

It is a general organizational pattern with developers to accept &quot;requirements&quot; at face value and then go develop them exactly as specified. We need to invest more in human-to-human interaction in order to solve/prevent the software problems we&#039;ve been seeing as an industry.</description>
		<content:encoded><![CDATA[<p>Ian,</p>
<p>It is a general organizational pattern with developers to accept &#8220;requirements&#8221; at face value and then go develop them exactly as specified. We need to invest more in human-to-human interaction in order to solve/prevent the software problems we&#8217;ve been seeing as an industry.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: udidahan</title>
		<link>http://www.udidahan.com/2009/09/01/dont-delete-just-dont/comment-page-1/#comment-36692</link>
		<dc:creator>udidahan</dc:creator>
		<pubDate>Thu, 10 Sep 2009 16:36:24 +0000</pubDate>
		<guid isPermaLink="false">http://www.udidahan.com/?p=1097#comment-36692</guid>
		<description>Andrig,

You bring up a valid point that when a given graph of entities is in a certain state for a certain period of time, it can be in the business interest to archive it away from the main database for performance reasons.</description>
		<content:encoded><![CDATA[<p>Andrig,</p>
<p>You bring up a valid point that when a given graph of entities is in a certain state for a certain period of time, it can be in the business interest to archive it away from the main database for performance reasons.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
