Object Oriented Databases Bringing objects into databases

Preview:

Citation preview

Object Oriented Databases

Bringing objects into databases

An object database schema

ADDRESS Street: String City: String

PERSON SS#: StringName: StringAddress: Address

EMPLOYEE ISA PERSON

Salary: IntegerBoss: EmployeeDepartments: {Department}

COMPANY Name: String Head quarters: Address Departments: {Department} CEO: Employee

DEPARTMENT Name: String Office: Address Boss: Employee Employees: {Employee}

An object database query

SELECT e.NameFROM e in EMPLOYEE, d in

DEPARTMENTWHERE e in d.EmployeesAND e.Address.City = d.Office.City

Object database concepts

Simple values

Complex values

Objects

TypesClasses

25 #11‘bo’

{25,7} [a:1,b:2]

<#11, {25,7}>

PersonCar [ss#:String,age:Integer]

Simple and complex values

A is the set of all attributes

O is the set of all object identifiers

D is the union of integers, reals, strings, and booleans

Elements in O U D are called simple values

Elements of the form [A1:w1, …, An:wn] are tuple values

where Ai is an attribute and wi a value

Elements of the form {w1, …, wn} are set values

A complex value is a tuple value or a set value

Objects

An object is a pair

(o, w)

o is an object identifierw is a value

Examples of objects

A = {SS#, Name, Address, Main office, Departments, CEO}O = {#11, #12, #13, #14, #21, #31, #41}

(#11, [SS#: ‘420101-1100’, Name: ‘Bo Ek’, Address: [Street: ‘Storg. 4’, Town: ‘Karlstad’]])

(#14,[Name: ‘Acme’,Head office: [Street: ‘Storg. 12’, Town: ‘Karlstad’],Departments: {#21, #31, #41},CEO: #11])

Value and object equality

Value equalityTwo objects are equal if their values are equal(o1, w1) = (o2, w2) iff w1 = w2

Object equalityTwo objects are equal if their object identifiers are the same(o1, w1) = = (o2, w2) iff o1 = o2

Surface and deep equality

Surface equality: equality without substituting object references

Deep equality: equality after substituting object references by values

w1 = [A: o1]

w2 = [A: o2]

(o1, w)

(o2, w)

where o1 o2

w1 not surface equal to w2w1 deep equal to w2

Surface and deep equality

w1 = [A: o1, B: 25]

w2 = [A: o2, B: o3]

w3 = [A: o2, B: o4]

(o1, 25)

(o2, 50)

(o3, 25)

(o4, o1)

w1 deep equal to w2 ?

w1 deep equal to w3?

w2 deep equal to w3?

Types and classes

Intuitions:Values with the same structure are described

by a typeObject identifiers for similar objects are

grouped into a class

A class can be associated with a type to specify the structure of the objects of the class

A class can be used as a type for typing references between objects

Types

Let K be a set of classes.

Base types: {integer, float, string, boolean}Reference types: KTuple types: elements of the form

[A1:T1, …, An:Tn], where Ai is an attribute and Ti en typa type

Set types: {T}, where T is a type

A complex type is a tuple type or a set type

An example type

K = {Car, Company, City}

EMPLOYEESS#: IntegerName: StringLives in: CityWorks at: CompanyOwns: {Car}

Base type

Reference type

Set type

Tuple type

Object database schema

An object database schema consists of:

A set of class names KFor each k in K, a type that specifies

the structure of k

Object database extension

Given an object database schema S, an extension for S associates each k in K with a set of object identifiers

An example extension

Animal

Mammal

Bird

Dog

K

#1

#2

#3

#4

#5#1

#1

#2

#2

#3 #4

#5

Types, classes, objects,and values

Person

Bil

#11

#12

#22

#21

[Regnr: String, Färg: String, Ägare: Person]

[Pnr: String, Namn: String, Lön: Integer]

[Pnr: ‘5501010415’, Namn: ‘Per Svensson’, Lön: 25000]

[Regnr: ‘ABC123’, Färg: ‘Röd’, Ägare: #11]

K Types

WO

Query languages

AllmängiltighetDeklarativitetOptimerbarhetSlutenhetUttryckskraftUtvidgningsbarhet

Two simple queries

SELECT aFROM a in EMPLOYEEWHERE Salary > 20000

SELECT SS#, NameFROM EMPLOYEEWHERE Salary > 20000

Path expressions (dot notation)

SELECT NameFROM CompanyWHERE Head_quarters.City = “London”

SELECT Name, Head_quarters.StreetFROM CompanyWHERE Head_quarters.City = “London”

Sets in queries

What does this query mean?

SELECT cFROM c in COMPANYWHERE CEO IN

(SELECT e FROM e in EMPLOYEE WHERE Employee.Address.City =

“Lund”)

Sets in queries

SELECT c.NameFROM c in COMPANYWHERE c.Departments.Office.City =

{“London”, “Lund”}

Sets and dot notation

SELECT c.Departments.Employees.Salary

FROM c in COMPANY

c.Departments.Employees.Salary

{f1, f2, f3}

{a1, a2} {a3, a4} {a5}

100 200 150 100 150{f1, f2, f3}

{{a1, a2}, {a3, a4}, {a5}} ?

{a1, a2, a3, a4, a5} ?

Sets and dot notation

SELECT c.Departments.Employees.SalaryFROM c in COMPANY

{f1, f2, f3}

{a1, a2} {a3, a4} {a5}

100 200 150 100 150

Answer: {100, 150, 200}

Exercises

Which employees work at the same departments as their bosses?

Which (pair of) employees work at the same departments?

Which companies do not have any employee living in London?

In which companies do all employees live in London?

Exercises

Which employees work only at departments that are situated in London?

Which employees do not work at a department in London?

These queries become harder if the attribute “Departments” is removed. Try to write the queries also without this attribute.

Exercises

In which companies are there employees who live in cities where the company does not have any department?

In which companies does the boss of each employee live in the same city as the employee?

Which employees work at the same departments as their bosses?

Which (pair of) employees work at the same departments?

Which companies do not have any employee living in London?

In which companies do all employees live in London?

Which employees work only at departments that are situated in London?

Which employees do not work at a department in London?

In which companies are there employees who live in cities where the company does not have any department?

In which companies does the boss of each employee live in the same city as the employee?

Which employees work at the same departments as their bosses?

SELECT e.NameFROM e in EMPLOYEEWHERE e.Departments =

e.Boss.Departments

Which (pair of) employees work at the same departments?

SELECT e1.Name, e2.NameFROM e1 in EMPLOYEE, e2 in EMPLOYEEWHERE e1.Departments = e2.Departments

Which companies do not have any employee living in London?

SELECT cFROM c in COMPANYWHERE ‘London’ NOT IN

c.Departments.Employees.Address.City

In which companies do all employees live in London?

SELECT cFROM c in COMPANYWHERE

c.Departments.Employees.Address.City = {‘London’}

Which employees work only at departments that are situated in London?

SELECT e.NameFROM e IN EMPLOYEEWHERE NOT EXISTS

(SELECT d FROM DEPARTMENTWHERE e in d.EmployeesAND d.Office.City <> ‘London’)

SELECT e.NameFROM e in EMPLOYEEWHERE e.Departments.Office.City = {‘London’}

Which employees do not work at a department in London?

SELECT e.NameFROM e in EMPLOYEEWHERE NOT EXISTS

(SELECT d FROM d in DEPARTMENTWHERE e in d.EmployeesAND d.Office.City = ‘London’)

SELECT e.NameFROM e in EMPLOYEEWHERE ‘London’ NOT IN e.Departments.Office.City

In which companies are there employees who live in cities where the company does not have any department?

SELECT cFROM c IN COMPANYWHERE c.Departments.Employees.Address.City MINUS

c.Departments.Office.City <> Ø

In which companies does the boss of each employee live in the same city as the employee?

SELECT cFROM c in COMPANYWHERE NOT EXISTS

(SELECT eFROM e in EMPLOYEEWHERE e IN c.Departments.EmployeesAND e.Boss.Address.City <> e.Address.City)

Which employees work at a department in a city where they do not live?

SELECT e.NameFROM e in EMPLOYEE, d in DEPARTMENTWHERE e in d.EmployeesAND d.Office.City <> e.Address.City

Which employees live in the same city as (at least one of) their boss(es)?

SELECT e.NameFROM e in EMPLOYEE, d in DEPARTMENTWHERE e in d.Employees AND e.Address.City =

d.Boss.Address.City

Recommended