Подтипы "Programmer" и "Representative" наследуют все атрибуты от супертипа "Employee". Запрос об объектах "employees" типа "Employee" означает также запрос об объектах подтипов, а именно "programmers" и "representatives".
SELECT e.Name FROM employees e;
Результатом SQL запроса будет:
Name -------------------- Sylvia Karsen William Helprin Akiko Yokomoto
Zigzag представление
Та же иерархия данных может быть выражена в Zigzag. Отдельное определение типов не требуется.
$readTable() < Employee; Name ; Salary # ; Sylvia Karsen; 30000.00 >; $readTable() < Employee:Programmer; Name ; Salary ; Language; Project # ; William Helprin; 40000.00; C++ ; Seestorm >; $readTable() < Employee:Representative; Name ; Salary ; Region # ; Akiko Yokomoto; 50000.00; Asia >;
Zigzag запрос об объектах типа "Employee" означает также запрос об объектах имеющих тип "Programmer" и "Representative". Чтобы получить тот же самый результат, как ранее в SQL, воспользуемся следующим запросом.
= Name:(Employee:);
Отличительное свойство Zigzag - то, что тип действительно является объектом, который определяет класс (в смысле множества) других объектов. Другими словами, типы в Zigzag – также данные. Кроме того, наследование типа означает не только наследование имен атрибутов, но также и наследование значений атрибутов. Например, предположим, что все программисты расположены в одном отделе "E". В случае SQL3 требуется вставить значение "E" во все строки таблицы "programmers". Относительно Zigzag, мы можем быть удовлетворены, если установим "E" только для объекта "Programmer".
$readTable() < Employee ; Department Programmer; E >;
Чтобы проверить наследование значения "E", введем следующий Zigzag запрос, переводимый как "имена работников отдела Е".