Mark and Pirana really hit the nail on the head. Being too general ends up being a pain in the butt usually for the store owner, which is why I disdain OSC or zencart, xcart, etc. and only write custom sites for clients. For my own sites my template system is "includes" and my db access is thru my own DB wrapper class.
Note: if you need to track product inventory (ie how many widgets are in stock) then FORGET about using mysql < 5.x or whenever they get that fixed. Alternative: postgresql? Basically mysql 4.x is not obeying the constraints with which you actually define the columns by (eg: unsigned, not null, etc) and will happily enter a 0 or '' when really it should complain with an error.