This module can access to system catalog of database through DBI(3) interface.
Basic methods access to objects through standard DBI(3) interface
(call tables() for list of objects and selectall_arrayref() with basic
SQL to get structure of objects).

Constructor looks for specific module implemented database interface for
used DBD driver (obtained from DBI(3)). These module can add faster and better
functions such as relationships or types of objects.

Constructor create instance of this class and bind DBI(3) connection.
Then obtain used driver name from DBI(3) class and look for descendant
of this class for this driver (e.g. DBIx::SystemCatalog::Oracle module
for Oracle driver). If success, return instance of this more specific class,
otherwise return itself.

You must passed connected DBI(3) instance as first argument to constructor
and you can't disconnect that instance while you use this instance of
DBIx::SystemCatalog.

Method set current schema name. Other methods work only with this schema.
Because working with one schema is typical work, all methods in specific
class need this schema name. Method can set schema (descendant need not
redefine it).

Method must return list of storage objects from database (mean tables and
views). In this base class method use DBI(3) function tables() for
fetching this list. Specific class ussually redefine method for faster
access and return all objects (list of views is in DBI(3) functions
uncertain).

Method combine tables() and table_type() and return list of hashes
with keys name (table name) and type (same meaning as returned value
from table_type()). Base class implement this method as tables() and
for each table call table_type(). Specific class ussually redefine it for
faster access.

I currently support only Oracle and Pg (PostgreSQL) specific class.
Returned API is described in this man page. I think man pages for
specific classes we don't need because functions are described in
this man page.