Further extending your point, I would suggest separating data and functionality into chunks that could be represented by a Perl object. These objects will hide the complexity of RDBMS interaction (SQL etc). Objects could then be related and structured in a meaningful way for optimal performance and minimal maintenance cost.
Actually, I'm just about to write a system (in Perl) for artist/artwork and article management. In the back-end there's a MySQL database where data about various artists, artwork and related articles is being kept. The task is to come up with web tool that would help clients to access and manipulate this data.
For this to work, I will first design Perl objects to represent an individual artist, artwork and article. These objects will also implement interface for changing/updating data (in the MySQL database) that is encapsulated in each object. Finally, I'll simply write a template driven CGI script that will make use of such objects....
# Under Construction