I have been using Class::DBI and Class::DBI::Sweet, but monks seem to be slowly gravitating towards the two modules that davorg recommends above as well as Rose::DB::Object that merlyn has recently recommended. Could you clarify two points for me, though:
You shouldn't really have to use multiple-column primary keys, is there a particular reason for your design?
You say referential integrity is important, but transactions are low priority. Why is that?