Bancos de Dados Orientados a Objetos
Introdução A tecnologia tradicional de BD tem sido utilizada com sucesso para o desenvolvimento de aplicações comerciais tradicionais. Essa tecnologia, entretanto, não atende adequadamente aplicações mais complexas, tais como aplicações médicas e científicas, geoprocessamento, projetos de engenharia (CAD/CAM), telecomunicações, etc. Essas novas aplicações de bancos de dados são caracterizadas por possuírem: dados de estrutura complexa (ex.: dados multimídia, espaciais, geográficos, etc.); transações de mais longa duração; necessidade de operações específicas.
Introdução SGBDs orientados a objetos e relacionais estendidos (objeto-relacionais) foram desenvolvidos para atender esses requisitos SGBDs orientados a objetos permitem definir a estrutura de objetos complexos e as operações que podem ser executadas sobre eles SGBDs objeto-relacionais incorporam facilidades oriundas do paradigma de orientação a objetos (definição de novos tipos e operações) ao modelo de dados relacional SQL3 incorpora várias dessas características
Introdução Nova tecnologia é decorrente da popularização do paradigma de orientação a objetos Modelagem (UML) X Codificação (Java, C++, SmallTalk, Delphi) Armazenamento (DB2, Oracle, Informix) Necessidade de padronização ODMG
Introdução Encapsulamento Herança Integridade Segurança Controle de Versões Transações Identidade de Objetos Orientação a Objetos Polimorfismo Tecnologia de Bancos de Dados Armazenamento Consultas Recuperação de Falhas Persistência Concorrência
Conceitos Básicos Objeto Um objeto tipicamente possui dois componentes: estado (valor) comportamento (operações) Objetos numa linguagem de programação OO existem apenas durante a execução de um programa objetos transientes Objetos em um banco de dados OO podem existir permanentemente (armazenados) objetos persistentes Correspondência entre objetos do mundo real e objetos armazenados no banco de dados identificadores (object identifiers OIds)
Conceitos Básicos Identidade dos Objetos Cada objeto armazenado no BD possui um identificador único Object Identifier (OId) Um OId é imutável, ou seja, o OId de um determinado objeto nunca é alterado, indepedentemente do seu estado OIds são gerados internamente pelo sistema Teoricamente, valores também deveriam ser vistos como objetos e, portanto, possuir um OId SGBDs OO, entretanto, permitem a representação de objetos e valores
Conceitos Básicos Estrutura de um Objeto Objetos podem ser construídos a partir de outros objetos objetos complexos Um objeto pode ser representado como uma tripla (i, c, v), onde i é um OId, c é um construtor de tipo e v é o valor corrente (estado) do objeto O modelo orientado a objetos inclui vários construtores de tipo
Conceitos Básicos Construtores de Tipo Usados para definir a estrutura dos objetos básicos: átomo, tupla, conjunto outros: lista, arranjo, multi-conjunto Objetos complexos são construídos a partir de objetos mais simples através da aplicação sucessiva desses construtores
Conceitos Básicos Construtores de Tipo Átomo (atom) usado para representar valores atômicos de um tipo básico (inteiro, booleano, caractere, string, etc) objetos atômicos não possuem OId Tupla (tuple) <a 1 :i 1, a 2 :i 2,..., a n :i n >
Conceitos Básicos Construtores de Tipo Conjunto (set) {i 1, i 2,...,i 3 } Outros construtores lista (list) [i 1, i 2,...,i 3 ] multi-conjunto (bag) arranjo (array) Os tipos derivados dos construtores conjunto, lista, multi-conjunto e arranjo são denominados de coleções
Conceitos Básicos Exemplos de Objetos o 1 = (i 1, átomo, Houston ) o 2 = (i 2, átomo, Bellaire ) o 3 = (i 3, átomo, Sugarland ) o 4 = (i 4, átomo, 5) o 5 = (i 5, átomo, Research ) O 6 = (i 6, átomo, 1998-05-22 ) o 7 = (i 7,conjunto,{i 1, i 2, i 3 }) o 8 = (i 8, tupla, <DNAME:i 5, DNUMBER:i 4, MGR:i 9, LOCATIONS:i 7, EMPLOYEES:i 10, PROJECTS:i 11 >) o 9 = (i 9, tupla, <MANAGER:i 12, MANAGER_SDATE: i 6 >) o 10 = (i 10,conjunto,{i 12, i 13, i 14 })...
Conceitos Básicos Exemplos de Objetos o 1 = (i 1,conjunto,{ Bellaire, Houston, Sugarland }) o 2 = (i 2,tupla,<DNAME: Research, DNUMBER:5, MGR:i 3, LOCATIONS:i 1, EMPLOYEES:i 4, PROJECTS:i 5 >)
Definição de Tipos de Objeto define type Employee: tuple (fname: string; minit: char; lname: string; ssn: string; date: Date; address: string; sex: char; salary: float; supervisor: Employee; dept: Department); define type Date: tuple (year: integer; month: integer; day: integer)
Definição de Tipos de Objeto define type Department: tuple (dname: string; dnumber: integer; mgr: tuple (manager: Employee; startdate: Date); locations: set(string); employees: set(employee); projects: set(project));
Encapsulamento Semelhante ao conceito de tipo abstrato de dados em linguagens de programação permite definir o comportamento de um tipo de objeto em função das operações que podem ser aplicadas a objetos daquele tipo Separação de interesses: interface: visível externamente, define o nome e os argumentos de cada operação (assinatura) implementação: escondida internamente, inclui a definição das estruturas de dados e a implementação das operaçãoes (métodos) Implementação especificada através de uma linguagem de programação (flexibilidade) Forma de independência de dados lógica: pode-se alterar a implementação sem que as aplicações (usuários) sejam afetadas
Classes O termo classe é geralmente usado para se referir à definição de um tipo de objeto juntamente com a suas operações uma classe define as características (atributos e métodos) de um conjunto de objetos que compartilham o mesmo comportamento Um objeto é uma instância de uma classe Operações típicas: Construtor - criar um novo objeto da classe Destrutor - remover um objeto da classe Outras operações podem ser declaradas para modificar os objetos de uma classe ou recuperar dados sobre eles
Definição de Classes define class Employee: type tuple (fname: string; minit: char; lname: string; ssn: string; date: Date; address: string; sex: char; salary: float; supervisor: Employee; dept: Department); operations age: integer; create_emp: Employee; destroy_emp: boolean; end Employee;
Definição de Classes define class Department: type tuple (dname: string; dnumber: integer; mgr: tuple (manager: Employee; startdate: Date); locations: set(string); employees: set(employee); projects: set(project)); operations no_of_emps: integer; create_dept: Department; destroy_dept: boolean; assign_emp(e:employee): boolean; remove_emp(e:employee): boolean; end Department;
Notação de Ponto (Dot Notation) Operações d.no_of_emps d.destroy_dept Atributos d.dnumber d.mgr.startdate e.dept.dname
Hierarquias de Tipos (ou Classes) Permite a definição de novos tipos (classes) a partir de tipos (classes) já existentes Este novo tipo (classe), chamado de sub-tipo (sub-classe), herda todos os atributos e operações do tipo (classe) já existente, chamado super-tipo (ou super-classe) Um sub-tipo pode estender (ou especializar) um supertipo acrescentando novas características (atributos ou operações) Exemplos: PERSON: Name, Address, Birthdate, Age, SSN EMPLOYEE subtype-of PERSON: Salary, HireDate, Seniority STUDENT: subtype-of PERSON: Major, GPA
Objetos Complexos Não-estruturados O SGBD não conhece a sua estrutura, apenas a aplicação que os utiliza é capaz de interpretá-los Não fazem parte dos tipos de dados básicos Ex.: imagens, textos longos (BLOBs binary large objects) Operações específicas podem ser definidas usando-se o conceito de tipos abstratos de dados Estruturados Construídos a partir de aplicações sucessivas dos construtores de tipos
Outras Características Polimorfismo Objetos ou operações possuem mais de um comportamento ou significado, dependendo do contexto sobrecarga semântica Exemplo: operador + Herança múltipla e herança seletiva Versões Necessárias em muitas aplicações (ex., engenharia de software, CAD/CAM, etc.) Não é uma característica da tecnologia OO
Padrão para SGBDOOs Ausência de modelo de dados comum Grande atividade experimental e de desenvolvimento Inexistência de um padrão para SGBDOOs limitava a sua utilização de forma ampla Pequena portabilidade Baixa interoperabilidade Falta de referência para comparação de produtos
ODMG Object Data Management Group Consórcio de desenvolvedores de SGBDOOs Criação de um padrão para SGBDOOs - ODMG 2.0: Modelo de objetos Object Definition Language (ODL) Object Query Language (OQL) Ligações com C++, Java e SMALLTALK
Modelo de Objetos Modelo em que se baseiam as linguagens ODL e OQL Provê tipos, construtores de tipos e demais conceitos para especificação de esquemas para BDOO Componentes básicos: Objetos - estado (valor) e identificador (OId) Literais - valor Objetos podem ser: Atômicos Estruturados (struct) Coleções (set, bag, list, array, dictionary)
Modelo de Objetos Interface X Classe: Interface - não instanciável especifica o comportamento (operações) dos objetos Classe - instanciável usada para se criar objetos das aplicações Herança de uma única classe (EXTENDS) Herança múltipla apenas no caso de comportamento (operações), portanto só podem ser especificadas a partir de interfaces
ODL Object Definition Language Independente de qualquer linguagem de programação usada para se especificar objetos (classes e interfaces) Definições de classes e interfaces podem conter: atributos (attributes) relacionamentos (relationships) operações (assinaturas dos métodos) Herança de classes definida através da palavra-chave extends Herança de interfaces definida via operador : Instâncias de classes definidas através da palavra-chave extent
ODL - Object Definition Language Definição de uma Classe class Student extends Person ( extent students key ssn ) { attribute string class;... relationship Department majors_in inverse Department::has_majors; relationship set<grade> completed_sections inverse Grade::student; void change_major(in string dname) raises(dname_not_valid);... };
Exemplo de um Esquema ODMG class Employee ( extent employees key ssn ) { attribute struct Name {string fname, string minit, string lname} name; attribute string ssn; attribute enum Gender{M,F} sex; attribute string address; attribute float salary; attribute date birthdate; attribute set<struct Assgmt{Project proj, float hours}> works_on; relationship set<dependent> dependents {order_by birthdate}; relationship Employee supervisor; relationship Department works_for inverse Department::workers; };
Exemplo de um Esquema ODMG class Department ( extent departments key number ) { attribute string name; attribute short number; attribute set<string> locations; attribute date manager_start_date; relationship Employee manager; relationship set<employee> workers inverse Employee::works_for; boolean add_worker (in Employee worker) raises (already_works_here); boolean remove_worker (in Employee worker) raises (not_found); boolean change_manager (in Employee manager); };
Exemplo de um Esquema ODMG class Project ( extent projects key number ) { attribute string name; attribute short number; attribute string location; relationship Department controlling_department; relationship set<employee> workers; boolean add_worker (in Employee worker) raises (already_works_here); boolean remove_worker (in Employee worker) raises (not_found); };
Exemplo de um Esquema ODMG class Dependent ( extent dependents ) { attribute string name; attribute Gender sex; attribute date birthdate; attribute string relationship; }; class Assignment ( extent assignments ) { attribute float hours; relationship Employee employee inverse Employee::works_on; relationship Project project inverse Project::has_workers; };
Exemplo de um Esquema ODMG Com a classe Assignment definida, os seguintes relacionamentos devem inseridos nas classes Employee e Project: class Employee ( extent employees key ssn ) {... relationship set<assignment> works_on inverse Assignment::employee; } class Project ( extent projects key number ) {... relationship set<assignment> has_workers inverse Assignment::project; }
OQL Object Query Language Sintaxe semelhante a SQL select... from... where select e.name.lname from e in employees where e.works_for.dname = Research Consultas requerem pontos de entrada (entry points) objetos persistentes employees (extensão da classe Employee) rsdepartment (nome dado a um objeto do tipo Department) variáveis de interação e in employeees Expressões de caminho especificam um caminho (path) para objetos e atributos e.name e.works_for.dname rsdepartment.manager.salary
Resultado das Consultas em OQL select d.dname from d in departments where d.college = Engineering ; retorna um resultado do tipo bag<string> departments; retorna um resultado do tipo set<department> csdepartment.chair; retorna um resultado do tipo Faculty csdepartment.chair.rank; retorna como resultado um string
Exemplos de Consulta em OQL Posição (rank) dos professores do departamento de computação select f.rank from f in csdepartment.has_faculty; select distinct f.rank from f in csdepartment.has_faculty; select f.rank from f in faculty where f.works_in.dname = Computer Science ;
Exemplos de Consultas OQL Nome e respectivos títulos dos estudantes de pósgraduação orientados pelo chefe do departamento de computação select struct (name:struct (last_name: s.name.lname, first_name: s.name.fname), degrees(select struct (deg: d.degree, yr: d.year, from d in s.degrees)) college: d.college) from s in csdepartment.chair.advises; from s in grad_student where s.advisor in select d.chair from d in departments where d.dname = Computer Science ;
Exemplos de Consultas OQL Nome dos estudantes seniores do curso de computação com seus respectivos coeficientes de aproveitamento acadêmico select struct (last_name: s.name.lname, from s in students first_name: s.name.fname), gpa: s.gpa) where s.majors_in.dname = Computer Science and s.class = senior order by gpa desc, last_name asc, first_name asc; operação relacionamento
Outras Facilidades OQL Consultas parametrizadas (similares ao conceito de visão no modelo relacional) define has_minors(deptname) select s from s in students where s.minors_in.dname = deptname; has_minors( Computer Science ); Funções de agregação count (s in has_minors( Computer Science )); avg (select s.gpa from s in students where s.majors_in.dname = Computer Science and s.class = senior );
Outras Facilidades OQL Expressões de pertinência e quantificação select s.name.lname, s.name.fname from s in students where Database Systems I in (select c.cname from c in s.completed_sections.of_courses); for all g in (select s from s in grad_students where s.majors_in.dname = Computer Science ) : g.advisor in csdepartment.has_faculty; Exists g in (select s from s in grad_students where s.majors_in.dname = Computer Science ) : g.gpa = 4;
Ligações (Bindings) para o Padrão ODMG 2.0 Descrevem como as construções do modelo de objetos ODMG são mapeadas para construções das linguagens de programação requer ainda uma linguagem específica para manipulação de objetos (OML Object Manipulation Language) Propostas para três linguagens: C++ Java Smalltalk
SGBDOOs Concordantes com o Padrão ODMG 2.0 O2 (Java e C++) ObjectStore (Java, C++ e ActiveX) Objectivity (Java, C++ e SmallTalk) Poet Object Store (Java e C++) Versant (Java e C++)
Referências Elsmari, R. & Navathe, S.B. Fundamentals of Database Systems. 3ª Ed., Addison Wesley, Reading, MA, 2000. (Cap. 11 e 12) Cattel, R. (ed.) The Object Database Standard - ODMG 2.0. Morgan Kaufmann, San Francisco, CA, 1997.