[Catalyst] More natural access to model?

Darren Duncan darren at darrenduncan.net
Wed May 13 03:04:18 GMT 2009


Paweł Tęcza wrote:
> Dnia 2009-05-12, wto o godzinie 19:30 +0100, Matt S Trout pisze:
>> Well, that's a horrible idea.
>>
>> The whole point of having a database is to -model- your data.
>>
>> If you try and turn it into a giant hash, then of course you're going to
>> end up with nasty code.
>>
>> I -could- explain how to clean that loop up a lot, but the reality is that
>> you should have actual columns for things and update your database as
>> required as new types of data need to be included - you'll have to update
>> the application anyway, so I don't see any reason not to update the database
>> at the same time ...
> 
> Intriguing post. My application and database design are still under
> heavy development, so all ideas, suggestions and comments are very
> welcome :D

A general rule of thumb is that you should be conceptualizing your databases 
similar to how you conceptualize your applications.

Your database schema, such as what tables you have, and their columns, and their 
column data types, and the relationships between tables and columns etc, these 
are like program code, such as how you choose to decompose your application into 
libraries and classes and class attributes and type constraints and input 
constraints and so on.  The actual data you put in your database tables is 
analogous to what data you put in your application variables or objects.

Generally speaking it should be natural to change your actual database schema as 
often as you change your application source code, where it makes sense; for 
example, changing your schema is a similar sort of operation to changing what 
attributes your object classes have or your constraints.

Or more accurately in practice, a database is more like (or in some cases, 
exactly like) a shared library, where you have some classes you write once and 
share in multiple applications, and if you change the library you have to 
consider that impact on all the applications that use it.  Hence people tend to 
be more conservative in database design changes, but still one shouldn't be 
afraid to do it, and all you really need is just proper communication and 
planning between the involved parties so it goes smoothly.

Also, same as classes can have multiple APIs, eg keeping old ones for backwards 
compatibility if old apps can't update, databases have things called views / 
virtual tables which let them also have multiple APIs; this is one of the main 
purposes of views in fact.

-- Darren Duncan



More information about the Catalyst mailing list