Objetos em Bancos de Dados Relacionais Alcides Calsavara Vantagens de BD recuperação em caso de falha compartilhamento entre usuários compartilhamento entre aplicações segurança integridade extensibilidade distribuição de dados Conceitos de BD relacionais Partes de um RDBMS: – dados que são apresentados como tabelas – operadores para manipulação de tabelas – regras de integridade para as tabelas Estrutura lógica de um RDBMS coleção de tabelas cada tabela tem um determinado número de colunas e um número qualquer de linhas colunas são chamadas de atributos linhas são chamadas de tuplas cada atributo tem um domínio: conjunto de valores legais Operadores de RDBMS SQL: – SELECT ... FROM ... WHERE ... – CREATE TABLE ... – INSERT ROW ... INTO TABLE ... – DELETE ROW ... FROM TABLE ... SET-ORIENTED Integridade em RDBMS Integridade de entidade: cada tabela tem exatamente uma chave-primária chave-primária: combinação de um ou mais atributos cujo valor identifica unicamente cada linha em uma tabela Integridade em RDBMS (cont.) Integridade referencial: cada chave estrangeira deve ser consistente com sua correspondente chave primária chave estrangeira: é uma chave primária de uma tabela embutida em outra (ou na mesma) tabela Formas normais primeira: nenhum atributo contém um grupo de valores segunda: cada tupla deve ter uma chave primária terceira: cada atributo depende diretamente da chave primária OID como chave primária Mapeamento classe-tabela – há uma tabela para cada classe – cada tupla corresponde ao estado de uma instância (objeto) da classe – a chave primária da tupla é a OID do correspondente objeto OID como chave primária (cont.) Mapeamento associação-tabela – há uma tabela para cada associação entre classes – cada tupla corresponde a uma ligação entre instâncias (objetos) das classes associadas – a chave primária da tupla é composta pelas OIDs dos objetos ligados OID como chave primária (cont.) vantagem: associações são implementadas de forma independente de propriedades de objetos e, portanto, não requer atualização quando objetos são modificados OID como chave primária (cont.) desvantages: – RDBMS não gerencia OID: pode haver ineficiência e desperdício de espaço – a teoria relacional diz que dados são manipulados de acordo com seus atributos: OID é um artefato de implementação que RDBMS tenta eliminar OID como chave primária (cont.) quando usar? – use quando o acesso ao banco de dados é restrito a programas • contornar deficiências do RDBMS • garantir integridade • prover interface de usuário – não use quando o acesso ao banco de dados é feito diretamente por usuários • interpretador SQL Mapeamento classe-tabela Pessoa nome: Nome endereço: Endereço Mapeamento classe-tabela (cont.) TABELA Pessoa nome do atributo nulo? domínio oid N OID nome N Nome endereço Y Endereço Mapeamento classe-tabela (cont.) CREATE TABLE Pessoa ( oid char(40) not null, nome char(30) not null, endereço char(50) PRIMARY KEY (oid) ); Mapeamento associação-tabela Tipos de associação: – binária: • muitos para muitos • um para muitos • um para um – ternária – ... Associação binária muitos-para-muitos Empresa nome endereço Trabalha-para salário Pessoa nome endereço Associação binária muitos-para-muitos (cont.) TABELA Trabalha-para nome do atributo nulo? domínio empresa-oid N OID pessoa-oid N OID salario Y Real Associação binária muitos-para-muitos (cont.) CREATE TABLE Trabalha-para ( empresa-oid char(40) not null, pessoa-oid char(40) not null, salario double, PRIMARY KEY (empresa-oid, pessoa-oid), FOREIGN KEY (empresa-oid) REFERENCES Empresa, FOREIGN KEY (pessoa-oid) REFERENCES Pessoa ); Associação binária um-para-muitos Empresa nome endereço Trabalha-para salário Pessoa nome endereço Associação binária um-para-muitos (cont.) TABELA Pessoa nome do atributo nulo? domínio oid N OID nome N Nome endereço Y Endereço empresa-oid Y OID salário Y Real Associação binária um-para-muitos (cont.) vantagens da junção de tabelas: – menos tabelas – melhor desempenho devido ao menor número de tabelas para navegar Associação binária um-para-muitos (cont.) desvantagens da junção de tabelas: – menos rigor de design: um objeto contém informação sobre outro objeto (contra a idéia de encapsulamento) – extensibilidade reduzida: se a multiplicade mudar para muitos-paramuitos então as tabelas devem mudar – mais complexidade: a representação assimétrica complica operações de busca e atualização Mapeamento de generalização ABORDAGENS: – (T) cada classe (superclasse e subclasse) é mapeada para uma tabela – (C) somente cada classe concreta é mapeada para uma tabela – (R) somente a classe raiz da hierarquia é mapeada para uma tabela Mapeamento de generalização (cont.) Moradia endereço área interna Casa Apartamento área externa número Mapeamento de generalização - abordagem T TABELA Moradia nome do atributo nulo? domínio moradia-oid N OID endereço N Endereço área-interna Y real tipo-de-moradia N Tipo-Mor Mapeamento de generalização - abordagem T - (cont.) TABELA Casa nome do atributo nulo? domínio moradia-oid N OID área-externa N real Mapeamento de generalização - abordagem T - (cont.) TABELA Apartamento nome do atributo nulo? domínio moradia-oid N OID andar Y integer número N integer Mapeamento de generalização - abordagem C TABELA Casa nome do atributo nulo? domínio moradia-oid N OID endereço N Endereço área-interna Y real área-externa N real Mapeamento de generalização - abordagem C - (cont.) TABELA Apartamento nome do atributo moradia-oid endereço área-interna andar número nulo? N N Y Y N domínio OID Endereço real integer integer Mapeamento de generalização - abordagem R TABELA Moradia nome do atributo moradia-oid endereço área-interna área-externa andar número nulo? N N Y Y Y Y domínio OID Endereço real real integer integer Mapeamento de generalização - comparação de abordagens abordagem T: – mais genérica – mais extensibilidade – maior número de tabelas para gerenciar – maior número de tabelas para navegar – risco de inconsistência: um mesmo objeto pode aparecer em mais de uma tabela correspondente a subclasse Mapeamento de generalização - comparação de abordagens abordagem C: – obedece a terceira forma normal – replica atributos de superclasses – não há como garantir que um atributo que é "chave primária" em uma superclasse não será duplicado nas diversas tabelas das subclasses Mapeamento de generalização - comparação de abordagens abordagem R: – tabela não está na terceira forma normal – desperdício de espaço – pode ter bom desempenho