cis 671oodbs1 lecture 3 object database standards, languages and design

40
CIS 671 OODBs 1 Lecture 3 Object database standards, languages and design

Upload: hope-skinner

Post on 25-Dec-2015

227 views

Category:

Documents


0 download

TRANSCRIPT

CIS 671 OODBs 1

Lecture 3

Object database standards, languages and design

CIS 671 OODBs 2

Development of Object-based Systems

• Object-Oriented Database Systems– An alternative to relational systems– Application domains where objects play central

role– Heavily influenced by object-oriented

programming languages– An attempt to add DBMS functionality to a

programming language environment

CIS 671 OODBs 3

Development of Object-based Systems - cont.

• Object-Relational Database Systems– An attempt to extend relational databases

• Broader set of applications

– Provide bridge between relational and object-oriented systems

CIS 671 OODBs 4

Why a Standard?

• Portability from one vendor (system) to another

• Interoperability between systems based on different vendor products easier

CIS 671 OODBs 5

Object Data Management Group(ODMG)

• ODMG-93 or ODMG 1.0; ODMG 2.0 (1997)

• Parts– Object model– Object definition model (ODL)– Object query language (OQL)– Bindings to OO programming languages

CIS 671 OODBs 6

Unified Modeling Language (UML)• Consortium of vendors including

DEC HP IBM Unisys

I-Logix Intellicorp MCI Systemhouse TI

• UML 0.9 (1996); UML 1.1 (1997)

• Unified as to

- Differences in Modeling Languages

- Differences in Perspectives

Microsoft Icon Computing Rational Software Oracle

CIS 671 OODBs 7

ODMG Object Model• Literal

– State (or value) {constant}– No OID– May have complex structure– Types of literals

• Atomic - Simple, e.g., 10.2

- Structured, e.g. Date (19, May, 2001)

• Collection, e.g. days of the week (Sun, Mon, …, Sat)

CIS 671 OODBs 8

ODMG Object Model• Object

– Identifier (OID)– Name (optional)– Lifetime (persistent or transitory)– Structure

• How constructed– Atomic– Collection: t a type, k a key, v a value

» Set <t>» Bag <t>» List <t>» Array <t>» Dictionary <k, v>

• Specified by interface

CIS 671 OODBs 9

Interface Definitions from ODMG Object Model

• Object Data Language– ODL

CIS 671 OODBs 10

Examples:Object – inherited by

all objectsDate – structured

literal

interface Object {…boolean same_as(in Object other_object);Object copy();void delete();

}

interface Date: Object {enum Weekday {Sunday, Monday, …, Saturday};enum Month {January, February, …, December};unsigned short year();unsigned short month();unsigned short day()…boolean is_equal(in Date other_Date);boolean is_greater(in Date other_Date);…

}

Operations are inherited by user-defined objects.

Date is subtype of Object (i.e., inherits from).

CIS 671 OODBs 11

See text for the following examples:

• Structured Literals– Time

– Timestamp

– Interval

• Collection Objects– Collection

• Iterator

• Set

• Bag

• List

• Array

– Association

– Dictionary

CIS 671 OODBs 12

Object Interfaces

• All objects inherit basic interface of Object using dot notation:– o.same_as(p) – true if p is the same as o– p = o.copy() – create copy p of object o– o.delete() – delete object o

• May also use arrow notation:– o->same_as(p) – true if p is the same as o

CIS 671 OODBs 13

Class Definition Examples:Employee

Class Employee( extent all_employees

key ssn ){ attribute string name;

attribute string ssn;attribute date birthdate;attribute enum Gender{M,F} sex;relationship Department works_for

inverse Department::has_emps;void reassign_emp(in string new_dname)

raises(dname_not_valid) ;}

Note that both “works_for” and inverse relationship, “has_emps”, are specified.

CIS 671 OODBs 14

Class Definition Examples:Department

Class Department( extent all_departments

key dname, dnumber ){ attribute string dname;

attribute short dnumber;attribute struct Dept_Mgr{Employee manager, date startdate}

mgr;attribute set<string> locations;attribute struct Projs {string projname, time weekly_hours}

projs;relationship set<Employee> has_emps inverse Employee::works_for; void add_emp(in string new_ename) raises(ename_not_valid);void change_manager(in string new_mgr_name) in date startdate);

}

CIS 671 OODBs 15

Relationships works_for and has_emps between

Employee and Department

Class Employee{…

relationship Department works_for inverse Department::has_emps;}

Class Department{…

relationship set <Employee> has_emps inverse Employee::works_for; }

CIS 671 OODBs 16

COMPANY database in ODL Diagrammore details on page 680 in book

EMPLOYEES

MANAGE_DEPT

DEPARTMENT

LOCATION

PROJECT

WORKS_ON_PROJECT

DEPENDENT

has_dependents

dependent_of

controls

controlled_by

has_projects

located_at

has_departments

located_at

works_for employs

employee

managerdepartment

project

works_on

employees_on

manages managed_by

supervisee

supervisor

CIS 671 OODBs 17

Object Types: Interfaces vs. Classes

• Interface (e.g. Date)– Abstract behavior,

specification via operation signatures

– Noninstantiable (i.e. cannot have object matching description)

– Used via inheritance (behavior inheritance “:”)

• Class (e.g. Employee)– Abstract behavior

– Abstract state

– Instantiable

• Terminology– Behavior: operations– State: properties (attributes & relationships)

CIS 671 OODBs 18

Inheritance Relationships: Behavior vs. Extends

• Behavior Inheritance– Supertype must be

interface

– Subtype may be interface or class

– Denoted by “:”

– Multiple inheritance permitted

• EXTENDS Inheritance– Inherit state and

behavior among classes• Both supertype and

subtype must be classes

– Multiple inheritance not permitted

– Specified by extends keyword

CIS 671 OODBs 19

Example: Person UNIVERSITY Database

Class Person( extent persons

key ssn ){ attribute struct Pname {string fname, string mname, string iname}

name;attribute string ssn;attribute date birthdate;attribute enum Gender{M,F} sex;attribute struct Address {short no, string street, …, short zip}short age();

}

CIS 671 OODBs 20

Example: Faculty UNIVERSITY Database

Class Faculty extends Person( extent faculty){ attribute string rank;

attribute float salary;attribute string office;attribute string phone;relationship Department works_in

inverse Department::has_faculty;relationship set<GradStudent> advises

inverse GradStudent ::advisor;relationship set<GradStudent> on_committee_of

inverse GradStudent ::committee;void give_raise(in float raise);void promote(in string new_rank);

}

Extends inheritance

from Person

CIS 671 OODBs 21

Example: other classes UNIVERSITY Database

• Student extends Person

• Degree• GradStudent

extends Student• Department

• Course• Section• CurrSection

extends Section• Grade

CIS 671 OODBs 22

Factory Objects• Used to generate individual objects

• Examples– ObjectFactory– DateFactory– DatabaseFactory

• Include new() operation

Interface ObjectFactory {Object new();

}

CIS 671 OODBs 23

Database Factoryinterface Database {

void open(in string database_name);void close();void bind( in any some_object,

in string some_object);Object unbind(in string name);Object lookup(in string object_name)

raises(ElementNotFound);}

interface DatabaseFactory {Database new();

}

CIS 671 OODBs 24

Object Database Standards, Languages, and Design

Part II: Object Query language (OQL)

CIS 671 OODBs 25

Object Query Language (OQL)• “Bring the best of SQL to the object world.”• Syntax similar to SQL• Plus additional features• Works with programming languages where

ODMG has defined bindings– Java, C++, Smalltalk– Returns object matching type system of that language– May implement class operations in these languages

• SQL3 – “Bring the best of the object-oriented world to the relational world.”

CIS 671 OODBs 26

Movietitleyearlength /* in minutes */filmType:{color,

blackAndWhite}lengthInHoursstarNamesotherMovies

Movies Example: Movies, Stars, Studios

Starnameaddress

streetcity

Studioname

stars starredIn

1..* 1..*

ownedBy owns

1..* 1..1

Set of stars of this movie.

Other movies by star of this movie.

CIS 671 OODBs 27

Movies Example: Movies, Stars, Studiosclass Movie

(extent Movies key (title, year)){ attribute string title;

attribute integer year;attribute integer length; /* in minutes */attribute enumeration (color, blackAndWhite) filmType;relationship set<Star> stars

inverse Star :: starredIn;relationship Studio ownedBy

inverse Studio :: owns;float lengthInHours() raises(noLengthFound);starNames(out set<String>);otherMovies(in Star, out set(<Movie>) raises(noSuchStar);

};

CIS 671 OODBs 28

Class Star(extent Stars key name)

{ attribute string name;attribute struct Addr;

{string street, string city} address;relationship set<Movie> starredIn

inverse Movie :: stars;};

Class Studio(extent Studios key name)

{ attribute string name;relationship set<Movie> owns

inverse Movie :: ownedBy;};

Movies Example,contd.

CIS 671 OODBs 29

Specifying data from ODB

• Path expression– Dot notation similar to structure in

programming language, – e.g., o.a attribute a of object o.

• Select-From-Where expression– Similar to SQL.– References are to data classes, not relations.

• Integrated directly into host language.

CIS 671 OODBs 30

Path ExpressionsAssume myMovie a host-language variable, value a Movie object.

• myMovie.length - length of the movie.• myMovie.lengthInHours() - real number, computed as

length in minutes. • myMovie.stars – set of Star objects related to myMovie

by relationship stars.• myMovie.starNames(myStars) – returns no value, sets

output variable myStars of method starNames to set of strings with names of the stars of the movie.

• myMovie.ownedBy.name – string that is name of studio owning myMovie.

CIS 671 OODBs 31

Select-From-Where Expressions, I• Year of the movie Gone with the Wind.

select m.year

from m in Movie

where m.title = “Gone with the Wind”;

• Bag containing names of stars of Casablanca.select s.name

from m in Movies, s in m.stars

where m.title = “Casablanca”;

• Set containing names of stars of Disney movies.select distinct s.name

from m in Movies, s in m.stars

where m.ownedBy.name = “Disney”;

Might contain duplicates, therefore bag.

No duplicates, therefore set.

Must name all components in hierarchy, i.e., Movies & stars.

CIS 671 OODBs 32

Select-From-Where Expressions, II• Pairs of stars living at the same address.

select distinct struct(star1: s1, star2: s2)from s1 in Stars, s2 in Starswhere s1.addr = s2.addr and s1.name < s2.name;

• Set containing names of stars of Disney movies, using subquery.Select distinct s.namefrom (select m

from m in Movieswhere m.ownedBy.name = “Disney”) dm, s in dm.stars;

• Set of all Disney movies, ordering results by length and title.select mfrom m in Movieswhere m.ownedBy.name = “Disney”order by m.length, m.title;

Result is set of structs.

List of Movies in ascending

order

Bag of all Disney movies.

Stars in those movies.

CIS 671 OODBs 33

Select-From-Where Expressions, III• Set containing names of stars of Disney movies, using

existential quantifier.select distinct s.namefrom s in Starswhere exists m in s.starredIn :

m.ownedBy.name = “Disney”;

• Set containing names of stars that have appeared only in Disney movies, using universal quantifier.

select distinct s.namefrom s in Starswhere for all m in s.starredIn :

m.ownedBy.name = “Disney”;

CIS 671 OODBs 34

Select-From-Where Expressions, IV• Average length of all movies.

Avg( select m.length from Movies m);

• Table of lengths of movies for each studio for each year.select std, yr, sumLength: sum( select p.m.length

from p in partition)from m in Moviesgroup by std: m.studio, yr: m.year;

• Table of lengths of movies for each studio for each year where studio produced at least one movie of over 120 minutes in that year.

select std, yr, sumLength: sum( select p.m.lengthfrom p in partition)

from m in Moviesgroup by std: m.studio, yr: m.yearhaving max(select p.m.length from partition p) > 120;

Want bag of lengths, not set.

CIS 671 OODBs 35

Views

•View returning Set containing movies by studio studio.define moviesFromStudio(studio) asselect mfrom m in Movieswhere m.ownedBy.name = studio;

Do not need “distinct m”, since Movies is already a

set.

CIS 671 OODBs 36

Returning a single element

• Bag or Set (if distinct included) normally returned.

• May want single element.

• Return Movie with name Casablanca.Element (select m

from m in Movies

where m.title = “Casablanca”);

CIS 671 OODBs 37

Find names of those who starred in all Disney movies.

Movietitleyearlength /* in minutes */filmType:{color,

blackAndWhite}lengthInHoursstarNamesotherMovies

Starnameaddress

streetcity

Studioname

stars starredIn

1..* 1..*

ownedBy owns

1..* 1..1

Idea: select s.name from s in Star where for all DisneyMovies

exists ds in DisneyMovies.starswith same name;

CIS 671 OODBs 38

Find names of those who starred in all Disney movies:First attempt.

1.Using “if p then q”.select s.namefrom s in Starwhere for all m in Movie :

(if m.ownedBy.name = ‘Disney’then exists s1 in m.stars :

s1.name = s.name);

2.Converting “if p then q” to “~p or q”.select s.namefrom s in Starwhere for all m in Movie :

(m.ownedBy.name != ‘Disney’or

exists s1 in m.stars :s1.name = s.name);

CIS 671 OODBs 39

Find names of those who starred in all Disney movies:Using a view of all Disney movies.

View returning Set of Disney movies.define DisneyMovies asselect mfrom m in Movieswhere m.ownedBy.name = ‘Disney’;

3. Query for stars using the DisneyMovies view.select s.namefrom s in Starwhere for all dm in DisneyMovie :

(exists s1 in dm.stars :s1.name = s.name);

CIS 671 OODBs 40

Find names of those who starred in all Disney movies:Using the Movie.starNames function.

Change – starNames(out set<String>) to a function

– set<String> starNames()

4. Query for stars using the DisneyMovies view and starNames() function.

select s.namefrom s in Starwhere for all dm in DisneyMovie :

s.name in dm.starNames();