typical stuff to do in dbi: connect insert select delete a common method for abstraction is to end up with wrappers around DBI, and this can end up making your life more complicated than the SQL did to begin with models what are they why do db's suck at it? a model is a collection of things like a recliner: covering height weight position age databases suck at this kind of thing they have tables and columns and records they make us manipulate recordsets, but we really want to manipulate stuff (models) we see things as objects with properties and relationships and constraints and "mortal traits" [ed: they can die, I think] objects answer questions and do what we say object-relational mappers (ORM) wrap your existing relational schemas remove SQL from applications (remove SQL from the code you'd otherwise enjoy writing) we need to configure: db connections classes rarely share but they do share these table spec you can spec what sequence (a la pgsql) to use column categorization five types: all primary - the key essential - always fetched others - retrieved lazily TEMP - non-persistent relationships has one has many might have - inherit behavior (a la pgsql inh. tables) better searching than builtin AbstractSearch (see SQL::AS) custom constructors performs search, returns set you can use placeholders to parameterize [ed: very cool!] class::dbi is just a platform on which to build you don't want to just use it with no optimization