<?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: The trouble with soft delete</title>
	<atom:link href="http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/feed/" rel="self" type="application/rss+xml" />
	<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/</link>
	<description>The adventures of a young kiwi software developer in London</description>
	<lastBuildDate>Thu, 10 May 2012 16:20:46 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
	<item>
		<title>By: Richard</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-66451</link>
		<dc:creator>Richard</dc:creator>
		<pubDate>Sun, 29 Apr 2012 12:51:33 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-66451</guid>
		<description>@Brian: move the archive data into a separate archive/reporting store, denormalized, read-optimized and including active and inactive data. 

Depending on the size and constraints, this could simply be a separate denormalized table, or a separate schema, a separate DB or even a cube or something. But basically the idea is to separate your transactional (live, normalized, write-optimized) data from historical reporting data (inactive, denormalized, read-optimized). If you try to do both in the same table, concerns will leak from one side to the other (e.g. reports will have to do too many JOINs, and the write side will have to have WHERE Active = 1 all over the place).</description>
		<content:encoded><![CDATA[<p>@Brian: move the archive data into a separate archive/reporting store, denormalized, read-optimized and including active and inactive data. </p>
<p>Depending on the size and constraints, this could simply be a separate denormalized table, or a separate schema, a separate DB or even a cube or something. But basically the idea is to separate your transactional (live, normalized, write-optimized) data from historical reporting data (inactive, denormalized, read-optimized). If you try to do both in the same table, concerns will leak from one side to the other (e.g. reports will have to do too many JOINs, and the write side will have to have WHERE Active = 1 all over the place).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Brian Bokor</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-63135</link>
		<dc:creator>Brian Bokor</dc:creator>
		<pubDate>Tue, 10 Apr 2012 04:40:37 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-63135</guid>
		<description>Do you have a good example of how you might attack needing data and associations around for reporting, but don&#039;t actually need the record visible?  I guess what I mean is how having a status on a table or an archive table seems to really bring the same complexities from my view point.  Either it is more if statements or more intense SQL joins and given most bottlenecks always seem to come from the database with crap SQL, I think i would rather see more if else.  Do you see an easier way to minimize joins and scenarios for data that has to be around for years (like PCI Compliant Service)...data mining would be terrible.  Just wanted some thoughts, reactions??</description>
		<content:encoded><![CDATA[<p>Do you have a good example of how you might attack needing data and associations around for reporting, but don&#8217;t actually need the record visible?  I guess what I mean is how having a status on a table or an archive table seems to really bring the same complexities from my view point.  Either it is more if statements or more intense SQL joins and given most bottlenecks always seem to come from the database with crap SQL, I think i would rather see more if else.  Do you see an easier way to minimize joins and scenarios for data that has to be around for years (like PCI Compliant Service)&#8230;data mining would be terrible.  Just wanted some thoughts, reactions??</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Relational database versioning strategies &#124; JonBlog</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-48117</link>
		<dc:creator>Relational database versioning strategies &#124; JonBlog</dc:creator>
		<pubDate>Sun, 27 Nov 2011 11:39:56 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-48117</guid>
		<description>[...] of a unversioned table. It also adds a layer of complexity to all queries on the table (see here). The Propel ORM team has also noted several problems with the approach, and recommends an archive [...]</description>
		<content:encoded><![CDATA[<p>[...] of a unversioned table. It also adds a layer of complexity to all queries on the table (see here). The Propel ORM team has also noted several problems with the approach, and recommends an archive [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ranu Mandan</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-42092</link>
		<dc:creator>Ranu Mandan</dc:creator>
		<pubDate>Mon, 19 Sep 2011 16:50:39 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-42092</guid>
		<description>there is one more way of handling archived data , is by writing a purging job against an isdeleted = true records</description>
		<content:encoded><![CDATA[<p>there is one more way of handling archived data , is by writing a purging job against an isdeleted = true records</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Stefan Bundy</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-38571</link>
		<dc:creator>Stefan Bundy</dc:creator>
		<pubDate>Sat, 06 Aug 2011 09:52:57 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-38571</guid>
		<description>Thanks for the post.  I&#039;m bookmarking your blog and will certainly return!</description>
		<content:encoded><![CDATA[<p>Thanks for the post.  I&#8217;m bookmarking your blog and will certainly return!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: 77: TZ Discussion – TWaT (This Week about Tech)</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-17559</link>
		<dc:creator>77: TZ Discussion – TWaT (This Week about Tech)</dc:creator>
		<pubDate>Mon, 11 Oct 2010 05:14:55 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-17559</guid>
		<description>[...] met and their early experiences using Agile methods, Alex&#8217;s work with Formula One racing, whether or not soft deletes are a bad idea, InnoDB vs MyISAM, taking advantage of micro opportunities, a [...]</description>
		<content:encoded><![CDATA[<p>[...] met and their early experiences using Agile methods, Alex&#8217;s work with Formula One racing, whether or not soft deletes are a bad idea, InnoDB vs MyISAM, taking advantage of micro opportunities, a [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Tarek Mahmud Apu</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-15885</link>
		<dc:creator>Tarek Mahmud Apu</dc:creator>
		<pubDate>Thu, 05 Aug 2010 05:58:53 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-15885</guid>
		<description>It&#039;s a nice post. Thanks a lot. 

I have faced lots of problem on this issue.  To maintain foreign key integrity and for reporting purposes, normally we change the status to &quot;delete&quot;.

I like the technique of storing the inactive data in separate table than the soft delete. But do u think creating view based on status can give better solution?

I liked that you mentioned  &quot;developers should definitely focus on the business scenario&quot;. Sometimes client force to do that because they think this is the standard way though they need not use the soft delete.. so it causes some extra effort on developing.</description>
		<content:encoded><![CDATA[<p>It&#8217;s a nice post. Thanks a lot. </p>
<p>I have faced lots of problem on this issue.  To maintain foreign key integrity and for reporting purposes, normally we change the status to &#8220;delete&#8221;.</p>
<p>I like the technique of storing the inactive data in separate table than the soft delete. But do u think creating view based on status can give better solution?</p>
<p>I liked that you mentioned  &#8220;developers should definitely focus on the business scenario&#8221;. Sometimes client force to do that because they think this is the standard way though they need not use the soft delete.. so it causes some extra effort on developing.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ron</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-15860</link>
		<dc:creator>Ron</dc:creator>
		<pubDate>Wed, 04 Aug 2010 11:01:06 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-15860</guid>
		<description>Excellent!

From my experience, end users want to know what happened (the history of actions), so it is better to keep the deleted items in a separate table instead of implementing soft-delete.

implementing soft delete requires extra attention to primary database table to delete old rows and if your application is a huge one that inserts huge data per minute, soft-delete will definitely affect performance.</description>
		<content:encoded><![CDATA[<p>Excellent!</p>
<p>From my experience, end users want to know what happened (the history of actions), so it is better to keep the deleted items in a separate table instead of implementing soft-delete.</p>
<p>implementing soft delete requires extra attention to primary database table to delete old rows and if your application is a huge one that inserts huge data per minute, soft-delete will definitely affect performance.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Nalin Jayasuriya</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-14861</link>
		<dc:creator>Nalin Jayasuriya</dc:creator>
		<pubDate>Fri, 11 Jun 2010 00:09:30 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-14861</guid>
		<description>There is another downside to soft delete with Microsoft&#039;s Entity Framework and DomainService usage. 

As of Visual Studio 2010 (and EF 4), there is no simple way to expressing fetching primary entities while &#039;including&#039; related entities and excluding the &#039;soft deleted&#039; related entities.  There is no syntax that expresses this requirement in the Linq to Entities model.

One more reason to re-consider having that &#039;isDeleted&#039; flag!

- Nalin J</description>
		<content:encoded><![CDATA[<p>There is another downside to soft delete with Microsoft&#8217;s Entity Framework and DomainService usage. </p>
<p>As of Visual Studio 2010 (and EF 4), there is no simple way to expressing fetching primary entities while &#8216;including&#8217; related entities and excluding the &#8216;soft deleted&#8217; related entities.  There is no syntax that expresses this requirement in the Linq to Entities model.</p>
<p>One more reason to re-consider having that &#8216;isDeleted&#8217; flag!</p>
<p>- Nalin J</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Are You Soft on Your Deletes? &#124; Eddie Awad&#39;s Blog</title>
		<link>http://richarddingwall.name/2009/11/20/the-trouble-with-soft-delete/comment-page-1/#comment-12918</link>
		<dc:creator>Are You Soft on Your Deletes? &#124; Eddie Awad&#39;s Blog</dc:creator>
		<pubDate>Mon, 15 Mar 2010 14:02:13 +0000</pubDate>
		<guid isPermaLink="false">http://richarddingwall.name/?p=1909#comment-12918</guid>
		<description>[...] Good discussion followed which included a couple of interesting links: What is the best way to implement soft deletion? and The trouble with soft delete. [...]</description>
		<content:encoded><![CDATA[<p>[...] Good discussion followed which included a couple of interesting links: What is the best way to implement soft deletion? and The trouble with soft delete. [...]</p>
]]></content:encoded>
	</item>
</channel>
</rss>

