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 --generate-query --generate-session \ --default-pointer std::tr1::shared_ptr employee.hxx Where stands for the database system we are using, for example, 'mysql'. The --generate-session option is used to enable session support for all the persistent classes in employee.hxx. 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 compile and link the example manually from the command line we can use the following commands (using MySQL as an example; replace 'c++' with your C++ compiler name): c++ -c employee-odb.cxx c++ -DDATABASE_MYSQL -c driver.cxx c++ -o driver driver.o employee-odb.o -lodb-mysql -lodb 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.