0% found this document useful (0 votes)
51 views

Chapter 21: Object Database Standards, Languages, and Design

This document contains example answers mapping a company entity relationship schema to object database language classes and queries in object query language. The answers define classes for employees, departments, projects, hours worked, and dependents with attributes and relationships. Example queries are provided to retrieve information based on these classes and relationships.

Uploaded by

GemmedaMidakso
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
51 views

Chapter 21: Object Database Standards, Languages, and Design

This document contains example answers mapping a company entity relationship schema to object database language classes and queries in object query language. The answers define classes for employees, departments, projects, hours worked, and dependents with attributes and relationships. Example queries are provided to retrieve information based on these classes and relationships.

Uploaded by

GemmedaMidakso
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 3

Chapter 21: Object Database Standards, Languages, and Design 1

CHAPTER 21: OBJECT DATABASE STANDARDS, LANGUAGES, AND DESIGN

Answers to Selected Exercises

21.15 Map the COMPANY ER schema of Figure 3.2 into ODL classes. Include appropriate
methods for each class.

Answer:

class Employee
( extent employees
key ssn
{
attribute struct name {string fname, string mname, string lname}
name;
attribute string ssn;
attribute date bdate;
attribute enum Gender{M, F} sex;
attribute string address;
attribute float salary;
attributte Employee supervisor;
relationship Department works_for inverse Department::
has_employees;
relationship set<Hours_Worked> work inverse Hours_Worked:: work_by;
short age();
void give_raise(in float raise);
void change_address(in string new_address);
void reassign_emp(in string new_dname) raises(dname_not_valid);
};
class Department
( extent departments
key dname, dnumber
{
attribute string dname;
attribute short dnumber;
attribute struct Dept_Mgr {Employee manager, date startdate}
mgr;
attribute set<string> locations;
relationship set<Employee> has_employees inverse Employee:: works_for;
relationship set<Project> controls inverse Project:: controlled_by;
short no_of_employees();
void add_emp(in string new_essn) raises (essn_not_valid);
void add_proj(in string new_pname) raises (pname_not_valid);
void change_manger(in string new_mssn; in date startdate) raises
(mssn_not_valid);
};
class Project
( extent projects
key pname, pnumber
{
attribute string pname;
attribute short pnumber;
attributte string location;

Pre-Publication Material: This is draft manuscript yet to be copy edited or paged.


Copyright AWL2004
2 Chapter 21: Object Database Standards, Languages, and Design

relationship Department controlled_by inverse Department:: controls;


relationship set<Hours_Worked> work_at inverse Hours_Worked:: work_on;
void reassign_proj(in string new_dname) raises(dname_not_valid);
};
class Hours_Worked
( extent hours_worked
{
attributte float hours;
relationship Employee work_by inverse Employee:: work;
relationship Project work_on inverse Project:: work_at;
void change_hours(in float new_hours);
};
class Dependent
( extent dependents
{
attribute string name;
attribute date bdate;
attribute enum Gender{M, F} sex;
attribute string relationship;
attributte Employee suporter;
short age();
};

12.18 Queries from exercises 7.18 (and 8.13) specified in OQL.

(a) Retrieve the names of employees in department 5 who work more than 10 hours per
week on the 'ProductX' project.
select e.name.fname
from e in employee
where e.works_for .dnumber = 5 and
( 'Product X' in
(select h.work_on.pname
from h in e.work
where h.hours > 10));

(b) List the name of employees who have a dependent with the same first name as
themselves.
select k.suporter.fname
from k in dependents
where k.name = k.suporter.fname

(c) List the name of employees who are all directly supervised by 'Franklin Wong'.
select e.fname
from e in employee
where e.supervisor.name.fname = 'Franklin' and e.supervisor.name.lname = 'Wong';

(d) For each project, list the project name and the total hours per week (by all employees)
spent on that project.
select projname, tot_hours : sum (select p.h.hours from p in partition)
from h in hours_worked
group by projname: w.work_on.pname;

(e) Retrieve the names of all employees who work on every project.

Pre-Publication Material: This is draft manuscript yet to be copy edited or paged.


Copyright AWL2004
Chapter 21: Object Database Standards, Languages, and Design 3

select e.name.fname
from e in employee
where for all g in (select p.pnumber
from p in projects)
: g.pnumber in (select e.work.work_on.pnumber);

(f) Retrieve the names of all employees who do not work on any project.
select e.name.fname
from e in employee
where for all g in (select p.pnumber
from p in projects)
: g.pnumber not in (select e.work.work_on.pnumber);

(g) For each department, retrieve the department name, and the average salary of
employees
working in that department.
select deptname, avgsal : avg (select p.e.salary from p in partition)
from e in employee
group by deptname: e.works_for.dname;

(h) Retrieve the average salary of all female employees.


avg (select e.salarey
from e in employee
where e.sex = 'M');

Pre-Publication Material: This is draft manuscript yet to be copy edited or paged.


Copyright AWL2004

You might also like