The type extent provider of a persistent type specifies how the instances of the type are stored in the underlying relational database system.
All (direct or indirect) instances of a type are abstracted by Genome as a set of rows, containing a row for each instance and columns for each field of the type and its derived types. This set of rows is called the extent of the type.
| table A | table B | table C | table D | ||
| T0 | T1 | T | T'1 | T'2 | T'3 |
|---|---|---|---|---|---|
| fields of T0 | fields of T1 | fields of T | fields of T'1 or empty | fields of T'2 or empty | fields of T'3 or empty |
The root type of a type is the first ancestor which has an associated table in the underlying relational database system. The root type is not necessarily the root of the class hierarchy, but the base types of the root type are not stored in the underlying relational database system. Each root type defines a type family that consists of the root type and all its descendants in the inheritance tree. Several behavioural aspects in Genome are specified for whole type families.
Genome 's extent providers extend the extent of the base type, so the author of the schema definition file only has to specify how the inheritance between the type and the base type are to be mapped.
T0 in Figure 2 uses root inheritance.
T1 and T'3 in Figure 2
use shared inheritance.
T, T'1 and T'2
in Figure 2 use joined inheritance.
For root types, the author of the schema definition file has to specify how the objects and types are identified. This determines the object identity model and the type identity model for the entire type family of the root type.
<RootInheritance> Element | <SharedInheritance> Element | <JoinedInheritance> Element