For illustration purposes, we use the OPM schema represented below:
FOREIGN_DATABASES { ("PUBLICATIONS", "database for course references") }
CONTROLLED VALUE CLASS DepartmentNames { ("Computer Science", 1), ("Engineering", 2) }
CONTROLLED VALUE CLASS Rank { "Professor", "Associate Professor", "Assistant Professor" }
CONTROLLED VALUE CLASS Salary { 30000-150000 }
OBJECT CLASS PERSON
ID: ssn
ATTRIBUTE ssn: [1,1] INTEGER
ATTRIBUTE name: [0,1] VARCHAR(50)
OBJECT CLASS FACULTY
isa* PERSON
ATTRIBUTE teaches (course, inDepartment):
set-of [0,] ([0,1] COURSE, [0,1] DEPARTMENT)
course inverse of COURSE.taughtBy
DELETE CASCADES
ATTRIBUTE department: [0,1] DEPARTMENT inverse of DEPARTMENT.faculty
DELETE NULLIFIES
ATTRIBUTE rank: [0,1] Rank
VERSIONED
ATTRIBUTE salary: [0,1] Salary
DERIVED OBJECT CLASS PROFESSOR
DERIVATION: subclass of FACULTY
CONDITION: [FACULTY] rank = "Professor";
OBJECT CLASS STUDENT
isa* PERSON
VERSIONED
ATTRIBUTE attends (course, inDepartment):
set-of [0,] ([0,1] specific COURSE,
[0,1] DEPARTMENT)
OBJECT CLASS COURSE
ID: courseNumber
ATTRIBUTE courseNumber: [1,1] CHAR(10)
ATTRIBUTE name: [0,1] VARCHAR(80)
ATTRIBUTE taughtBy: [0,1] FACULTY
VERSIONED
ATTRIBUTE references: set-of [0,] REFERENCE
OBJECT CLASS DEPARTMENT
ID: name
ATTRIBUTE name: [1,1] DepartmentNames
ATTRIBUTE faculty: set-of [0,] FACULTY inverse of FACULTY.department
FOREIGN OBJECT CLASS REFERENCE
DESCRIPTION: "References in PUBLICATIONS database"
DATABASE: "PUBLICATIONS"
ALIAS: "Publication"