Banco de Dados Objeto Relacional características Banco de Dados Objeto- Relacional (BDOR) Banco de dados relacional com extensões para manipulação de objetos e outras fatores de banco de dados orientado a objetos. Classes, Herança, Agregação, Tipos definidos pelo usuário,... Uso da SQL para acesso aos objetos Solange N. Alves de Souza 2 1
Banco de Dados Objeto- Relacional (BDOR) Permite especificar e utilizar Tipos Definidos pelo Usuário (TDU ou UDT User-Defined Type) da mesma forma que os tipos de dados pré-definidos. Tipos Definidos pelo Usuário que encapsulam estrutura interna (atributos). comportamento e A tabela convencional é estendida para permitir a referência de objetos (referência de tipos), UDTs e estruturas como domínio de colunas (Row type). uso de referências para representar conexões inter-objetos, isso torna consultas mais compactas que quando feitas com junção; Herança é implementada organizando todos os tipos em hierarquias; Utiliza os construtores set, list, multiset ou array para organizar coleções de objetos; Solange N. Alves de Souza 3 Estruturas de BDOR Tipo de objetos: Um tipo de objeto funciona como um molde para criação de objetos, através da atribuição de valores a essa estrutura de dados. Um tipo de objeto pode ser usado para: Criar um UDT Criar uma estrutura (row type) Criar tipos coleção (collection type) Criar uma tabela de objetos Solange N. Alves de Souza 4 2
Tipos de objetos Row Type 1. permite definir atributos multivalorados estrutura aninhada 2. define uma estrutura de tupla (registro) Fornecedores codfornec nomefornec endfornec Criando um tipo e uma tabela com atributos, cujo domínio é do tipo definido Row type TEnd rua nro cidade CEP Domínio do atributo é um tipo * Noção de agregação* Solange N. Alves de Souza 5 TEnd rua nro cidade CEP create type TEnd as object (rua varchar (20), nro numeric (4), cidade varchar(20), CEP numeric(9)); Solange N. Alves de Souza 6 3
PostGreSQL create type TEnd as ( rua varchar (20), nro numeric (4), cidade varchar(20), CEP numeric(9)); Create table Fornecedores( codfornec numeric (3), nomefornec varchar (30), endfornec TEnd); Solange N. Alves de Souza 7 Usando o tipo definido no PostgreSQL Fornecedores insert into fornecedores values (nextval('s_fornec'), 'estrela', row ('Dr. Camisão', 3,'SãoPaulo',21360055)); insert into fornecedores values (nextval('s_fornec'), 'estrela', ('Dr. Camisão', 3,'SãoPaulo',21360000)); update fornecedores set endfornec=('camisão', 3,'SãoPaulo',21360055) where codfornec=3 Solange N. Alves de Souza 8 4
Consultando a estrutura aninhada select * from fornecedores where (endfornec).cidade='osasco'; codfornec nomefornec 4 lua endfornec ("Dr Aragão",12,Osasco,550776210) 5 lua ("Dr Aragão",12,Osasco,550776210) select (endfornec).rua from fornecedores where (endfornec).cidade='osasco'; rua Dr Aragão Dr Aragão Solange N. Alves de Souza 9 Consultando atributos aninhados - mais Notação de ponto para navegação nos atributos que fazem parte da estrutura aninhada: select endfornec..rua from fornecedores where endfornec..cidade='osasco'; Não no PostgreSQL Solange N. Alves de Souza 10 5
Consultando... mais Removendo um tipo Drop type tend Podem haver campos cujo tipo seja TEnd Drop type tend cascade campos aninhados são removidos da tabela Solange N. Alves de Souza 11 Tipos de Objetos tipo coleção 1. Uma coleção é composta por elementos que podem ser de um tipo simples, ou uma UDT, ou row type. 2. Tipos coleção: sets, lists, arrays (coleção ordenada). Solange N. Alves de Souza 12 6
Exemplo - Array Coleção ordenada Sintaxe SQL99 (arrays de uma dimensão) NotaVenda número cliente data item: ARRAY (10) Qtd: ARRAY (10) Solange N. Alves de Souza 13 Usando o tipo ARRAY - exemplo create table notavenda ( numero numeric, cliente varchar(30), data date, item integer array[10], qtd_item integer array [10]); Tipo de dado simples Solange N. Alves de Souza 14 7
Inserindo dados insert into notavenda values (1, 'João Antônio', '10-10-2007', ARRAY[1,2,3], ARRAY[1,20,4]); numero data item qtd_item cliente 1 10/10/2007 {1,2,3} {1,20,4} João Antônio E se o elemento do array fosse do tipo row type ou UDT row type atributo e tipo de dado UDT atributos simpes e complexos e métodos Solange N. Alves de Souza 15 mais No PostgreSQL é possível criar arrays bi-dimensionais. create table notavenda2 ( numero numeric, cliente varchar(30), data date, item_e_qtd integer [10][10]); numero cliente data Item_e_qtd 1 João Antônio 10/10/2007 {{1,2,3}, {1,20,4}} Solange N. Alves de Souza 16 8
Outros tipos de coleções Alguns SGBDOR s suportam outros tipos de coleção: Informix List, Set e Multiset Oracle VARRAY (array variável cujos elementos podem ser objetos) NESTED TABLE (atributo cujo domínio é uma tabela aninhada) PostGreSQL Pode-se definir um atributo cujo domínio é uma tabela Solange N. Alves de Souza 17 Tipos de Objetos Criação de Tabelas de objetos Indicação do tipo a que pertence Várias tabelas podem ser do mesmo tipo create type TFornec as ( codfornec numeric (3), nomefornec varchar (30)) create table fornecedores of type TFornec; PostgreSQl não permite a criação de tabelas de tipos TFornec codfornec nomefornec endfornec Solange N. Alves de Souza 18 9
OID (Identificadores de Objetos) é o valor indicado por atributos de referência pode ser uma chave primária CREATE TABLE Fornecedores OF TYPE TFornec REF IS codfornec PRIMARY KEY; Solange N. Alves de Souza 19 OID - continua pode ser definido pelo usuário ou pelo sistema CREATE TABLE Produtos OF TYPE TProd REF IS codprod USER GENERATED; atributo definido pelo usuário, mas seu valor é controlado pelo sistema (OID) CREATE TABLE Produtos OF TYPE TProd REF IS SYSTEM GENERATED; OID gerado e controlado pelo sistema Solange N. Alves de Souza 20 10
Relacionamento entre Objetos Esquema Modelo Relacional relacionamento Solange N. Alves de Souza 21 Esquema de Objetos Referencias são usadas para representar relacionamentos Fornecedores Compras Produto TFornec codfornec nomefornec endfornec TCompra fornecedor produto data qtd TProd codprod descrprod precoprod Solange N. Alves de Souza 22 11
Referência de objetos Definição de relacionamento entre objetos Não é semelhante a uma chave estrangeira (chave estrangeira pode ser composta) só referencia uma tabela que tenha definido um OID Solange N. Alves de Souza 23 Referência de objetos - exemplo create type TCompras as ( fornecedor REF (tfornec), Produto REF (tprod), data date, Qtd integer); Postgre não oferece suporte a referência de objetos CREATE TABLE Compras OF TYPE TCompra; Acesso a objetos relacionados SELECT fornecedor -> nomefornec FROM Compras WHERE qtde > 1000 AND produto -> codprod = 45; indica uma referência a um OID e não a um atributo de um componente agregado Solange N. Alves de Souza 24 12
Em BDR SELECT f.nomefornec FROM Compras c join Fornecedor f on c.codfornec = f.codfornec WHERE qtde > 1000 AND codprod = 45; Solange N. Alves de Souza 25 Criando objetos de referência Indicação dos valores de OIDs INSERT INTO Compras VALUES (REF( F102 ), REF(1002), 10/12/03,1300); Solange N. Alves de Souza 26 13
Escopo de Referência Uma referência indica um tipo Deve-se definir o escopo da referência quando mais de uma tabela pertence ao tipo SCOPE FOR <nome_atributo> IS <nome_tabela> Solange N. Alves de Souza 27 Fornecedores Compras fornecedor Produto TFornec codfornec nomefornec endfornec TCompra fornecedor produto data qtd TProd codprod descrprod precoprod CREATE TABLE Compras OF TYPE TCompra SCOPE FOR fornecedor IS Fornecedores; Solange N. Alves de Souza 28 14
Tipos de Objetos UDT Define comportamento para os objetos Encapsulamento de atributos e métodos Permite herança de um tipo para um subtipo CREATE TYPE <nometipo> ( <lista de atributos>, [<declaraçãoassinmétodos>]) [INSTANTIABLE] [ [NOT] FINAL] Pode gerar tabelas Pode ou não ser especializado Solange N. Alves de Souza 29 CREATE TYPE <nomeobjeto> AS OBJECT (atributo1 tipo_dado,..., atributon tipo_dado, MEMBER PROCEDURE <nomeprocedimeto> [(parâmetro1 [IN OUT IN OUT] tipo_dado,..., parâmetron [IN OUT IN OUT] tipo_dado)], BEGIN <corpo do procedimento> END <member nomeprocedimento> ) Solange N. Alves de Souza 30 15
Modelagem OR Tipo definido pelo usuário (UDT) TEmpregado RG nome_emp end_emp gerente salário_base comissão salário() TEnd rua nro cidade CEP Empregados Solange N. Alves de Souza 31 UDT para o modelo create type TEmpregado ( RG integer, nome_emp varchar (40), end_emp TEnd, gerente REF (TEmpregado), salario_base decimal (7,2), comissão decimal (7,2), METHOD salário () RETURNS decimal (7,2);...) INSTANTIABLE NOT FINAL; Pode gerar tabelas Pode ou não ser especializado create table Empregados of type TEmpregado; Lista de atributos Declaração de assinatura de métodos Solange N. Alves de Souza 32 16
Métodos Só podem ser definidos dentro de um TAD Identificação do método a ser executado é determinado em tempo de execução ( late binding ) Depende do objeto que o invoca ou de parâmetros Solange N. Alves de Souza 33 Acesso a Métodos ou Funções Métodos ou funções podem ser usados em consultas: Select RG, nome_emp From empregados Where salario() > 10000.00; Solange N. Alves de Souza 34 17
Herança Herança múltipla em geral não é permitida CREATE TYPE <nometad> UNDER <nometad> (...) CREATE TYPE TProfessor UNDER TEmpregado ( titulação varchar(15), gratificação decimal (7,2), OVERRRIDING METHOD salário() RETURNS decimal (7,2);...) Instantiable Not final Solange N. Alves de Souza 35 LOBs (Large OBjects) Objetos de tamanho grande Podem ser definidos como domínios de atributos de tabelas em BDOR. são agora considerados parte do esquema do BD e não precisam ser mantidos e tratados em arquivos separados. Solange N. Alves de Souza 36 18
Tipos de LOBs CLOB (Character LOB texto longo) BLOB (Binary LOB imagem) São definidos em termos de KB, MB e GB CREATE TABLE empregados (... currículo CLOB(500K), fotografia BLOB(12M),...) Solange N. Alves de Souza 37 LOBs - Operações CONCATENATION, SUBSTRING, POSITION, OVERLAY, predicados LIKE,..., funções definidas pelo usuário. Empregados... curriculo: CLOB(500K) fotografia:blob(12m)... SELECT nome FROM empregados WHERE currículo LIKE *UFSC* PostGreSQL não suporta tipos de dados LOBs e suas operações Solange N. Alves de Souza 38 19