[Catalyst] More natural access to model?
Matt S Trout
dbix-class at trout.me.uk
Wed May 13 15:49:25 GMT 2009
On Tue, May 12, 2009 at 08:04:18PM -0700, Darren Duncan wrote:
> 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.
Too bloody right. Care to shove this on the catwiki somewhere?
--
Matt S Trout Catalyst and DBIx::Class consultancy with a clue
Technical Director and a commit bit: http://shadowcat.co.uk/catalyst/
Shadowcat Systems Limited
mst (@) shadowcat.co.uk http://shadowcat.co.uk/blog/matt-s-trout/
More information about the Catalyst
mailing list