This example shows how to map persistent C++ classes to a custom database schema. In particular, it shows how to map all the commonly-used constructs, including containers, object relationships, and composite value types. The example uses the shared_ptr smart pointer from TR1 and requires a C++ compiler with TR1 support or an external TR1 implementation, such as the one provided by Boost. The example consists of the following files: employee.hxx Header file defining the 'employee' and 'employer' persistent classes as well as the 'name' composite value type. ODB pragmas are used to assign custom database tables to persistent classes as well as custom database types and columns to data members. employee-odb.hxx employee-odb.ixx employee-odb.cxx These files contain the database support code for the employee.hxx header and are generated by the ODB compiler from employee.hxx using the following command line: odb -d <database> --generate-query --default-pointer std::tr1::shared_ptr \ employee.hxx Where <database> stands for the database system we are using, for example, 'mysql'. The --default-pointer option is used to make TR1 shared_ptr the default object pointer. database.hxx Contains the create_database() function which instantiates the concrete database class corresponding to the database system we are using. driver.cxx Driver for the example. It includes the employee.hxx and employee-odb.hxx headers to gain access to the persistent classes and their database support code. It also includes database.hxx for the create_database() function declaration. In main() the driver first calls create_database() to obtain the database instance. It then programmatically creates the database schema by executing a series of SQL statements. After that the driver creates a number of 'employee' and 'employer' objects, sets the relationships between them, and persists them in the database. Finally, the driver performs a database query and prints the information about the returned objects. To run the driver, using MySQL as an example, we can execute the following command: ./driver --user odb_test --database odb_test Here we use 'odb_test' as the database login and also 'odb_test' as the database name.