<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.0.5" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Schema Evolution Confusion / Example Case</title>
	<link>http://kered.org/blog/2007-08-03/schema-evolution-confusion-example-case/</link>
	<description>Just another WordPress weblog</description>
	<pubDate>Fri, 21 Nov 2008 20:11:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.0.5</generator>

	<item>
		<title>by: buriy</title>
		<link>http://kered.org/blog/2007-08-03/schema-evolution-confusion-example-case/#comment-11989</link>
		<pubDate>Mon, 06 Aug 2007 03:14:08 +0000</pubDate>
		<guid>http://kered.org/blog/2007-08-03/schema-evolution-confusion-example-case/#comment-11989</guid>
					<description>IMO the right behavior is to ask user to confirm data loss when changing v1 =&#62; v2.</description>
		<content:encoded><![CDATA[<p>IMO the right behavior is to ask user to confirm data loss when changing v1 =&gt; v2.
</p>
]]></content:encoded>
				</item>
	<item>
		<title>by: SmileyChris</title>
		<link>http://kered.org/blog/2007-08-03/schema-evolution-confusion-example-case/#comment-11897</link>
		<pubDate>Fri, 03 Aug 2007 21:48:35 +0000</pubDate>
		<guid>http://kered.org/blog/2007-08-03/schema-evolution-confusion-example-case/#comment-11897</guid>
					<description>I would argue that the exact path from v1 =&#62; v3 can definitely be important!

v1

class Russ(models.Model):
____"this model is going to have a bit of a day (v1)"
____a = models.CharField(maxlength=200)

v2 	

class Russ(models.Model):
____"this model is going to have a bit of a day (v2)"
____b = models.CharField(maxlength=200, null=True)
____c = models.CharField(maxlength=200, aka='a')

v3 	

class Russ(models.Model):
____"this model is going to have a bit of a day (v3)"
____a = models.CharField(maxlength=200, aka='b', null=True)
____b = models.CharField(maxlength=200, aka='c')

Tester 1 &#38; 2 have the same database contents at v1: [Russ(a='first')]

Tester 1 goes from v1 =&#62; v2 =&#62; v3. Now he has [Russ(a=None, b='first')]
Tester 2 merges from 1's work and evolves from v1 =&#62; v3. Now he has [Russ(a='first', b=None)]  (or error since b shouldn't be able to be NULL).

Since you have "lost" what happened in v2, it's not possible for Tester 2 to guess what should have happened.</description>
		<content:encoded><![CDATA[<p>I would argue that the exact path from v1 =&gt; v3 can definitely be important!</p>
<p>v1</p>
<p>class Russ(models.Model):<br />
____&#8221;this model is going to have a bit of a day (v1)&#8221;<br />
____a = models.CharField(maxlength=200)</p>
<p>v2 	</p>
<p>class Russ(models.Model):<br />
____&#8221;this model is going to have a bit of a day (v2)&#8221;<br />
____b = models.CharField(maxlength=200, null=True)<br />
____c = models.CharField(maxlength=200, aka=&#8217;a')</p>
<p>v3 	</p>
<p>class Russ(models.Model):<br />
____&#8221;this model is going to have a bit of a day (v3)&#8221;<br />
____a = models.CharField(maxlength=200, aka=&#8217;b', null=True)<br />
____b = models.CharField(maxlength=200, aka=&#8217;c')</p>
<p>Tester 1 &amp; 2 have the same database contents at v1: [Russ(a=&#8217;first&#8217;)]</p>
<p>Tester 1 goes from v1 =&gt; v2 =&gt; v3. Now he has [Russ(a=None, b=&#8217;first&#8217;)]<br />
Tester 2 merges from 1&#8217;s work and evolves from v1 =&gt; v3. Now he has [Russ(a=&#8217;first&#8217;, b=None)]  (or error since b shouldn&#8217;t be able to be NULL).</p>
<p>Since you have &#8220;lost&#8221; what happened in v2, it&#8217;s not possible for Tester 2 to guess what should have happened.
</p>
]]></content:encoded>
				</item>
</channel>
</rss>
