# Defining Database Schemas

> The database schema consists of a set of classes (tables) containing fields (columns) and indexes that implement the application's information model . This schema can be defined for SQL applications using embedded SQL Data Definition Language (DDL) statements. For non-SQL applications the database designer uses the eXtremeDB Data Definition Language (DDL) for C, C++ and Python applications, or native language class definitions in Java or C#, to create a database schema. The schema is a textual description of the data model which is processed by the eXtremeDB schema compiler.

> For C, C++ and Python applications, this is done by invoking the mcocomp schema compiler, which ensures that the schema is syntactically correct and then generates the application programming interface (API) header (.h) and implementation (.c) files. When the application is compiled, the database dictionary for the database is produced from the implementation file. The database dictionary is simply a binary form of the schema that the eXtremeDB runtime uses. The schema compiler can also emit Java and/or C# class definitions, appropriately annotated.

> For Java and C# applications, the “schema” consists of native language classes that are marked with the “Persistent” annotation or attribute and the database dictionary is generated at run-time when the attributes of database objects are obtained through the reflection mechanism. A C# or Java application can also generate the C style DDL schema.

> During early development, schema changes may be frequent and the process of regenerating the database APIs and application consists of repeating the normal steps of application development for the API of choice. But once an application is in use in a production environment, changes to the database schema may require more planning and careful deployment. (Please see the Changing the Database Schema page for further details.)

> The eXtremeDB schema definition provides a number of specific data storage capabilities . Please see the eXtremeDB Database Features page for further details.

> The method for defining the database schema is specific to the programming language used. Please use the links below to view detailed explanations and examples for your development environment:

> C | Defining in-memory database schemas in C
> C++ | Defining in-memory database schemas in C++
> Java | Defining in-memory database schemas in Java
> Python | Defining in-memory database schemas in Python
> C# | Defining in-memory database schemas in C#