Managing Inheritance Using Multiple-Row-Type Tables

Multiple-row-type tables can be useful when you want to represent objects of different types from the same relation if this relation contains both instances of a given class and instances of a subclass.

For example, assuming that the employees relation in a Department object contains both Employee objects and Executive objects, you may want to store objects of both types in the same table. Instructions to create such a table in Server Studio are provided in Server Studio Advanced Features.

The following view specification will be generated:

subscribe origin Department:

represent IlsSwTable AllEmployeeTable:

string column[1]="name";

string column[2]="hireDate";

string column[3]="monthCost";

string column[4]="title";

Collector rows=employees->employeeRow;

string rowType="Employee,employeeRow";

string collectorName="rows";

propagate employees;

subscribe Employee:

represent IlsSwRow employeeRow

## draggedPath=employees.Executive:

mandatory Ref<IlsSwTable> table=view.origin->AllEmployeeTable;

string column[1]=name;

int column[2]=hireDate;

int column[3]=monthCost;

subscribe Executive:

represent IlsSwRow executiveRow

## draggedPath=employees.Executive:

mandatory Ref<IlsSwTable> table=view.origin->AllEmployeeTable;

string column[1]=name;

int column[2]=hireDate;

int column[3]=monthCost;

string column[4]=title;

This code sample can be illustrated as follows:

Multiple-Row-Type Table for Inheritance

Whereas the class Executive inherits from the class Employee in the server object model, the instances of these classes are represented by two different row types stored in the same table. Instances of the class Executive execute the represent clause for the class Executive and only that one while instances of the class Employee execute the represent clause for the class Employee. In such a view specification, title is an attribute of the Executive class. This attribute is left blank for instances that are not of the type Executive.

Note

As usual, the table schema must be shared by all rows that reference this table.

You can explicitly create instances of the Executive server type by using the rowType table property and add them to the employees relation via the collector. When an executiveRow representation object is deleted, Server will not be able to find a matching collector. It will therefore use the default collector and remove the Executive object from the employees relation.