Title: Object Oriented Database Management
1Object Oriented Database Management
2Outline
- Motivation
- Embedding SQL in host language
- Object Data Model
- Persistent Programming Languages
- Object Query Language
- Object-orientation in SQL
3Motivation of ODBMSs
Application data structures
Copy and translation
Transparent ODBMS data transfer
Relational representation
RDBMS
- Complex objects in emerging DBMS applications
cannot be effectively represented as records in
relational model. - Representing information in RDBMSs requires
complex and inefficient conversion into and from
the relational model to the application
programming language - ODBMSs provide a direct representation of objects
to DBMSs overcoming the impedance mismatch
problem
4Embedded SQL
- Access to database from a general purpose
programming language required since - Not all queries can be expressed in SQL --e.g.,
recursive queries cannot be written in SQL. - Non declarative actions -- e.g., printing reports
cannot be done from SQL. - General purpose language in which SQL is embedded
called host language. - SQL structures permitted in host language called
embedded SQL.
C compiler
SQL library calls C
SQL C
pre- compiler
.o file
loader
SQL library
object code
Embedded SQL Compilation
5Embedded SQL
- SQL commands embedded in the host programming
language - Data exchanged between host language and DBMS
using cursors - SQL query passed from host language to DBMS which
computes the answer set - A cursor can be viewed as a pointer into the
answer set - DBMS returns the cursor to the programming
language - Programming language can use the cursor to get a
record at a time access to materialized answer.
6Example of Embedded SQL
- dname toy
- raise 0.1
- EXEC SQL SELECT dnum into dnum
- FROM Department
- WHERE dname dname
- EXEC SQL DECLARE Emp CURSOR FOR
- SELECT FROM Employee
- WHERE dno dnum
- FOR UPDATE
- EXEC SQL OPEN Emp
- EXEC SQL FETCH Emp INTO E.ssn, E.dno, E.name,
E.sal - while (SQLCODE 0)
- EXEC SQL UPDATE WHERE CURRENT OF CURSOR
- SET sal sal (1 raise)
- EXEC SQL FETCH Emp INTO E.ssn, E.dno,
E.name, E.sal -
- EXEC SQL CLOSE CURSOR Emp
- / SQL embedded in C to read the list of
employees who work for
7Object Oriented Database Management
- Object Oriented databases have evolved along two
different paths - Persistent Object Oriented Programming Languages
(pure ODBMSs) - Start with an OO language (e.g., C, Java,
SMALLTALK) which has a rich type system - Add persistence to the objects in programming
language where persistent objects stored in
databases - Object Relational Database Management Systems
(SQL3 Systems) - Extend relational DBMSs with the rich type system
and user-defined functions. - Provide a convenient path for users of relational
DBMSs to migrate to OO technology - All major vendors (e.g., Informix, Oracle)
will/are supporting features of SQL3.
8Object Database Management Group (ODMG)
- Special interest group to develop standards that
allow ODBMS customers to write portable
applications - Standards include
- Object Model
- Object Specification Languages
- Object Definition Language (ODL) for schema
definition - Object Interchange Format (OIF) to exchange
objects between databases - Object Query Language
- declarative language to query and update database
objects - Language Bindings (C, Java, Smalltalk)
- Object manipulation language
- Mechanisms to invoke OQL from language
- Procedures for operation on databases and
transactions
9Object Model
- Object
- observable entity in the world being modeled
- similar to concept to entity in the E/R model
- An object consists of
- attributes properties built in from primitive
types - relationships properties whose type is a
reference to some other object or a collection of
references - methods functions that may be applied to the
object.
10Class
- Similar objects with the same set of properties
and describing similar real-world concepts are
collected into a class. - Class definition
- interface Employee
- attribute string name
- attribute integer salary
- attribute date date-of-birth
- attribute integer empid
- relationship Projects works-for
- inverse Projectsteam
- age-type age()
-
Interface Projects attribute string
name attribute integer projid relationship
Employee team inverse Emplolyee works-for int
number-of-employees()
11Class Extents
- For each ODL class, an extent may be declared.
- Extent is the current set of objects belonging to
the class. - Similar notion to the relation in the relational
model. - Queries in OQL refer to the extent of a class and
not the class directly. - interface Employee (extent Emp-set)
- attribute string name
- attribute integer salary
- attribute date date-of-birth
- attribute integer empid
- relationship Projects works-for
- inverse Projectsteam
- age-type age()
12Subclasses and Inheritance
- A class can be declared to be a subclass of
another class. - Subclasses inherit all the properties
- attributes
- relationships
- methods
- from the superclass.
- Interface Married-Employee Employees
- string spouse-name
-
- Substitutability any method of superclass can be
invoked over objects of any subclass (code reuse)
13Class Hierarchy
person
student
employee
undergrad
student assistant
grad
staff
faculty
RA
TA
14Multiple Inheritance
- A class may have more than one superclass.
- A class inherits properties fromeach of its
superclasses. - There is a potential of ambiguity -- variable
with same name inherited from two superclasses - flag and error
- rename variable
- choose one
15Object Identity
- Each object has an identity which it maintains
even if some or all of its attributes change. - Object identity is a stronger notion of identity
than in relational DBMSs. - Identity in relational DBMSs is value based
(primary key). - Identity in ODBMSs built into data model
- no user specified identifier is required
- OID is a similar notion as pointer in programming
language - Object identifier (OID) can be stored as
attribute in object to refer to another object. - References to other objects via their OIDs can
result in a containment hierarchy - Note containment hierarchy different from class
hierarchy
16Containment Hierarchy
bicycle
wheel
brake
gear
frame
rim
spoke
tire
lever
pad
Links in containment hierarchy should be read as
is-part-of instead of is-a
17Persistence
- Objects created may have different lifetimes
- transient allocated memory managed by the
programming language run-time system. - E.g., local variables in procedures have a
lifetime of a procedure execution - global variables have a lifetime of a program
execution - persistent allocated memory and stored managed
by ODBMS runtime system. - Classes are declared to be persistence-capable or
transient. - Different languages have different mechanisms to
make objects persistent - creation time Object declared persistent at
creation time (e.g., in C binding) (class must
be persistent-capable) - persistence by reachability object is persistent
if it can be reached from a persistent object
(e.g., in Java binding) (class must be
persistent-capable).
18Persistent Object-Oriented Programming Languages
- Persistent objects are stored in the database and
accessed from the programming language. - Classes declared in ODL mapped to the programming
language type system (ODL binding). - Single programming language for applications as
well as data management. - Avoid having to translate data to and from
application programming language and DBMS - efficient implementation
- less code
- Programmer does not need to write explicit code
to fetch data to and from database - persistent objects to programmer looks exactly
the same as transient objects. - System automatically brings the objects to and
from memory to storage device. (pointer
swizzling).
19Disadvantages of ODBMS Approach
- Low protection
- since persistent objects manipulated from
applications directly, more changes that errors
in applications can violate data integrity. - Non-declarative interface
- difficult to optimize queries
- difficult to express queries
- But ..
- Most ODBMSs offer a declarative query language
OQL to overcome the problem. - OQL is very similar to SQL and can be optimized
effectively. - OQL can be invoked from inside ODBMS programming
language. - Objects can be manipulated both within OQL and
programming language without explicitly
transferring values between the two languages. - OQL embedding maintains simplicity of ODBMS
programming language interface and yet provides
declarative access.
20OQL Example
- interface Employee
- attribute string name
- relationship
- setof(Projects) works-for
- inverse Projectsteam
-
Interface Projects attribute string
name relationship setof(Employee) team inverse
Emplolyee works-for int number-of-employees()
Select number-of-employees() From Employee e,
e.works-for where name sharad
Find number of employees working on each project
sharad works on
21Migration of RDBMSs towards OO Technologies
- SQL3 standard incorporates OO concepts in the
relational model. - A row in a table considered as an object
- SQL3 allows a type to be declared for tuples
(similar to class in ODBMSs) - Relations are collection of tuples of a row type
(similar to extent in ODBMSs) - Rows in a relation can refer to each other using
a reference type (similar to object identity in
ODBMSs) - A reference can be dereferenced to navigate among
tables - Attributes in a relation can belong to abstract
data types - Methods and functions (expressed in SQL as well
as host programming language) can be associated
with abstract data types
22SQL-3 Example
- CREATE ROW TYPE Employee-type
- name CHAR(30)
- works-for REF(Projects-type)
-
- CREATE ROW TYPE Projects-type
- name CHAR(30)
- team setof(REF(Employee-type))
-
- CREATE TABLE Emp OF TYPE Employee-type
- CREATE TABLE Project of TYPE Project-type
- Select works-for --gt name
- From Emp
- Where name sharad
Return name of the project sharad works for
23OQL
- CMSC-461
- Database Management Systems
24OQL -- Motivation
- Relational languages suffer from impedance
mismatch when we try to connect them to
conventional languages like C or C. - The data models of C and SQL are radically
different, e.g. C does not have relations, sets,
or bags as primitive types C is tuple-at-a-time,
SQL is relation-at-a-time.
25OQL -- Motivation (II)
- OQL is an attempt by the OO community to extend
languages like C with SQL-like,
relation-at-a-time dictions. - OQL is query language paired with
schema-definition language ODL.
26OQL Types
- Basic types strings, ints, reals, etc., plus
class names. - Type constructors
- Struct for structures.
- Collection types set, bag, list, array.
- Like ODL, but no limit on the number of times we
can apply a type constructor. - Set(Struct()) and Bag(Struct()) play special
roles akin to relations.
27OQL Uses ODL as its Schema-Definition Portion
- For every class we can declare an extent name
for the current set of objects of the class. - Remember to refer to the extent, not the class
name, in queries.
28Example
- interface Bar (extent Bars) attribute
string name attribute string addr
relationship SetltSellgt beersSold inverse
Sellbar
29Example (II)
- interface Beer (extent Beers) attribute
string name attribute string manf
relationship SetltSellgt soldBy inverse
Sellbeer
30Example (III)
- interface Sell (extent Sells) attribute
float price relationship Bar bar
inverse BarbeersSold relationship Beer
beer inverse BeersoldBy
31Path Expressions
- Let x be an object of class C.
- If a is an attribute of C, then x.a the value
of a in the x object. - If r is a relationship of C, then x.r the value
to which x is connected by r. - Could be an object or a collection of objects,
depending on the type of r. - If m is a method of C , then x.m (...) is the
result of applying m to x.
32Examples
- Let s be a variable whose type is Sell.
- s.price the price in the object s.
- s.bar.addr the address of the bar mentioned in
s . - Note cascade of dots OK because s.bar is an
object, not a collection.
33Example of Illegal Use of Dot
- b.beersSold.price, where b is a Bar object.
- Why illegal? Because b.beersSold is a set of
objects, not a single object.
34OQL Select-From-Where
- SELECT lt list of values gtFROM lt list of
collections and typical members gtWHERE lt
condition gt
35OQL Select-From-Where (II)
- Collections in FROM can be1. Extents.2.
Expressions that evaluate to a collection. - Following a collection is a name for a typical
member, optionally preceded by AS.
36Example
- Get the menu at Joe's. SELECT s.beer.name,
s.price FROM Sells s WHERE s.bar.name
"Joe's Bar" - Notice double-quoted strings in OQL.
- Result is of type Bag(Struct(name string,
price float))
37Example
- Another way to get Joe's menu, this time focusing
on the Bar objects. SELECT s.beer.name,
s.price FROM Bars b, b.beersSold s WHERE
b.name "Joe's Bar" - Notice that the typical object b in the first
collection of FROM is used to help define the
second collection. - Typical usage if x.a is an object, you can
extend the path expression if x.a is a
collection, you use it in the FROM list.
38Tailoring the Type of the Result
- Default bag of structs, field names taken from
the ends of path names in SELECT clause. - Example SELECT s.beer.name, s.price FROM
Bars b, b.beersSold s WHERE b.name "Joe's
Bar"has result type Bag(Struct( name
string, price real))
39Rename Fields
- Prefix the path with the desired name and a
colon. - Example SELECT beer s.beer.name, s.price
FROM Bars b, b.beersSold s WHERE b.name
"Joe's Bar"
40Change the Collection Type
- Use SELECT DISTINCT to get a set of structs.
41Example
- SELECT DISTINCT s.beer.name, s.priceFROM Bars b,
b.beersSold sWHERE b.name "Joe's Bar" - Use ORDER BY clause to get a list of structs.
42Example
- joeMenu SELECT s.beer.name, s.priceFROM Bars
b, b.beersSold sWHERE b.name "Joe's Bar"ORDER
BY s.price ASC - ASC ascending (default) DESC descending.
- We can extract from a list as if it were an
array, e.g. cheapest joeMenu1.name
43Subqueries
- Used mainly in FROM clauses and with quantifiers
EXISTS and FORALL.
44Example Subquery in FROM
- Find the manufacturers of the beers served at
Joe's.SELECT b.manfFROM (SELECT s.beerFROM
Sells sWHERE s.bar.name "Joe's Bar") b
45Quantifiers
- Boolean-valued expressions for use in
WHERE-clauses.FOR ALL x IN lt collection gt
lt condition gtEXISTS x IN lt collection gt lt
condition gt - The expression has value TRUE if the condition is
true for all (resp. at least one) elements of the
collection.
46Example
- Find all bars that sell some beer for more than
5. SELECT b.name FROM Bars b WHERE
EXISTS s IN b.beersSold s.price gt 5.00 - ProblemHow would you find the bars that only
sold beers for more than 5?
47Example
- Find the bars such that the only beers they sell
for more than 5 are manufactured by Pete's.
SELECT b.name FROM Bars b WHERE FOR ALL
be IN ( SELECT s.beer
FROM b.beersSold s WHERE s.price gt
5.00 ) be.manf "Pete's"
48Extraction of Collection Elements
- a) A collection with a single member Extractthe
member with ELEMENT.
49Example
- Find the price Joe charges for Bud and put the
result in a variable p. - p ELEMENT( SELECT s.price
FROM Sells s WHERE s.bar.name "Joe's
Bar" AND s.beer.name "Bud" )
50Extraction of Collection Elements (II)
- b) Extracting all elements of a collection, one
at a time - 1. Turn the collection into a list.
- 2. Extract elements of a list with ltlist namegti.
51Example
- Print Joe's menu, in order of price, with beers
of the same price listed alphabetically.
52Example (II)
- L SELECT s.beer.name, s.price FROM
Sells s WHERE s.bar.name "Joe's Bar"
ORDER BY s.price, s.beer.nameprintf("Beer\tPrice
\n\n")for(I 1 I lt COUNT(L) i)
printf("s\tf\n", Li.name, Li.price )
53Aggregation
- The five operators avg, min, max, sum, count
apply to any collection, as long as the operators
make sense for the element type.
54Example
- Find the average price of beer at Joe's.
- x AVG( SELECT s.price FROM
Sells s WHERE s.bar.name "Joe's Bar"
) - Note coercion result of SELECT is technically a
bag of 1-field structs, which is identified with
the bag of the values of that field.
55Grouping
- Recall SQL grouping, for exampleSELECT bar,
AVG(price)FROM SellsGROUP BY bar - Is the bar value the "name" of the group, or the
common value for the bar component of all tuples
in the group?
56Grouping (II)
- In SQL it doesn't matter, but in OQL, you can
create groups from the values of any function(s),
not just attributes. - Thus, groups are identified by common values, not
\name." - Example group by first letter of bar names
(method needed).
57Outline of OQL Group-By
Collection Defined by FROM, WHERE
Group by values of function(s)
Collection with function values and partition
Terms from SELECT clause
Output collection
58Example
- Find the average price of beer at each
bar.SELECT barName, avgPrice AVG( SELECT
p.s.price FROM partition p)FROM Sells
sGROUP BY barName s.bar.name
59Example (II)
- 1. Initial collection Sells.
- But technically, it is a bag of structs of the
form Struct(s s1)Where s1 is a Sells
object. Note, the lone field is named s in
general, there are fields for all of the tuple
variables in the FROM clause.
60Example (II)
- 2. Intermediate collection
- One function s.bar.name maps Sells objects s to
the value of the name of the bar referred to by
s. - Collection is a set of structs of
typeStructbarName string, partition Setlt
Structs Sell gt
61Example (III)
- For exampleStruct(barName "Joe's Bar",
partition s1,, sn)where s1,, sn are all
the structs with one field, named s, whose value
is one of the Sells objects that represent Joe's
Bar selling some beer.
62Example (IV)
- 3. Output collection consists of beer-average
price pairs, one for each struct in the
intermediate collection. - Type of structures in the outputStructbarName
string, avgPrice real
63Example (V)
- Note that in the subquery of the SELECT
clauseSELECT barName, avgPrice AVG( SELECT
p.s.price FROM partition p)We let p range
over all structs in partition. Each of these
structs contains a single field named s and has a
Sells object as its value. Thus, p.s.price
extracts the price from one of the Sells tuples. - Typical output structStruct(barName "Joe's
Bar", avgPrice 2.83)
64Another, Less Typical Example
- Find, for each beer, the number of bars that
charge a "low" price ( 2.00) and a "high" price (
4.00) for that beer. - Strategy group by three things
- 1. The beer name,
- 2. A boolean function that is true iff the price
is low. - 3. A boolean function that is true iff the price
is high.
65The Query
- SELECT beerName, low, high, count
COUNT(partition)FROM Beers b, b.soldBy sGROUP
BY beerName b.name, low s.price lt 2.00, high
s.price gt 4.00
66The Query (II)
- 1. Initial collection Pairs (b s), where b is a
beer, and s is a Sells object representing the
sale of that beer at some bar. - Type of collection members Structb Beer, s
Sell
672. Intermediate collection
- Quadruples consisting of a beer name, booleans
telling whether this group is for high, low, or
neither prices for that beer, and the partition
for that group. - The partition is a set of structs of the
typeStructb Beer, s SellA typical
valueStruct(b "Bud" object, s a Sells object
involving Bud)
682. Intermediate collection (II)
- Type of quadruples in the intermediate
collectionStructbeerName string,low
boolean,high boolean,partition SetltStructb
Beer,s Sellgt
692. Intermediate collection (III)
- BeerName low high partition
- Bud TRUE FALSE SlowBud
FALSE TRUE ShighBud
FALSE FALSE Smid - where Slow Shigh, and Smid are the sets of
beer-sells pairs (b s) where the beer is Bud and
s has, respectively, a low ( 200), high ( 400)
and medium (between 2.00 and 4.00) price. - Note the partition with low high TRUE must
be empty and will not appear.
703. Output collection
- The first three components of each group's struct
are copied to the output, and the last
(partition) is counted.The resultbeerName low
high countBud TRUE
FALSE 27Bud FALSE TRUE
14Bud FALSE FALSE 36
71SQL3 Objects
72Objects in SQL3
- OQL extends C with database concepts, while
SQL3 extends SQL with OO concepts.
73Objects in SQL3 (II)
- Ullman's personal opinion the relation is so
fundamental to data manipulation that retaining
it as the core, as SQL3 does, is "right." - Systems using the SQL3 philosophy are called
object-relational.
74Objects in SQL3 (III)
- All the major relational vendors have something
of this kind, allowing any class to become the
type of a column. - Informix Data Blades
- Oracle Cartridges
- Sybase Plug-Ins
- IBM/DB2 Extenders
75Two Levels of SQL3 Objects
- 1. For tuples of relations "row types."
- 2. For columns of relations "types."
- But row types can also be used as column types.
76References
- Row types can have references.
- If T is a row type, then REF(T) is the type of a
reference to a T object. - Unlike OO systems, refs are values that can be
seen by queries.
77Example of Row Types
- CREATE ROW TYPE BarType ( name CHAR(20)
UNIQUE, addr CHAR(20)) - CREATE ROW TYPE BeerType ( name CHAR(20)
UNIQUE, manf CHAR(20))
78Example of Row Types (II)
- CREATE ROW TYPE MenuType ( bar REF(BarType),
beer REF(BeerType), price FLOAT)
79Creating Tables
- Row-type declarations do not create tables.
- They are used in place of element lists in CREATE
TABLE statements. - Example
- CREATE TABLE Bars OF TYPE BarType
- CREATE TABLE Beers OF TYPE BeerType
- CREATE TABLE Sells OF TYPE MenuType
80Dereferencing
- A ? B the B attribute of the object referred to
by reference A. - Example
- Find the beers served by Joe.SELECT beer -gt
nameFROM SellsWHERE bar -gt name 'Joe''s Bar'
81OID's as Values
- A row type can have a reference to itself.
- Serves as the OID for tuples of that type.
- ExampleCREATE ROW TYPE BarType ( name
CHAR(20), addr CHAR(20), barID
REF(BarType))CREATE TABLE Bars OF TYPE
BarTypeVALUES FOR barID ARE SYSTEM GENERATED
82OID's as Values (II)
- VALUES... clause forces the barID of each tuple
to refer to the tuple itself.Name addr barID
Joe's Maple St.
83Example Using References as Values
- Find the menu at Joe's.SELECT Sells.beer-gtname,
Sells.priceFROM Bars, SellsWHERE Bars.name
'Joe''s Bar' AND Bars.barID Sells.bar
84ADT's in SQL3
- Allows a column of a relation to have a type that
is a "class," including methods. - Intended application data that doesn't fit
relational model well, e.g., locations, signals,
images, etc. - The type itself is usually a multi-attribute
tuple.
85ADT's in SQL3 (II)
- Type declarationCREATE TYPE ltnamegt (
attributes method declarations or
definitions) - Methods defined in a PL/SQL-like language.
86Example
CREATE TYPE BeerADT ( name CHAR(20), manf
CHAR(20),FUNCTION newBeer( n CHAR(20), m
CHAR(20))RETURNS BeerADT b BeerADT /
local decl. /BEGIN b BeerADT() /
built-in constructor / b.name n
b.manf m RETURN bENDFUNCTION
getMinPrice(b BeerADT) RETURNS FLOAT )
87Example (II)
- getMinPrice is declaration only newBeer is
definition. - getMinPrice must be defined somewhere where
relation Sells is available.
88Example (III)
- FUNCTION getMinPrice(b BeerADT) RETURNS
FLOAT p FLOATBEGIN SELECT MIN(price)
INTO p FROM Sells WHERE beer-gtname
b.name RETURN pEND
89Built-In Comparison Functions
- We can define for each ADT two functions EQUAL
and LESSTHAN that allow values of this ADT to
participate in WHERE clauses involving , lt, etc.
90Example A "Point" ADT
- CREATE TYPE Point ( x FLOAT, y FLOAT,FUNCTION
EQUALS( p Point, q Point )RETURNS
BOOLEANBEGIN IF p.x q.x AND p.y q.y
THEN RETURN TRUE ELSE RETURN
FALSEEND
91Example A "Point" ADT (II)
- FUNCTION LESSTHAN( p Point, q Point )
RETURNS BOOLEANBEGIN IF p.x gt q.x THEN
RETURN FALSE ELSIF p.x lt q.x THEN
IF p.y lt q.y THEN RETURN TRUE
ELSE RETURN FALSE ELSE / p.x q.x
IF p.y lt q.y THEN RETURN
TRUE ELSE RETURN FALSEEND)
92Using the Comparison Functions
- Here is a query that computes the lower convex
hull of a set of points. - Assumes MyPoints(p) is a relation with a single
column p of type Point. - SELECT pFROM MyPointsWHERE NOT p gt ANY MyPoints
93Using the Comparison Functions (II)