Опишем теперь примитив структурирования для спецификации обобщений в реляционных моделях. В мы ввели типы collection (коллекция) и aggregate (агрегат), после чего объявили отношение R следующим образом:
var R: collection of aggregate [keylist] s1: {key} R1
... sn: {key} Rn
end
В этом объявлении "список ключей" (keylist) содержит селекторы для ключевых доменов R. Заключение ключевого слова "key" (ключ) в фигурные скобки показывает, что оно не всегда обязано присутствовать. Теперь R может фактически рассматриваться как имя родового объекта. Для того чтобы определить позицию родового объекта R в родовой иерархии, нам необходимо лишь специфицировать его потомков в этой иерархии. Это дает возможность полагать, что структура, показанная на рис. 5, является уместной для определения отношений Кодда.
var R: generic
sk1 = (R11, ..., R1p1); ... skm = (Rm1, ..., Rmpm) of aggregate [keylist] s1: {key} R1; ... sn: {key} Rn
end
где:
Рис. 5. Родовая структура
Мы используем термин родовой (generic), а не менее точный термин коллекция (collection) с тем, чтобы указать, что определяeтся родовой объект. Родовая структура одновременно специфицирует две абстракции:
до Rn и
Домены с селекторами от sk1 до skm являются доменами образов.