Title: Object database standards, languages and design
1Lecture 3
- Object database standards, languages and design
2Development 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
3Development 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
4Why a Standard?
- Portability from one vendor (system) to another
- Interoperability between systems based on
different vendor products easier
5Object 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
6Unified Modeling Language (UML)
- Consortium of vendors including
- 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
7ODMG 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)
8ODMG 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 lttgt
- Bag lttgt
- List lttgt
- Array lttgt
- Dictionary ltk, vgt
- Specified by interface
9Interface Definitions from ODMG Object Model
10ExamplesObject inherited by all
objectsDate structured literal
interface Object boolean same_as(in Object
other_object) Object copy() void delete()
Date is subtype of Object (i.e., inherits from).
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.
11See text for the following examples
- Structured Literals
- Time
- Timestamp
- Interval
- Collection Objects
- Collection
- Iterator
- Set
- Bag
- List
- Array
- Association
- Dictionary
12Object 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-gtsame_as(p) true if p is the same as o
13Class Definition Examples Employee
Class Employee ( extent all_employees key ssn
) attribute string name attribute string ssn
attribute date birthdate attribute enum
GenderM,F sex relationship Department works_fo
r inverse Departmenthas_emps void reassign_e
mp(in string new_dname) raises(dname_not_valid)
Note that both works_for and inverse
relationship, has_emps, are specified.
14Class Definition Examples Department
Class Department ( extent all_departments key dna
me, dnumber ) attribute string dname attribute
short dnumber attribute struct
Dept_MgrEmployee manager, date
startdate mgr attribute setltstringgt
locations attribute struct Projs string
projname, time weekly_hours projs relations
hip setltEmployeegt has_emps inverse
Employeeworks_for void add_emp(in string
new_ename) raises(ename_not_valid) void change_m
anager(in string new_mgr_name) in date
startdate)
15Relationships works_for and has_emps
betweenEmployee and Department
Class Employee relationship Department
works_for inverse Departmenthas_emps
Class Department relationship set ltEmployeegt
has_emps inverse Employeeworks_for
16COMPANY database in ODL Diagrammore details on
page 680 in book
works_for
employs
supervisee
EMPLOYEES
DEPARTMENT
manages
managed_by
located_at
supervisor
manager
controls
department
has_ dependents
MANAGE_DEPT
works _on
has_ departments
LOCATION
employee
has_ projects
WORKS_ON_PROJECT
project
controlled _by
dependent_of
located_at
employees_on
DEPENDENT
PROJECT
17Object Types Interfaces vs. Classes
- Terminology
- Behavior operations
- State properties (attributes relationships)
- 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
18Inheritance 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
19Example Person UNIVERSITY Database
Class Person ( extent persons key ssn
) attribute struct Pname string fname, string
mname, string iname name attribute string s
sn attribute date birthdate attribute enum
GenderM,F sex attribute struct Address short
no, string street, , short zip short age()
20Example Faculty UNIVERSITY Database
Class Faculty extends Person ( extent faculty) a
ttribute string rank attribute float salary at
tribute string office attribute string
phone relationship Department works_in invers
e Departmenthas_faculty relationship setltGradS
tudentgt advises inverse GradStudent
advisor relationship setltGradStudentgt on_commi
ttee_of inverse GradStudent committee void g
ive_raise(in float raise) void promote(in
string new_rank)
Extends inheritance from Person
21Example other classes UNIVERSITY Database
- Student
- extends Person
- Degree
- GradStudent
- extends Student
- Department
- Course
- Section
- CurrSection
- extends Section
- Grade
22Factory Objects
- Used to generate individual objects
- Examples
- ObjectFactory
- DateFactory
- DatabaseFactory
- Include new() operation
Interface ObjectFactory Object new()
23Database Factory
interface Database void open(in string
database_name) void close() void bind( in any
some_object, in string some_object) Object u
nbind(in string name) Object lookup(in string
object_name) raises(ElementNotFound)
interface DatabaseFactory Database new()
24Object Database Standards, Languages, and
DesignPart II Object Query language (OQL)
25Object 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.
26Movies Example Movies, Stars, Studios
Star name address street city
Movie title year length / in minutes
/ filmTypecolor, blackAndWhite lengthInHours s
tarNames otherMovies
stars starredIn 1.. 1..
ownedBy owns 1.. 1..1
Studio name
Set of stars of this movie.
Other movies by star of this movie.
27Movies 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 setltStargt
stars inverse Star starredIn relationship S
tudio ownedBy inverse Studio owns float
lengthInHours() raises(noLengthFound) starName
s(out setltStringgt) otherMovies(in Star, out
set(ltMoviegt) raises(noSuchStar)
28Movies Example, contd.
Class Star (extent Stars key name) attribute
string name attribute struct Addr string
street, string city address relationship setltM
oviegt starredIn inverse Movie stars
Class Studio (extent Studios key
name) attribute string name relationship setltM
oviegt owns inverse Movie ownedBy
29Specifying 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.
30Path 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.
31Select-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.
Must name all components in hierarchy, i.e.,
Movies stars.
No duplicates, therefore set.
32Select-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 Stars
- where s1.addr s2.addr and s1.name lt s2.name
- Set containing names of stars of Disney movies,
using subquery. - Select distinct s.name
- from (select m
- from m in Movies
- where m.ownedBy.name Disney) dm,
- 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
Result is set of structs.
Bag of all Disney movies.
Stars in those movies.
List of Movies in ascending order
33Select-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
34Select-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 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) gt
120
Want bag of lengths, not set.
35Views
- View returning Set containing movies by studio
studio. - define moviesFromStudio(studio) as
- select m
- from m in Movies
- where m.ownedBy.name studio
Do not need distinct m, since Movies is already
a set.
36Returning 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)
37Find names of those who starred in all Disney
movies.
Star name address street city
Movie title year length / in minutes
/ filmTypecolor, blackAndWhite lengthInHours s
tarNames otherMovies
stars starredIn 1.. 1..
ownedBy owns 1.. 1..1
Studio name
Idea select s.name from s in Star where for
all DisneyMovies exists ds in
DisneyMovies.stars with same name
38Find names of those who starred in all Disney
moviesFirst attempt.
- 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)
- 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)
39Find names of those who starred in all Disney
moviesUsing 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
- 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)
40Find names of those who starred in all Disney
moviesUsing the Movie.starNames function.
- Change
- starNames(out setltStringgt) to a function
- setltStringgt starNames()
- 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()