Object Database Standards, Languages, and Design

Download Report

Transcript Object Database Standards, Languages, and Design

Lecture 3
Object database standards, languages
and design
CIS 671
OODBs
1
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
2
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 objectoriented systems
CIS 671
OODBs
3
Why a Standard?
• Portability from one vendor (system) to
another
• Interoperability between systems based on
different vendor products easier
CIS 671
OODBs
4
Object Data Management Group
(ODMG)
• ODMG-93 or ODMG 1.0; ODMG 2.0 (1997)
• Parts
–
–
–
–
CIS 671
Object model
Object definition model (ODL)
Object query language (OQL)
Bindings to OO programming languages
OODBs
5
Unified Modeling Language (UML)
• Consortium of vendors including




DEC
HP
IBM
Unisys




I-Logix
Intellicorp
MCI Systemhouse
TI




Microsoft
Icon Computing
Rational Software
Oracle
• UML 0.9 (1996); UML 1.1 (1997)
• Unified as to
- Differences in Modeling Languages
- Differences in Perspectives
CIS 671
OODBs
6
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
7
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
8
Interface Definitions from
ODMG Object Model
• Object Data Language
– ODL
CIS 671
OODBs
9
Examples:
Object – inherited by
all objects
Date – structured
literal
interface Object {
…
boolean same_as(in Object other_object);
Object
copy();
void
delete();
}
Date is subtype of Object (i.e., inherits from).
Operations
are inherited
by userdefined
objects.
CIS 671
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);
…
}
OODBs
10
See text for the following examples:
• Structured Literals
• Collection Objects
– Time
– Timestamp
– Interval
– Collection
•
•
•
•
•
Iterator
Set
Bag
List
Array
– Association
– Dictionary
CIS 671
OODBs
11
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
12
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) ;
}
CIS 671
OODBs
Note that both
“works_for”
and inverse
relationship,
“has_emps”,
are specified.
13
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
14
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
15
COMPANY database in ODL Diagram
more details on page 680 in book
works_for
supervisee
employs
EMPLOYEES
DEPARTMENT
managed_by
manages
supervisor
manager
has_
dependents
works
_on
department
MANAGE_DEPT
located_at
controls
has_
departments
LOCATION
employee
has_
projects
WORKS_ON_PROJECT
project
dependent_of
DEPENDENT
controlled
_by
located_at
employees_on
PROJECT
CIS 671
OODBs
16
Object Types: Interfaces vs. Classes
• Terminology
– Behavior: operations
– State: properties (attributes & relationships)
• Interface (e.g. Date)
• Class (e.g. Employee)
– Abstract behavior,
specification via operation
signatures
– Noninstantiable (i.e. cannot
have object matching
description)
– Used via inheritance
(behavior inheritance “:”)
CIS 671
OODBs
– Abstract behavior
– Abstract state
– Instantiable
17
Inheritance Relationships:
Behavior vs. Extends
• Behavior Inheritance
• EXTENDS Inheritance
– Supertype must be
interface
– Subtype may be
interface or class
– Denoted by “:”
– Multiple inheritance
permitted
CIS 671
– Inherit state and
behavior among classes
• Both supertype and
subtype must be classes
– Multiple inheritance not
permitted
– Specified by extends
keyword
OODBs
18
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
19
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);
}
CIS 671
OODBs
Extends
inheritance
from
Person
20
Example: other classes
UNIVERSITY Database
• Student
extends Person
• Degree
• GradStudent
extends Student
• Department
CIS 671
• Course
• Section
• CurrSection
extends Section
• Grade
OODBs
21
Factory Objects
• Used to generate individual objects
• Examples
– ObjectFactory
– DateFactory
– DatabaseFactory
• Include new() operation
Interface ObjectFactory {
Object
new();
}
CIS 671
OODBs
22
Database Factory
interface 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
23
Object Database Standards,
Languages, and Design
Part II: Object Query language
(OQL)
CIS 671
OODBs
24
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
25
Movies Example: Movies, Stars, Studios
Movie
title
year
length /* in minutes */
filmType:{color,
blackAndWhite}
lengthInHours
starNames
otherMovies
Star
name
starredIn
address
street
1..*
city
stars
1..*
ownedBy
owns Studio
1..1 name
1..*
Set of stars of this movie.
Other movies by star of this movie.
CIS 671
OODBs
26
Movies Example: Movies, Stars, Studios
class 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
27
Class Star
(extent Stars
{
key name)
Movies Example,
contd.
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;
};
CIS 671
OODBs
28
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
29
Path Expressions
Assume 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
30
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.
Might contain duplicates, therefore bag.
select s.name
from m in Movies, s in m.stars
Must name all components in hierarchy,
where m.title = “Casablanca”;
i.e., Movies & stars.
• 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”;
CIS 671
OODBs
No duplicates,
therefore set.
31
Select-From-Where Expressions, II
• Pairs of stars living at the same address.
select distinct struct(star1: s1, star2: s2)
Result is set of structs.
from s1 in Stars, s2 in Stars
where s1.addr = s2.addr and s1.name < s2.name;
• Set containing names of stars of Disney movies, using subquery.
Select distinct s.name
Bag of all Disney
from (select m
movies.
from m in Movies
where m.ownedBy.name = “Disney”) dm,
Stars in those movies.
s in dm.stars;
• Set of all Disney movies, ordering results by length and title.
select m
from m in Movies
where m.ownedBy.name = “Disney”
order by m.length, m.title;
CIS 671
OODBs
List of Movies
in ascending
order
32
Select-From-Where Expressions, III
• Set containing names of stars of Disney movies, using
existential quantifier.
select distinct s.name
from s in Stars
where 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.name
from s in Stars
where for all m in s.starredIn :
m.ownedBy.name = “Disney”;
CIS 671
OODBs
33
Select-From-Where Expressions, IV
• Average length of all movies.
Want bag of lengths, not set.
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 Movies
group 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.length
from p in partition)
from m in Movies
group by std: m.studio, yr: m.year
having max(select p.m.length from partition p) > 120;
CIS 671
OODBs
34
Views
•View returning Set containing movies by studio studio.
define moviesFromStudio(studio) as
select m
from m in Movies
where m.ownedBy.name = studio;
CIS 671
OODBs
Do not need
“distinct m”, since
Movies is already a
set.
35
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
36
Find names of those who starred in all Disney movies.
Movie
title
year
length /* in minutes */
filmType:{color,
blackAndWhite}
lengthInHours
starNames
otherMovies
stars
1..*
ownedBy
1..*
Star
name
starredIn
address
street
1..*
city
owns Studio
1..1 name
Idea: select s.name from s in Star
where for all DisneyMovies
exists ds in DisneyMovies.stars
with same name;
CIS 671
OODBs
37
Find names of those who starred in all Disney movies:
First attempt.
1. Using “if p then q”.
select s.name
from s in Star
where 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.name
from s in Star
where for all m in Movie :
(m.ownedBy.name != ‘Disney’
or
exists s1 in m.stars :
s1.name = s.name);
CIS 671
OODBs
38
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 as
select m
from m in Movies
where m.ownedBy.name = ‘Disney’;
3. Query for stars using the DisneyMovies view.
select s.name
from s in Star
where for all dm in DisneyMovie :
(exists s1 in dm.stars :
s1.name = s.name);
CIS 671
OODBs
39
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.name
from s in Star
where for all dm in DisneyMovie :
s.name in dm.starNames();
CIS 671
OODBs
40