<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Hi,<div><br></div><div>We’ve been experimenting with GOODS as an object database persistency mechanism for a couple of weeks. We plan to use Dali with it too. We’re really excited about this but have a burning question.</div><div><br></div><div><b>Question:&nbsp;</b></div><div>How do we handle changes to the “model” layer?&nbsp;</div><div><br></div><div><b>Example:&nbsp;</b></div><div>Suppose that last week we had a “Person” and “Profession” object. Each “Person” could only have one “Profession.” We’ve been saving some data to our Object Database and have 500 people and 25 professions currently saved and used with our app.</div><div><br></div><div>This week we realize that our world view is wrong. Some people are both a “Chef” and a “Computer Scientist.” They have 2 or more professions. We must change our “model.” The class “Person” must change.&nbsp;</div><div><br></div><div>How do we fix our object database now?</div><div><br></div><div><b>Background:</b></div><div>This isn’t really a GOODS specific question is it? I imagine it is the same issue with Magma, GemStone, etc. But in all the examples I’ve found nobody seems to talk about “migrations” or maybe I’ve overlooked it. Can someone point me in the right direction?</div><div><br></div><div>In NeXT / Apple WebObjects I would write a “migration” to do the necessary steps to change SQL tables, make new DB constraints, etc. as an executable script. I would commit this migration to the repository. Any of the other developers on our team would automatically get it when they pulled from the repository. They don’t need to think about it. As soon as the WebObjects app launches the migrations would be run and they could see the new functionality and make “Marcus” both a “Chef and a Computer Scientist." When we deploy the new code in production, the migration will automatically run there too. This is all explained in detail here:</div><div><br></div><div><a href="https://github.com/wocommunity/wonder/blob/master/Frameworks/Core/ERExtensions/Sources/er/extensions/migration/package.html">https://github.com/wocommunity/wonder/blob/master/Frameworks/Core/ERExtensions/Sources/er/extensions/migration/package.html</a></div><div><br></div><div>Any helpful pointers are appreciated.</div><div><br></div><div>Thank you,</div><div><div>
<table style="margin-top:0.5em;margin-left:0.5em;margin-bottom:30px;" border="0">
        <tbody><tr>
                <td colspan="2" style="padding-bottom: 0.3em; ">
                        <span style="font-family:'Trebuchet MS',helvetica,San-Serif;font-size:11px;color:#888888;line-height:22px"><b style="color:#11aeab;text-transform:uppercase;letter-spacing:2px">Aaron Rosenzweig</b>&nbsp;/&nbsp;<a href="http://www.chatnbike.com" title="visit Chat 'n Bike" style="text-decoration:none; border-bottom:1px dotted #888888;color:#888888">Chat 'n Bike</a></span><br>
                        <span style="font-family:'Trebuchet MS',helvetica,San-Serif;font-size:11px;color:#b2b2b2;"><b style="color:#888888">e:</b>&nbsp;&nbsp;<a href="mailto:aaron@chatnbike.com" title="email Aaron" style="text-decoration:none; border-bottom:1px dotted #b2b2b2;color:#b2b2b2">aaron@chatnbike.com</a>&nbsp;&nbsp;<b style="color:#888888">t:</b>&nbsp;&nbsp;(301) 956-2319</span>
                </td>
        </tr>
        <tr>
                <td>
                        <img src="http://www.chatnbike.com/WebObjects/FamilyCycleGroupOrder.woa/Contents/WebServerResources/images/chat_n_bike_logo_small.png" alt="Chat 'n Bike" height="100">
                </td>
                <td>
                        <img src="http://www.chatnbike.com/WebObjects/FamilyCycleGroupOrder.woa/Contents/WebServerResources/images/dealers/usa.jpg" alt="Chat 'n Bike" height="100">
                </td>
        </tr>
</tbody></table>

</div>
<br></div></body></html>