Database handles and statement handles have different methods, so they are two different classes (::db and ::st). DBI itself provides global static methods. There's a fourth class (::dr) for database drivers.
DBI determines the name of the database handle class and the statement handle class based on the package used to create the connection ($pkg->connect), so there's no need to tell DBI about your ::db and ::st class. On the flip side, you need to create all three subclasses even if you only want to subclass one.