Persistência entre Modelos de Dados

Propaganda
Persistência entre
Modelos de Dados
Clodis Boscarioli
Agenda:
Persistência (Conceitos)
Sistemas de Banco de Dados
Modelo
Relacional;
Normalização.
Modelo
Orientado a Objetos;
Modelo Objeto-Relacional.
Mapeamento Objeto-Relacional
Introdução
ao Hibernate.
Persistência
É um tópico vital para o desenvolvimento de
aplicações;
Quase todas as aplicações necessitam que dados
sejam persistidos;
Necessidades:
Armazenamento;
Busca;
Organização;
Compartilhamento
dos dados.
Persistência
Necessidades:
Integridade
dos dados;
Controle de concorrência.
Desempenho e a escalabilidade são fortemente
afetados pela estratégia de acesso a dados
escolhida.
Sistemas de Banco de Dados
Quando falamos Sistemas de BD, entendemos a
junção de:
Sistema
Gerenciador de Banco de Dados;
Banco de Dados.
Sistema Gerenciador de Banco de Dados
Um Sistema Gerenciador de Banco
de Dados (SGBD) é uma coleção de
programas que habilitam usuários a
criar e manter um banco de dados.
O grande objetivo de um sistema de
BD é oferecer uma visão “abstrata”
dos dados, com disponibilidade
eficiente, aos usuários.
usuários
PROGRAMAS
SGBD
Mundo real
Visão Geral
de um SGBD
Processador
de consultas
Usuários
navegantes
Programadores
de aplicações
Interface com Programas de
aplicações
aplicações
Programas de
aplicações em
código objeto
Usuários
sofisticados
Consultas
(queries)
Pré-compilador
de comandos
DML
Administradores de BD
Usuários
Esquema de
Banco de Dados
Compilador
DML
Interpretador
DDL
Componentes de execução
de consultas
SGBD
Gerenciador
de memória
Gerenciador
de transações
Gerenciador
de buffer
Gerenciador
de arquivos
Armazenamento
em disco
Índices
Arquivos de
dados
Dados
estatísticos
Dicionário
de dados
BD
Banco de dados e Abstração de Dados
Um dos maiores benefícios dos sistemas de banco de dados é proporcionar aos
usuários uma visão abstrata dos dados. O sistema é capaz de ocultar alguns detalhes
sobre a forma de armazenamento e a manutenção dos dados.
A eficiência da recuperação de informações está relacionada à forma como as
estruturas de representação são projetadas e, dado a complexidade e importância
destas representações, elas devem ser protegidas em níveis de abstrações.
Estes níveis facilitam a manutenção do sistema e a interação dos usuários com os
sistemas. São eles:
Nível de visão: O mais alto nível de abstração.
Proporciona uma visão parcial do banco de dados.
Diferentes visões são usadas por diferentes usuários.
Nível de visão
Visão 1
......
Visão 2
Nível lógico: Implica em definir quais dados serão
armazenados e quais são os inter-relacionamentos
existentes entre eles. Usado pelos administradores de
banco de dados e programadores.
Nível físico: Mais baixo nível de abstração. Implica em
como os dados estão, de fato, armazenados (descrição
em detalhes das estruturas de dados). Administradores
de banco de dados devem ter noções da organização
deste nível.
Nível lógico
Nível físico
quais
0 11
como
Visão n
Modelos de Dados
O Modelo de Dados é a principal ferramenta que fornece a
abstração a um BD. É um conjunto de conceitos que podem
ser usados para descrever a estrutura de uma base de
dados. Por estrutura de uma base de dados entende-se os
tipos de dados, relacionamentos e restrições pertinentes aos
dados. Muitos modelos de dados também definem um
conjunto de operações para especificar como recuperar e
modificar a base de dados.
Esquema Geral de Modelagem de BD
Fonte: Ferreira et. al, 2005
Modelagem Conceitual
A base do modelo entidade-relacionamento, o modelo E-R (MER), é
representar o mundo real por meio de conjuntos de objetos chamados
entidades e relacionamentos.
A junção ordenada/lógica destes tipos de objetos representa a
estrutura/esquema do mundo real, ou seja, deve suportar o
armazenamento de dados que reflitam a situação do mundo real.
As três noções básicas empregadas pelo MER:
Conjunto de entidades;
Atributos;
Conjunto de relacionamentos;
Esse modelo possui recursos de Extensão (generalização, especialização e
agregação).
O Conjunto de Entidades
Segundo (Korth et. al, 2006):
uma entidade é uma “coisa” ou um “objeto” do mundo real que pode
ser identificada(o) de uma forma unívoca em relação a todos os outros
objetos.
cada entidade tem um conjunto de propriedades que assumem
valores e, em alguns casos, assumem valores que devem ser únicos.
uma entidade pode ser concreta, como uma pessoa ou um livro, ou
pode ser abstrata, como um empréstimo ou uma viagem.
um conjunto de entidades é o conjunto que abrange entidades de
mesmo tipo e que compartilham as mesmas propriedades: os
atributos.
os conjuntos de entidades não são, necessariamente, conjuntos
separados, ou, sempre disjuntos.
Por exemplo: o conjunto de todos os clientes de um banco
constituem o conjunto entidade cliente; o conjunto de todos os
empregados do banco constituem o conjunto entidade empregado;
a entidade pessoa pode pertencer ou ao conjunto cliente, ou ao
conjunto entidade ou a ambos ou a nenhum deles.
Atributos
Uma entidade é representada por um conjunto de atributos.
Atributos são propriedades descritivas de cada membro de um conjunto
de entidades e cada entidade tem seus próprios valores nos atributos.
Para cada atributo existe um conjunto de valores possíveis, chamado
domínio.
Formalmente, um atributo de um conjunto de entidades é uma função que
relaciona o conjunto de entidades a seu domínio.
Cada entidade pode ser descrita pelo conjunto formado pelos pares
(atributo-valor) referentes a cada atributo do conjunto em questão.
Classes de Atributos: Simples; Compostos; Monovalorados;
Multivalorados; Nulos; Derivados.
Conjuntos de Relacionamentos
Um relacionamento é uma associação entre uma ou várias entidades. Exemplo:
Um relacionamento que associa o cliente Hayes como empréstimo L-15
especifica que o cliente Hayes é o cliente que realizou o referido empréstimo.
Um conjunto de relacionamentos é um conjunto de relacionamentos de mesmo tipo.
Formalmente o relacionamento é uma relação matemática com n >= 2 (n =
número de conjuntos entidades).
Se E1, E2, ..., En são conjuntos de entidades, então um conjunto de
relacionamentos R é um subconjunto de {(e1,e2,...,e3) | e1 ∈ E1, e2 ∈ E2, ..., en ∈
En} em que (e1,e2,...,e3) são relacionamentos.
A associação entre os conjuntos de entidades é referida como uma
participação: o conjunto de entidades E1, E2, ..., Em participa do conjunto de
relacionamentos R.
Uma instância de relacionamento em um esquema E-R representa a existência
de uma associação entre essas entidades no mundo real no qual se insere o
domínio que está sendo modelado.
Grau do relacionamento: o relacionamento binário (envolve dois conjuntos
entidades) é um relacionamento de grau 2. E assim por diante.
Conjuntos de Relacionamentos
Exemplo:
Considere os conjuntos entidades cliente e empréstimo.
Definimos o conjunto de relacionamentos devedor para denotar a
associação entre clientes e empréstimos bancários contraídos pelos
clientes.
Jones
321-12-3123
Main
Harrison
L-17
1000
Smith
019-28-3746
North
Rye
L-23
2000
Hayes
677-89-9011
Main
Harrison
L-15
1500
Jackson
555-55-5555
Dupont
Woodside
L-14
1500
Curry
244-66-8800
North
Rye
L-93
500
Williams
963-96-3963
Nassau
Princeton
L-11
900
Adams
335-57-7991
Spring
Pittsfield
L-16
1300
Conjuntos de Relacionamentos
A função que uma entidade desempenha em um relacionamento é chamada
papel.
Algumas vezes o “conjunto entidade” pode participar de um “conjunto
relacionamento” mais de uma vez em papéis diferentes e, nessas situações, o
papel é importante para interpretação do modelo.
Exemplo:
Em relacionamentos recursivos, nomes explícitos de papéis são necessários para
especificar como uma entidade participa de uma instância de relacionamento.
Considere o conjunto de entidades empregado. Podemos ter um conjunto de
relacionamentos trabalha_para que é modelado para ordenar os pares de entidades de
empregado numa relação de hierarquia de cargos. Neste exemplo, os relacionamentos de
trabalha-para são caracterizados pelos pares (gerente,empregado).
Atributos descritivos em relacionamentos: atributos podem fazer parte de conjuntos
relacionamentos para melhor descrever o mundo real.
Exemplo: a data de último acesso em um conta bancária.
Mapeamento de Restrições
Mapeamento das cardinalidades expressa o número de entidade às quais
outra entidade pode estar associada via um conjunto de relacionamentos.
Um para um: uma entidade em A está associada no máximo a uma entidade
em B, e uma entidade em B está associada a no máximo uma entidade em A.
Um para muitos: Uma entidade em A está associada a várias entidades em B.
Uma entidade em B deve estar associada no máximo a uma entidade em A.
Muitos para um: Uma entidade em A está associada a no máximo uma
entidade em B. Uma entidade em B, pode estar associada a um número
qualquer de entidades em A.
Muitos para muitos: Uma entidade em A está associada a qualquer número
de entidades em B e uma entidade em B está associada a um número
qualquer de entidades em A.
Interpretação:
1
1
Aluno
Curso
1
N
Aluno
Curso
N
1
Aluno
Curso
N
Aluno
M
Curso
Conjunto relacionamento: Participa
Mapeamento de Restrições
Dependência de Existência
Se a existência da entidade X depende da existência da entidade Y, então X é
dito dependente da existência de Y.
Operacionalmente, se Y deixar de existir, conseqüentemente, X deve deixar
de existir.
Exemplo:
Considere o conjunto de entidades empréstimo e o conjunto de entidades
pagamento (que mantém todas as informações sobre os pagamentos
realizados para um determinado empréstimo).
O conjunto de entidades empréstimo é considerado dominante e o
conjunto de entidades pagamento é considerado subordinado.
Se todas as entidades de um conjunto participam de pelo menos um
relacionamento R, este é dito total, se apenas algumas das entidades do
conjunto participam do relacionamento, então este é dito parcial.
A participação total está estreitamente relacionada à existência de
dependência. Para haver dependência de existência, a participação da
entidade subordinada ao relacionamento correspondente deve ser total.
Chaves
Por meio de chaves podemos diferenciar as diversas entidades
pertencentes a um conjunto de entidades, e os diversos relacionamentos
pertencentes a um conjunto de relacionamentos.
Conjuntos de Entidades
Superchave: conjunto de um ou mais atributos que, tomados
coletivamente, nos permitem identificar de maneira unívoca uma entidade
em um conjunto de entidades.
Chaves candidatas: Superchaves para as quais nenhum subconjunto
possa ser uma superchave.
Chave primária: chave candidata escolhida pelo projetista de banco de
dados como a chave de significado principal para a identificação de
entidades dentro de um conjunto de entidades.
Uma chave é uma propriedade do conjunto de entidades e não de uma
entidade individualmente. Quaisquer duas entidades individuais em um
conjunto não podem ter, simultaneamente, mesmos valores em seus
atributos-chave.
A especificação de uma chave representa uma restrição ao mundo real do
domínio que está sendo modelada.
Chaves
Conjuntos de relacionamentos:
A composição da chave primária para um conjunto de
relacionamentos depende de uma estrutura de atributos associada
ao conjunto de relacionamentos de R.
Se o conjunto de relacionamentos não possui atributos então uma
superchave deve ser formada pelas chaves de cada entidade
participante do relacionamento.
Se o conjunto de relacionamentos possui atributos então uma
superchave deve ser formada pelas chaves de cada entidade
participante do relacionamento mais o conjunto de atributos deste.
A estrutura da chave primária para o conjunto de relacionamentos
depende do mapeamento da cardinalidade do conjunto.
Muitos para muitos: união das chaves da entidade + atributos
descritivos;
Muitos para um ou um para muitos: chave da entidade do lado do
muitos + atributos descritivos
Um para um: qualquer umas das chaves primárias pode ser usada.
Projeto de um Esquema de BD
Fases do projeto:
Levantamento de requisitos: quais são as necessidades dos usuários
do BD e como este BD será estruturado;
Construção do projeto conceitual: transcrever as necessidades
especificadas para um esquema conceitual de BD (MER);
Especificação das necessidades funcionais: descrever as transações
que serão realizadas sobre os dados;
Projeto lógico e físico: mapeamento do projeto conceitual para o
modelo de implementação de dados no SGBD.
Modelo de Dados Relacional
O Modelo Relacional (MR) é considerado o primeiro
modelo de dados efetivamente usado em aplicações
comerciais.
Foi introduzido por Codd em 1970.
É o modelo que possui a base mais formal entre os
modelos de dados, entretanto, é o mais simples e
com estrutura de dados mais uniforme.
MR - Estrutura Básica
Um banco de dados relacional consiste de uma coleção de tabelas de
nomes únicos.
Cada tabela possui um conjunto de linhas que representa um
relacionamento entre um conjunto de valores.
O conceito de tabelas está intimamente ligado ao conceito de uma
relação matemática – de onde se origina o nome deste modelo.
Uma tabela é formada por um conjunto de colunas denominadas de
atributos e por um conjunto de linhas denominadas de tuplas.
Para cada atributo existe um conjunto de valores permitidos, chamado de
domínio.
MR - Formalmente...
Suponha que D1 denote o domínio do atributo A1, D2 denote o domínio
do atributo A2 e ... Dn denote o domínio do atributo Na da tabela T1.
Qualquer linha da tabela que possui estes atributos é denotada pela tupla
(d1,d2,...,dn) em que d1, d2 e dn estão, respectivamente em D1, D2 e Dn.
Em geral, uma instância de T1 é um subconjunto de
D1 X D2 X ... X Dn.
Matematicamente, define-se uma relação como um subconjunto de um
produto cartesiano de uma lista de domínios.
As 12 Regras de Codd
Edgard F. Codd, em 1985, estabeleceu as 12
regras de Codd que determinam o quanto um banco
de dados é relacional.
Algumas vezes as regras se tornam uma barreira e
nem todos os SGBDs relacionais fornecem suporte
a elas.
As 12 Regras de Codd
1.
Regra das informações em tabelas:
As informações a serem armazenadas no banco de
dados devem ser apresentadas como relações (tabelas
formadas por linhas e colunas) e o vínculo de dados
entre as tabelas deve ser estabelecido por meio de
valores de campos comuns. Isso se aplica tanto aos
dados quanto aos metadados (que são descrições dos
objetos do banco de dados).
As 12 Regras de Codd
2. Regra de acesso garantido:
Para que o usuário possa acessar as informações contidas
no banco de dados, o método de referência deve ser o nome
da tabela, o valor da chave primária e o nome do
campo/coluna.
As 12 Regras de Codd
3. Regra de tratamento sistemático de valores nulos:
O SGBD deve ser capaz de tratar valores que não são
fornecidos pelos usuários, de maneira que permita a
distinção de dados reais. Valores nulos devem ter um
tratamento diferente de “valores em branco”.
As 12 Regras de Codd
4. Regra do catálogo relacional ativo:
Toda a estrutura do banco de dados (domínios, campos,
tabelas, regras de integridade, índices, etc) deve estar
disponível em tabelas (também referenciadas como
catálogo).
Sua manipulação é possível por meio de linguagens
específicas. Essas tabelas são, geralmente, manipuladas
pelo próprio sistema no momento em que o usuário efetua
alterações na estrutura do banco de dados.
As 12 Regras de Codd
5. Regras de atualização de alto-nível:
Essa regra diz que o usuário deve ter capacidade de
manipular as informações do banco de dados em
grupos de tuplas (registros), ou seja, ser capaz de
inserir, alterar e excluir várias tuplas ao mesmo
tempo.
As 12 Regras de Codd
6. Regra de sub-linguagem de dados abrangente:
Pelo menos uma linguagem deve ser suportada, para que o
usuário possa manipular a estrutura do banco de dados
(como criação e alteração de tabelas), bem como extrair,
inserir, atualizar ou excluir dados, definir restrições de acesso
e controle de transações (commit e rollback, por exemplo).
Deve ser possível ainda a manipulação dos dados por meio
de programas aplicativos.
As 12 Regras de Codd
7. Regra de independência física:
Quando for necessária alguma modificação na forma como
os dados estão armazenados fisicamente, nenhuma
alteração deve ser necessária nas aplicações que fazem uso
do banco de dados. Também devem permanecer inalterados
os mecanismos de consulta e manipulação de dados
utilizados pelos usuários finais.
As 12 Regras de Codd
8. Regra de independência lógica:
Qualquer alteração efetuada na estrutura do banco de dados
como inclusão ou exclusão de atributos de uma tabela ou
alteração no relacionamento entre tabelas não deve afetar o
aplicativo que o usa.
Da mesma forma, o aplicativo somente deve manipular
visões dessas tabelas.
As 12 Regras de Codd
9. Regra de atualização de visões:
Uma vez que as visões dos dados de uma ou mais tabelas
são, teoricamente suscetíveis atualizações, um aplicativo que
faz uso desses dados deve ser capaz de efetuar alterações,
exclusões e inclusões. Essas atualizações, no entanto,
devem ser repassadas automaticamente às tabelas originais.
As 12 Regras de Codd
10. Regra de independência de integridade:
As várias formas de integridade de banco de dados
(integridade de entidade, integridade referencial, restrições,
obrigatoriedade de valores, etc) precisam ser estabelecidas
dentro do catálogo do sistema ou dicionário de dados, e ser
totalmente independentes da lógica dos aplicativos.
As 12 Regras de Codd
11. Regra de independência de distribuição:
Alguns SGBDs, notadamente os que seguem o
padrão SQL, podem ser distribuídos em diversas
plataformas/equipamentos que se encontrem
interligados em rede. Essa capacidade de
distribuição não pode afetar a funcionalidade do
sistema e dos aplicativos que fazem uso do banco
de dados.
As 12 Regras de Codd
12. Regra não-subversiva:
O sistema deve ser capaz de impedir qualquer
usuário ou programador de transgredir os
mecanismos de segurança, regras de integridade do
banco de dados e restrições, utilizando algum
recurso de linguagem de baixo nível que
eventualmente possam ser oferecidos pelo próprio
sistema.
Estrutura Básica
Um banco de dados relacional consiste de uma coleção de relações
(tabelas) de nomes únicos.
Cada tabela possui um conjunto de linhas que representa um
relacionamento entre um conjunto de valores.
O conceito de tabelas está intimamente ligado ao conceito de uma
relação matemática – de onde se origina o nome deste modelo.
Uma tabela é formada por um conjunto de colunas denominadas de
atributos e por um conjunto de linhas denominadas de tuplas.
Para cada atributo existe um conjunto de valores permitidos, chamado de
domínio.
Relação
Suponha que D1 denote o domínio do atributo A1, D2 denote o domínio
do atributo A2 e ... Dn denote o domínio do atributo N da tabela T1.
Qualquer linha da tabela que possui estes atributos é denotada pela tupla
(d1,d2,...,dn) em que d1, d2 e dn estão, respectivamente em D1, D2 e Dn.
Em geral, uma instância de T1 é um subconjunto de
D1 X D2 X ... X Dn.
Matematicamente, define-se uma relação como um subconjunto de um
produto cartesiano de uma lista de domínios.
O grau de uma relação é o número de atributos que a compõe.
Particularidades
Atomicidade de atributo = primeira forma normal.
Modelo relacional plano.
O valor null.
As relações interpretam/representam fatos sobre
entidades e fatos sobre relacionamentos.
Linguagem de consulta SQL.
Exercício: Interprete o MER e crie um MR
correspondente.
Representação Tabular de Atributos
Multivalorados
Para um atributo multivalorado M, cria-se uma tabela
T com uma coluna C que corresponde a M e as
colunas correspondentes à chave primária do
conjunto de entidades ou do conjunto
relacionamento do qual M é atributo.
No exemplo da localização de departamento: cada
elemento da nova tabela é uma localização de um
departamento.
Representação Tabular da Generalização
Para a situação:
num_conta
saldo
conta
tx_juros
conta_poup
ISA
limite
conta_mov
Representação Tabular da Generalização
Criar uma tabela para o conjunto de entidades de nível superior.
Para cada conjunto de entidades de nível inferior, criar uma tabela que
inclua:
Uma coluna para cada um dos atributos daquele conjunto de entidades
Uma coluna para cada atributo da chave primária do conjunto entidades de
nível superior.
Assim:
conta, com os atributos número_conta e saldo
conta_poupança, com os atributos número_conta e taxa_juros
conta_movimento, com os atributos número_conta e limite_cheque_especial
Representação Tabular da Generalização
Se a generalização é mutuamente exclusiva:
nenhuma entidade é membro de mais de um conjunto de entidades de
nível imediatamente inferior ao conjunto de entidades de nível superior;
e todas as entidades do conjunto de entidades de nível superior são
membro também de um dos conjuntos de entidades de nível inferior.
Para cada conjunto de entidades de nível inferior, cria-se uma tabela que
inclua uma coluna para cada um dos atributos deste conjunto de entidades
mais uma coluna para cada atributo do conjunto de entidades de nível
superior
Assim:
conta_poupança, com atributos número_conta, saldo e taxas_juros;
conta_movimento, com os atributos número_conta, saldo e
limite_cheque_especial
Representação Tabular da Agregação
Relembrando...
seguro
rua
número
cidade
nome
cliente
devedor
empréstimo
Agente_
emp
empregado
seguro
telefone
nome
saldo
Representação Tabular da Agregação
A tabela para o conjunto de relacionamentos agente_empréstimo inclui uma
coluna para cada atributo, uma para chave primária do conjunto de entidades
empregado e uma para o conjunto de relacionamentos devedor.
Poderia também incluir uma coluna para cada um dos atributos descritivos
descritivos do conjunto de relacionamentos agente_empréstimo, se eles existirem.
Assim:
cliente, com os atributos nome_cliente, seguro_cliente, rua, cidade;
empréstimo, com os atributos número_empréstimo, total;
devedor, com os atributos seguro_cliente, número_empréstimo;
empregado, com os atributos seguro_empregado, nome_empregado, número_telefone;
agente_empréstimo, com os atributos seguro_empregado, número empréstimo e
seguro_cliente.
Diretriz de Projeto nº 1:
Modelar um esquema de relação de modo que seja
fácil explicar seu significado. Se uma relação
corresponde a uma mistura de entidades e
relacionamentos, resultarão em ambigüidades
semânticas e a relação não poderá se explicada
facilmente.
Esquemas pobres porque violam a Diretriz 1:
Emp_dept:
enome, ssn, datanasc, endereco, dnumero,
dnome, dgerssn.
Emp_proj: ssn, pnumero, horas, enome, pnome,
plocalização.
Redução de Valores Redundantes nas
Tuplas
Deve-se minimizar o espaço de armazenamento
utilizado pelas relações básicas:
Agrupe atributos em esquemas de relações;
Deve-se evitar situações que caiam em problemas de
Anomalias na Atualização.
Diretriz Projeto nº 2:
Modelar esquemas de relações básicas de forma que
nenhuma anomalia de atualização possa ocorrer nas
relações. Se houver a possibilidade de ocorrer alguma
anomalia, registre-a claramente e tenha certeza de que os
programas que atualizam o banco de dados operarão
corretamente.
Pode-se violar uma diretriz em prol do desempenho de uma
consulta, entretanto, as medidas cabíveis devem ser tomadas
para que os dados estejam sempre consistentes e íntegros.
Redução de Valores null nas Tuplas
A existência de muitas possibilidades de uso do valor null
causa desperdício de espaço no armazenamento e gera
problema de entendimento do significado do atributos e da
especificações de joins, e funções agregadas.
Motivos para uso do null:
O atributo não se aplica à tupla;
O valor do atributo para a tupla é desconhecido;
O valor do atributo para a tupla é conhecido, mas ausente, ou seja,
ainda não foi registrado.
Diretriz Projeto nº 3:
Até onde for possível, evite colocar os atributos em uma
relação básica cujos valores freqüentemente possam ser
nulos. Se os nulls forem inevitáveis, tenha certeza de que
eles se aplicam somente em casos excepcionais e não na
maioria das tuplas da relação.
Ex: se só 10% dos empregados tiverem escritórios
particulares, há pouca justificativa para incluir um atributo
ESCRITORIO-NRO na relação EMPREGADO; pode ser
criada uma relação EMP_ESCRITÖRIOS (ESSN,
ESCRITORIO_NRO) que contenha apenas as tuplas dos
empregados que possuírem escritórios particulares.
Impedimento para a Geração de Valores
Ilegítimos nas Tuplas
Considere os esquemas:
Esquema 1:
Emp_locs (enome, plocalização)
Emp_proj1 (ssn, pnumero, horas, pnome, plocalização)
Esquema 2:
Emp_proj: (ssn, pnumero, horas, enome, pnome, plocalização)
A partir do esquema 1 é possível conseguir as mesmas informações
que temos no esquema 2?
Não, usando um JOIN conseguiremos tuplas ilegítimas.
Diretriz Projeto nº 4:
Projete os esquemas de relações de forma que
possam ser unidos (join) com igualdade de
condições sobre os atributos que sejam chaves
primárias ou chaves estrangeiras, de modo a
garantir que nenhuma tupla ilegítima seja gerada.
Normalização
A normalização de dados pode ser vista como o processo de análise de
determinados esquemas de relações com base em suas dependências
funcionais e chaves primárias para alcançar as propriedades desejáveis:
Minimização de redundâncias;
Minimização de modificações.
O esquemas de relações insatisfatórias, que não alcançam certas
condições – os testes de forma normal -, são decompostas em esquemas
de relações menores que passam nos testes e, conseqüentemente,
possuem as propriedades desejadas.
Conceitos
A forma normal de uma relação refere-se à condição da mais alta forma
normal alcançada e, conseqüentemente, indica o grau no qual foi
normalizada.
A normalização sempre deve estar acompanhada da garantia de duas
propriedades:
Junção sem perdas: Garante que o problema de geração de tuplas ilegítimas
não ocorra (propriedade crítica que deve sempre ser garantida);
Preservação de dependências: Garante que cada dependência funcional será
representada em alguma relação individual resultante da decomposição.
Primeira Forma Normal (1NF)
Impedimento para a criação de atributos multivalorados, atributos
compostos e combinações entre eles.
Estabelece-se que o domínio de um atributo só deva incluir os valores
atômicos e que o valor de qualquer atributo em uma tupla deve ter um
único valor no domínio daquele atributo.
A 1NF impede as “relações dentro de relações” ou “relações como valores
de atributos dentro de tuplas”.
Primeira Forma Normal
Considerando o departamento que possui um atributo multivalorado:
localizações. Há três técnicas básicas para alcançar a primeira forma
normal:
1.
2.
3.
Remover o atributo DLocalizações que viola a 1NF e colocá-lo em uma
relação separada, junto com a chave primária que identifica a entidade
“departamento”.
Ampliar as chaves de forma a separar as tuplas da relação original
DEPARTAMENTO, criando uma para cada localização de “departamento”.
Se um número máximo de valores puder ser estabelecido para o atributos,
por exemplo, se é sabido que há no máximo três locais para cada
departamento, substituir o atributo Dlocalizações por três atributos
atômicos.
Segunda Forma Normal (2NF)
Baseada no conceito de dependência funcional total.
Uma dependência funcional X Y será uma dependência
funcional total se a remoção de qualquer atributo A de X
implicar que a dependência não mais será assegurada, isto
é, para qualquer atributo A ∈ X, (X – {A}) não determina
funcionalmente Y.
Uma dependência funcional X Y é uma dependência
parcial se um atributo A ∈ X puder ser removido de X e a
dependência mesmo assim continuar existindo, ou seja, para
algum A ∈ X, (X – {A}) Y.
Segunda Forma Normal
Exemplo de dependências funcionais totais e parciais:
Considere o esquema:
SSN, PNumero, Horas, Enome, Pnome, Plocalização
{SSN, PNumero} Horas: é uma dependência funcional total (não são
asseguradas nem SSN Horas nem PNumero Horas).
{SSN, PNumero} Enome: é uma dependência funcional parcial porque SSN
Enome é assegurada.
Segunda Forma Normal
Um esquema de relação R está na 2NF se todo atributo não primário A
em R tem dependência funcional total da chave primária de R.
O teste para a 2NF envolve verificar se os atributos do lado esquerdo das
dependência funcionais fazem parte da chave primária. Se a chave
primária contiver um único atributo, a necessidade do teste não se aplica.
A relação do slide anterior está na 1NF mas não está na 2NF. O atributo
não primário enome viola a 2NF em razão da dependência funcional SSN
Enome. Enome é parcialmente dependente da chave primária (já que
depende de SSN).
Segunda Forma Normal
Um esquema pode ser normalizado na 2NF por meio da criação de várias
relações na 2NF nas quais os atributos não primários só estarão
associados a dependências funcionais total.
Considere o esquema abaixo e suas dependências funcionais:
SSN, PNumero, Horas, Enome, Pnome, Plocalização
SSN, PNumero Horas
SSN Enome
PNumero Pnome, Plocalização
Segunda Forma Normal
Normalizando, cria-se três esquemas:
Esquema1: SSN, Pnumero, Horas
com a dependência funcional: SSN, PNumero Horas
Esquema 2: SSN, Enome
com a dependênia funcional: SSN Enome
Esquema 3: PNumero, Pnome, Plocalização
com a dependência funcional: PNumero Pnome,
Plocalização
Terceira Forma Normal (3NF)
De acordo com a definição original de Codd, um
esquema de relação R está na 3NF se satisfizer a
2NF e se nenhum atributo não primário de R for
transitivamente dependente da chave primária.
Está baseada no conceito de dependência transitiva.
Uma dependência funcional X Y, em um esquema de
relação R, será uma dependência transitiva se existir um
conjunto de atributos Z que não é nem uma chave candidata
nem um subconjunto de qualquer chave de R, e ambas X Z e Z Y forem asseguradas.
Terceira Forma Normal
Como exemplo, considere o seguinte esquema com sua
dependências funcionais:
Enome, SSN, DataNasc, Endereço, Dnumero, Dnome, DgerSSN
SSN Enome, DataNasc, Endereco, DNumero
DNumero Dnome, DgerSSN
A dependência funcional SSN DgerSSN é transitiva para
Dnumero, pois ambas as dependências SSN Dnumero e
Dnumero DgerSSN são asseguradas e Dnumero não é nem chave primária nem um
subconjunto da chave da relação.
Terceira Forma Normal
A normalização
na 3NF para o exemplo se dá por meio da
decomposição:
Esquema 1: Enome, SSN, DataNasc, Endereço, Dnumero
com a dependência funcional: SSN Enome, DataNasc,
Endereco, DNumero
Esquema 2: Dnumero, Dnome, DgerSSN
com a dependência funcional: DNumero Dnome,
DgerSSN
Generalização
As definições tratadas até aqui dizem respeito a parcialidade e
transitividade de dependencias funcionais com respeito à chave primária
da relação.
Estas definições devem ser expandidas para a consideração de todas as
chaves candidatas.
2NF: um esquema de relação R está na segunda forma normal se cada
atributo não primário A de R não forem parcialmente dependente de
nenhuma chave de R.
3NF: um esquema de relação R está na terceira forma normal se sempre
que uma depependência funcional não trivial X A for determinada em
R, então: (A) qualquer X é uma superchave de R; ou (B) A é um atributo
primário de R.
Mais um exemplo:
Esquema Lotes:
Num_ID_Propriedade, Municipio_nome, Num_lote, Area, Preço, Imposto
Dependências funcionais:
DF 1: Num_ID_Propriedade Municipio_nome, Num_lote, Area, Preço, Imposto
DF 2: Municipio_nome, Num_lote Num_ID_Propriedade, Area, Preço, Imposto
DF 3: Municipio_nome Imposto
DF 4: Area Preço
Colocando na 2NF:
O esquema de relação Lotes viola a definição GERAL da 2NF porque
Imposto é parcialmente dependente da chave candidata
{Municipio_nome, Num_lote} em razão da terceira dependência funcional.
Construímos então o esquema Lotes 1 removendo o atributo Imposto que
viola a 2NF de Lotes, para colocá-lo com Municipio_nome em outro
esquema: Lotes 2.
Lotes1 : Num_ID_Propriedade, Municipio_nome, Num_lote, Area, Preço
Com as DFs 1, 2 e 4
Lotes2: Municipio_nome, Imposto
Com a DF 3.
Note que a DF 4 não viola a 2NF.
Colocando na 3NF:
Lotes2 está na 3NF.
Lotes1 não está pois a dependência funcional 4 viola a definição GERAL.
Área não é uma superchave;
Preço não é um atributo primário em Lotes1.
Construímos:
Lotes1a: Num_ID_Propriedade, Municipio_nome, Num_lote, Area
Com as DFs 1 e 2.
Lotes1b: Area, Preço
Com a DF 4.
Forma Normal de Boyce-Codd (BCNF)
Foi proposta como uma forma normal mais simples de 3NF,
mas é considerada mas rígida que a 3NF.
Toda relação BCNF está também em 3NF, mas o contrário
pode não ser verdadeiro.
Definição: Um esquema de relação R está na BCNF sempre
que uma dependência funcional não trivial X A for mantida
em R, então X será uma superchave de R.
BCNF
Suponha a seguinte situação para o último exemplo modelado:
Existem milhares de lotes cadastrados mas eles estão
localizados em apenas duas cidades. E as áreas dos lotes nas
duas cidades são definidas de formas diferentes. Assim, a
dependência funcional Area Municipio_nome deveria valer.
Ainda assim, Lotes1a estaria na 3NF, pois Municipio_nome é
um atributo primário.
BCNF
Mas existe redundância de informação, pois a área que determina o
município, como dito pela nova dependência funcional, pode ser
representada uma única vez, em uma relação a parte.
A BCNF sugere a decomposição do esquema Lotes1a em:
Lotes1ax : Num_ID_propriedade, Area, Num_lote
com as DFs 1 e 2.
Lotes1ay : Area, Municipio_nome
com a DF 5.
Cuidado com a decomposição com perdas na junção!
BCNF - Exemplos
Relembrando: Uma relação R está na BCNF sse R está na
3NF e nenhum atributo possua dependência transitiva em
relação à chave primária.
Exemplo:
Relação CURSA
ALUNO
DISCIPLINA
TUTOR
Nagiza
Banco de Dados I
Korth
Silvio
Banco de Dados I
Navathe
Silvio
Banco de Dados II
Setzer
Silvio
Data Mining
Duhran
William
Banco de Dados I
Korth
William
Banco de Dados II
Elmasri
Zélia
Banco de Dados I
Date
Camila
Banco de Dados I
Navathe
BCNF - Exemplo
Primeiro, têm-se que identificar as DF envolvendo atributos que pertençam a chave
primária.
Tutor Disciplina
Aluno, Disciplina Tutor
Há dependência transitiva da chave primária!
Relação CURSA
ALUNO
DISCIPLINA
TUTOR
A relação acima está na 3NF e na BCNF?
BCNF - Exemplo
A relação está na 3NF pois possui somente atributos
atômicos, não apresenta dependência parcial da chave
primária e não existem DFs de um atributo não pertencente
a chave primária em relação a atributos não pertencentes à
chave primária. Porém, não está na BCNF pois possui
dependência transitiva de um atributo chave com relação à
chave primária.
A solução seria separar a relação em duas ou mais
relações, de forma a eliminar a dependência transitiva:
Tutoria (Tutor, Disciplina)
Cursa(Tutor, Aluno)
BCNF – Outro Exemplo
Considere a relação orientador abaixo. Suponha que
as exigências básicas dessa relação sejam: Um
aluno (IDAL) pode ter mais que uma especialização,
uma especialização pode ter vários membros do
corpo docente (Fnome) como orientadores e um
professor orienta somente em uma área de
especialização.
BCNF – Outro Exemplo
Relação
IDAL
100
150
200
250
300
300
Orientador
Especialização
Matemática
Psicologia
Matemática
Matemática
Psicologia
Matemática
DF:
Fnome Especialização
Fnome
Caughy
Jung
Riemann
Caughy
Perls
Riemann
BCNF – Outro Exemplo
Há nessa relação uma anomalia de eliminação (por
exemplo, se o aluno 300 sair da escola e se seus
registros forem apagados, perde-se o fato de que
Perls orienta em psicologia) e existe também uma
anomalia de inserção (Não se pode armazenar um
orientador em uma área, a não ser que um aluno se
especialize na cadeira).
BCNF – Outro Exemplo
Relação Al_Orient
Relação Orient_Discip
IDAL
Fnome
Fnome
Especialização
100
Caughy
Caughy
Matemática
150
Jung
Jung
Psicologia
200
Riemann
Riemann
Matemática
250
Caughy
Perls
Psicologia
300
Perls
300
Riemann
Agora sim, está na BCNF.
Dependência Multivalorada
“Dada uma relação qualquer com três atributos x, y e z, dizse que y depende de forma multivalorada de x sse
sempre que existirem duas tuplas (x1,y1,z1) e (x1,y2,z2)
existirão também duas tuplas (x1,y1,z2) e (x1,y2,z1)”.
Refere-se à combinação de valores de atributos
multivalorados disjuntos (y e z).
x na verdade, relaciona-se com y e com z de forma
independente.
4ª Forma Normal (4NF)
“Uma tabela está na 4FN sse estiver na 3FN e não existirem
dependências multivaloradas”.
Exemplo: Dados sobre livros
Relação não normalizada: Livros(nrol, (autor), título, (assunto),
editora, cid_edit, ano_public)
1FN: Livros(nrol, autor, assunto, título, editora, cid_edit,
ano_public)
2FN: Livros(nrol,título, editora, cid-edit, ano_public)
AutAssLiv(nrol, autor, assunto)
3FN: Livros(nrol, título, editora, ano_public)
Editoras(editora, cid-edit)
AutAssLiv(nrol, autor, assunto)
4ª Forma Normal (4NF)
Nrol
1
1
1
1
2
2
2
2
2
2
Autor
aut1
aut1
aut2
aut2
aut1
aut1
aut1
aut3
aut3
aut3
Assunto
ass1
ass2
ass1
ass2
ass3
ass4
ass1
ass3
ass4
ass1
Redundância para representar todas as informações;
Evitar todas as combinações: representação não-uniforme (repete
alguns elementos ou posições nulas).
Passagem à 4FN
Geração de novas tabelas, eliminando Dependências
Multivaloradas
Análise de Dependências Multivaloradas entre atributos:
autor, assunto Dependência multivalorada de nrol
Resultado:
4FN: Livros(nrol, título, editora, ano_public)
Editoras(editora, cid-edit)
AutLiv(nrol, autor)
AssLiv(nrol, assunto)
4ª Forma Normal – Outro Exemplo
Relação Aluno
IDAL
Especialização
Atividade
100
Música
Natação
100
Contabilidade
Natação
100
Música
Tênis
100
Contabilidade
Tênis
150
Matemática
Jogging
DF múltiplas:
IDAL Especialização
IDAL Atividade
4ª Forma Normal – Outro Exemplo
Relação Aluno
Relação Aluno
IDAL
Especializaçã
o
Atividade
100
Música
Natação
100
Contabilidade
Natação
100
Música
IDAL
Especializaçã
o
Atividade
100
Música
Natação
100
Contabilidade
Natação
100
Música
Tênis
100
Contabilidade
Tênis
150
Matemática
Jogging
Tênis
100
Contabilidade
Tênis
150
Matemática
Jogging
100
Música
Esqui
100
Música
Esqui
100
Contabilidade
Esqui
Ao inserir nova atividade ao aluno 100 com a especialização música, deve-se
inserir também outra tupla, o que mostra uma anomalia de atualização.
4ª Forma Normal – Outro Exemplo
Relação Al_Espec
Relação Al_Ativ
IDAL
Especialização
IDAL
Atividade
100
Música
100
Esqui
100
Contabilidade
100
Natação
100
Tênis
150
Matemática
150
Jogging
Agora sim, está na BCNF, sem dependências
multivaloradas!
5ª Forma Normal (5NF)
“Uma tabela está na 5FN sse estiver na 4FN e um relacionamento triplo não
puder ser decomposto em relacionamentos binários sem geração de
informação incorreta”.
Caso especial: Relacionamento envolvendo Chaves primárias de 3 tabelas, que
nem sempre é possível decomposição correta.
Exemplo: relacionamento Agente-Companhia-Produto
Agente
João
João
Companhia
Ford
GM
Produto
Carro
Caminhão
5ª Forma Normal
Formato necessário quando existem apenas algumas
combinações entre os 3 atributos (tabela c/ tripla).
Situação: Se um agente vende um certo produto e ele
representa uma companhia, então ele vende um produto
fabricado por esta companhia Todos os pares se
combinam!
5ª Forma Normal
Agente
Companhia
Produto
João
Ford
Carro
João
Ford
Caminhão
João
GM
Carro
João
GM
Caminhão
Carlos
Ford
Carro
Neste caso, é possível decompor uma tripla em três
relações binárias com eliminação de certas redundâncias.
5ª Forma Normal
As três relações abaixo estão na 5FN:
Agente
Companhia
João
Ford
João
GM
Carlos
Ford
Agente
Produto
João
Carro
João
Caminhão
Carlos
Carro
Companhia
Produto
Ford
Carro
Ford
Caminhão
GM
Carro
GM
Caminhão
Eliminação de certas redundâncias:
- Apenas uma vez está dito que Ford produz carros;
- Apenas uma vez está dito que João é agente da GM.
Apesar do aumento no número de tabelas, o número total de
tuplas na forma normalizada é menor.
Banco de Dados Orientado a Objetos
- Motivações
Novas aplicações ficaram limitadas por restrições impostas pelo modelo
relacional.
As aplicações convencionais possuem características comuns que as tornam
passíveis de serem tratadas por bancos de dados relacionais:
Uniformidade: as informações a serem armazenadas podem ser
estruturadas de maneira similar.
Orientação a registros: registros de tamanho fixo são adequados para a
representação desta informação.
Itens de dados pequenos: as informações são estruturadas em registros
pequenos.
Campos atômicos: os campos dentro de um registro são pequenos e de
comprimento fixo. Não há estruturas dentro dos campos, ou seja, a primeira
forma normal pode ser mantida.
O modelo de banco de dados orientado a objetos está baseado no paradigma
de programação orientada a objeto.
Introdução e Motivações
As aplicações mais novas, em geral, não possuem, no mínimo, uma das
características já citadas.
Exemplos dessas aplicações:
Computer-aided design (CAD) – projeto auxiliado por computador:
É necessário armazenar os dados pertencentes a um projeto de
engenharia, incluindo os componentes do item que está sendo projetado,
o inter-relacionamento dos componentes, as versões antigas do projeto.
Computer-aided software engineering (CASE) – engenharia de
software auxiliada por computador:
É necessário armazenar os dados necessários para apoiar os
desenvolvedores de software, incluindo o código-fonte, as dependências
entre os módulos de software, as definições e o uso de variáveis e o
histórico de desenvolvimento do sistema de software.
Introdução e Motivações
Bancos de dados multimídia:
Office information system (OIS) – sistemas de informação de
escritório:
Contém imagens, dados espaciais, dados de áudio, dados de vídeo e
afins (envolvem principalmente o armazenamento de fotografias e dados
geográficos, voz e vídeo).
Necessidade de suportar dados para ferramentas para criação e
recuperação de documentos e ferramentas para manutenção de
calendários, permitindo solicitações pertencentes a agendas, documentos
e conteúdos de documentos.
Bancos de dados de hipertexto:
Necessidade de suportar o armazenamento/gerenciamento das estruturas
específicas e indexação de textos enriquecidos com links que apontam
para outros documentos, permitindo a recuperação de documentos
baseados em sua estrutura.
Modelagem de BDOOs
Isso:
Modelagem de BDOOs
Ao invés disso:
O Modelo de Dados Orientado a Objeto
A estrutura objeto:
Superficialmente, um objeto corresponde a uma entidade no modelo E-R.
Este paradigma se baseia no encapsulamento de dados e em código
relacionado a um objeto dentro de uma única unidade.
As interações entre um objeto e o resto do sistema deve ser via
mensagens.
Uma interface entre um objeto e o resto do sistema deve ser definida por
um conjunto de mensagens permitidas.
Em geral, um objeto tem associado a ele:
Um conjunto de variáveis que contém os dados para o objeto; as variáveis
correspondem aos atributos no modelo E-R;
Um conjunto de mensagens ao qual o objeto responde; cada mensagem
pode ter zero, um ou mais parâmetros;
Um conjunto de métodos, cada qual sendo um corpo de código para
implementar a mensagem; um método retorna um valor como resposta à
mensagem.
O Modelo de Dados Orientado a Objeto
O termo mensagem em um contexto orientado a objeto se refere à passagem de pedidos entre os
objetos sem considerar detalhes específicos de implementação.
O termo chamar um método algumas vezes é usado para representar o ato de enviar uma
mensagem a um objeto e a execução do método correspondente.
Exemplo:
Considerando a entidade empregado em um banco de dados. Suponha que o salário anual
de um empregado seja calculado de maneiras diferentes para diferentes empregados. Por
exemplo, os gerentes podem ter um bônus dependendo do desempenho do banco, enquanto
os caixas podem obter um bônus dependendo de quantas horas eles trabalharam. É possível
encapsular o código para calcular o salário para cada empregado como um método que é
executado em resposta a uma mensagem salário_anual.
Todos os objetos empregado respondem à mensagem salário_anual, mas fazem isso de
diferentes maneiras. Pelo encapsulamento da informação sobre como calcular o salário anual
dentro do objeto empregado, todos os objetos empregados apresentam a mesma interface.
É possível modificar a definição de um objeto sem afetar o resto do sistema. Esta é uma das
habilidades considerada como uma das maiores vantagens do paradigma de programação
orientado a objetos.
O Modelo de Dados Orientado a Objeto
Os métodos de um objeto podem ser:
Somente leitura: não afeta os valores das variáveis em um objeto;
De atualização: pode mudar os valores das variáveis.
As mensagens às quais um objeto responde podem ser, de maneira similar, classificadas
como somente leitura ou de atualização, em função do método que implementa a
mensagem.
Cada atributo de uma entidade deve ser expresso como uma variável e um par de
mensagens do objeto no modelo orientado a objeto. A variável é usada para armazenar o
valor do atributo, uma mensagem é usada para ler o valor do atributo e o outro método é
usado para atualizar o valor. Por exemplo:
O atributo endereço da entidade empregado pode ser representado por:
Uma variável endereço;
Uma mensagem obter_endereço cuja resposta é o endereço;
Uma mensagem ajustar_endereço, que possui um parâmetro novo_endereço, para atualizar o
endereço.
Por simplicidade muitos modelos orientados a objeto permitem que as variáveis sejam
lidas ou atualizadas diretamente, sem ter de definir mensagens para isso.
Classes de Objetos
Objetos similares são aqueles que respondem às mesmas mensagens, usam os mesmos
métodos e têm variáveis de mesmo nome e tipo.
Objetos similares são agrupados formando uma classes.
Cada um desses objetos é chamada de uma instância de sua classe.
A noção de uma classe no modelo de dados orientado a objeto corresponde à noção de um
conjunto entidade do modelo E-R.
Exemplo de definição de uma classe:
Class empregado {
/* variáveis */
string nome;
string endereço;
date data_início;
int salário;
/* mensagen */
int salário_anual();
string obter_nome();
string obter_endereço();
int ajustar_endereço (string novo_endereço);
int tempo_emprego();
}
Classes de Objetos
Cada classe é um objeto em si e inclui uma variável contendo o conjunto
de todas as instâncias da classe.
Uma classe objeto inclui:
Uma variável conjunto valorada cujo valor é o conjunto de todos os
objetos que são instâncias da classe;
A implementação de um método para a mensagem new, que cria uma
nova instância da classe.
Herança
Considerando um banco de dados orientado a objetos para a aplicação bancária
(exemplo – Korth), a classe clientes é similar à classe empregados, pois ambas
definem variáveis para nome, endereço e assim por diante. No entanto, há
variáveis específicas para empregados (salário) e variáveis específicas para
clientes (classificação_crédito).
Neste caso é desejável definir uma representação para as variáveis comuns em
um único local. Para isso, combina-se empregados e clientes dentro de uma
classe.
Para permitir a representação direta de similaridades entre classes, necessita-se
colocar as classes em uma hierarquia de especialização.
Empregado e cliente são especializações de pessoa.
Este conceito é similar ao conceito de especialização no modelo E-R.
Empregados e clientes podem ser representados por classes que são
especializações de uma classe pessoa. Variáveis e métodos específicos a
empregados são associados à classe empregados. Variáveis e métodos
específicos a clientes são associados à classe cliente. Variáveis e métodos que se
aplicam tanto a empregados como a clientes são associados à classe pessoa.
class pessoa {
string nome;
string endereço;
};
class cliente isa pessoa {
int classificação_crédito
};
class empregado isa pessoa {
date data_início;
int salário;
};
class escriturário isa empregado {
int número_escriturário;
int número_conta_despesa;
};
class caixa isa empregado {
int horas_por_semana;
int número_estação;
};
class secretária isa empregado {
int horas_por_semana;
string gerente;
};
Herança
Um benefício importante da herança em sistemas orientados a objeto é a noção
de reusabilidade.
Qualquer método de uma classe pode ser invocado por qualquer objeto
pertencente a qualquer subclasse desta classe.
Para tratar a hierarquia de classes tem-se duas opções:
Associar à classe empregado todos os objetos empregado, incluindo aqueles
que são instâncias de escriturário, caixa e secretária.
Associar à classe empregado somente aqueles objetos empregado que não
são instâncias nem de escriturário, nem de caixa, nem de secretária.
É possível determinar o conjunto de todos os objetos empregado, nesse caso,
tomando-se a união daqueles objetos associados a todas as subclasses de
empregado.
Herança Múltipla
Suponha que precisemos distinguir entre escriturários, caixas e secretárias de
tempo integral e tempo parcial. Além disso, assuma que são necessárias
diferentes variáveis e métodos para representar empregados de tempo parcial e
tempo integral. Então cada um desses empregados são classificados de duas
maneiras diferentes.
pessoa
empregado
escriturário
escrit_TI
escrit_TP
caixa
caixa_TI
cliente
secretária
caixa_TP secretária_TI
secretária_TP
Herança Múltipla
Existem certas variáveis e métodos específicos para empregado em tempo
integral e outros específicos para empregado em tempo parcial. Assim, na
hierarquia em análise, as variáveis e métodos para empregados de tempo integral
devem ser definidos três vezes: uma vez para escriturário_TI, uma vez para
secretária_TI e uma vez para caixa_TI. Redundâncias deste tipo são indesejáveis
mediante alterações nas propriedades dos empregados de tempo integral (e
parcial), que deverão ser feitas em dois lugares diferentes.
Existe falha na exploração da reutilização de código.
Nesta hierarquia também não se consegue representar os empregados que não
são escriturários, caixas ou secretárias, mas que possuem características de
serem ou de tempo parcial ou integral.
Se existissem várias classificações de emprego, em vez de duas limitações neste
exemplo, as limitações do modelo se tornariam muito mais aparentes.
Herança Múltipla
Herança múltipla é a habilidade de uma classe herdar variáveis e métodos a partir
de múltiplas superclasses.
pessoa
cliente
empregado
tempo_integral
escrit_TI
escrit_TP
tempo_parcial
caixa_TI
escriturário
caixa_TP
caixa
secretária
secretária_TI
secretária_TP
Pode haver algum problema?
Herança Múltipla
Assuma que, em vez de definir salário para a classe empregado, defina-se uma variável
chamada pagamento para cada classe: tempo_integral, tempo_parcial, escriturário, caixa e
secretária, como a seguir:
Tempo_integral: pagamento é um inteiro de 0 a 100.000 contendo um salário anual;
Tempo_parcial: pagamento é um inteiro de 0 a 20, contendo uma taxa horária de
pagamento.
Caixa e escriturário: pagamento é um inteiro de 0 a 20.000, contendo um salário anual;
Secretária: pagamento é um inteiro de 0 a 25.000, contendo um salário anual.
Considere a classe secretária_TP. Ela pode herdar a definição de pagamento tanto de
tempo_parcial como de secretária. O resultado é diferente, dependendo da escolha feita.
Opções:
Incluir ambas as variáveis, renomenado-as como tempo_parcial.pagamento e
secretária.pagamento;
Escolher uma ou outra, baseado na ordem em que as classes tempo_parcial e
secretária foram criadas;
Forçar o usuário a fazer a escolha;
Tratar a situação como um erro.
Identidade de Objeto
Os objetos em um banco de dados orientado a objeto correspondem a uma
entidade na empresa que está sendo modelada. Uma entidade mantém sua
identidade mesmo se algumas de suas propriedades mudam com o tempo.
Um objeto mantém sua identidade mesmo se alguns ou todos os seus valores
de variáveis ou definições de métodos mudarem com o tempo.
Diferente do modelo relacional onde as tuplas de uma relação são
diferenciadas somente pelos valores que elas contêm.
Identidade de Objeto
Formas de identidade:
Valor: usado em modelos relacionais um valor de dado é usado para identidade da
tupla;
Nome: usado em sistemas de arquivos um nome fornecido pelo usuário é usado
para identidade dos arquivos;
Embutido: usado em sistemas orientados a objetos a cada objeto é atribuído
automaticamente um identificador pelo sistema quando aquele objeto é criado.
Identificadores de objetos são únicos. Exemplo de uso do identificador:
Um dos atributos de um objeto pessoa pode ser o atributo cônjuge, que é realmente
um identificador do objeto pessoa correspondendo ao cônjuge da primeira pessoa.
Assim, o objeto pessoa pode armazenar uma referência ao objeto que representa o
cônjuge de pessoa.
Objetos Compostos
As referências entre os objetos podem ser usadas para modelar
diferentes conceitos do mundo real. Um desses conceitos é o de objetos
compostos.
bicicleta
freio
roda
aro
raio
pneu
pedal
É parte de
marcha
bloco
quadro
cabo
O conceito de composição permite que os dados sejam vistos em diferentes
granularidades por diferentes usuários.
Modelagem de BDOOs
Representação no BDOO:
Um BDOO armazena objetos integralmente;
É possível recuperar um objeto a qualquer momento, inclusive todas as
referências.
Linguagem de definição:
ODL (Object Definition Language);
Utilizada para criar definições de objetos.
Linguagem de consulta:
OQL (Object Query Language);
Utilizada para recuperar objetos do banco.
Modelagem de BDOOs
Classes
Modelagem de BDOOs
Automóvel{OID12}
Objetos
736194174
Ka
Preto
20000
OID1
[OID5123]
Fabricante{OID1}
Ford
João da Silva
[OID1125, OID1127, OID1128]
Peça{OID5123}
Correia Dentada
Ford
OID154
[OID1125, OID1127, OID1128]
Motor{OID154}
Rocam 1000 16V
OID1
120CV
Fábrica {OID1125}
Fábrica {OID1127}
Fábrica {OID1128}
Central
Camaçari
320
Filial São Bernardo I
São Bernardo
250
Filial São Bernardo II
São Bernardo
130
Modelagem de BDOOs
Automóvel{OID12}
736194174
Ka
Preto
20000
Objeto Complexo
Fabricante{OID1}
Ford
João da Silva
Fábrica {OID1127}
Fábrica {OID1128}
Filial São Bernardo I
São Bernardo
250
Filial São Bernardo
II
São Bernardo
130
Fábrica {OID1125}
Central
Camaçari
320
Motor{OID154}
Rocam 1000 16V
120 CV
Modelagem Padrão ODMG – ODL
Especificação ODL
class Pessoa
(extent pessoas
key nss)
{
attribute struct Nomep{string sobrenome, string primeiro_nome} nome;
attribute string nss;
attribute date data_nascimento;
attribute enum Genero{M,F} sexo;
attribute struct Endereço
{short num, string logradouro, sort numapto, string cidade, string estado, short
cpe}
endereço;
short idade();
};
Especificação ODL
class Professor extends Pessoa
( extent professores )
{
attribute string classificação;
attribute float salário;
attribute string escritório;
attribute string telefone;
relationship Departamento trabalha_em inverse Departamento::possui_professor;
relationship set<aluno_grad> dá_assistência inverse AlunoGrad::assistente;
relationship set<aluno_grad> no_comitê_de inverse AlunoGrad::comitê;
void dar_aumento(in float aumento);
void promove(in string nova_classificação);
};
Especificação ODL
class Grau
( extent graus)
{
attribute enum GrauValores{A,B,C,D,F,I,P} grau;
relationship Disciplina disciplina inverse Disciplina::alunos;
relationship Aluno aluno inverse Alunos::disciplinas_completadas;
};
Especificação ODL
class Aluno extends Pessoa
( extent alunos)
{
attribute string classe;
attribute Departamento cursa_eletiva_em;
relationship Departamento especializa_em inverse
Departamento::possui_especializações;
relationship set <grau> disciplinas_completadas inverse Grau::alunos;
relationship set <DisciplinaCorrente> registrado_em inverse
DisciplinaCorrente::alunos_registrados;
void alterar_especialização (in string nomed) raises disciplina_inválida);
float mg();
void registrado(in short nomseção; in ValorGrau grau)
raise (disciplina_inválida,grau_invalido);
};
Especificação OQL
select struct (sobrenome:s.nome.sobrenome,primeiro_nome:
s.nome.primeiro_nome)
from s in departamentocc.possui_especializações
where s.classe = ‘Superior’
order by sobrenome asc;
select struct (sobrenome:s.nome.sobrenome,primeiro_nome:
s.nome.primeiro_nome)
from s in alunos
where s.especializa_em.nomed = ‘Ciência da Computação’
order by sobrenome asc;
Linguagens Orientadas a Objeto
Para que estes conceitos básicos de orientação a objetos sejam usados
na prática em um sistemas de banco de dados, eles devem ser expressos
em alguma linguagem. Esta representação pode ser feita de duas formas:
Os conceitos são usados puramente como uma ferramenta de projeto
e são codificados, por exemplo, em um banco de dados relacional;
Os conceitos de orientação a objetos são incorporados em uma
linguagem que é usada para manipular o banco de dados.
Extensão de uma linguagem de manipulação de dados, como a SQL,
pela adição de tipos complexos e orientação a objetos.
Tomar uma linguagem de programação orientada a objeto e estendê-la
para tratar banco de dados (são as linguagens de programação
persistentes).
Linguagens de Programação Persistentes
Linguagens de bancos de dados diferem das linguagens de programação
tradicionais pelo fato de que elas manipulam diretamente os dados que
são persistentes, ou seja, dados que continuam a existir mesmo depois
que o programa que os criou tenha terminado.
Uma linguagem de programação persistente é uma linguagem de
programação estendida com estruturas para tratar dados persistentes.
Versões persistentes de linguagens de programação como C++ ou
Smalltalk estão entre as mais importantes. Elas permitem que o
programador manipule os dados do banco de dados sem passar por uma
linguagem de manipulação de dados como a SQL.
Essas linguagens são poderosas e é relativamente fácil cometer erros de
programação que danifiquem o banco de dados.
Persistência de Objetos
Persistência por classe: Declarar que uma classe é persistente. Assim, todos os
objetos da classe são, por default, persistentes. Os objetos de classes não
persistentes são transientes.
Persistência por criação: Um objeto é persistente ou transiente, dependendo de
como ele foi criado.
Persistência por marcação: Todos os objetos são criados como transientes mas,
se um objeto deve persistir alem da execução do programa, ele deve ser marcado
explicitamente como persistente antes do programa terminar.
Persistência por referência: Um ou mais objetos são explicitamente declarados
como objetos persistentes (raiz). Todos os outros objetos são persistentes se (e
somente se) forem referidos diretamente, ou indiretamente, a partir do objeto
persistente raiz.
Exemplos de SGBDOOs
Produto
Critério
Objectivity/DB
Objectivity, Inc.
www.poet.com
GemStone (*)
GemStone Systems
www.gemstone.com
Jasmine
Computer Associates
www.cai.com
Definição de dados pelo usuário
SIM
SIM
SIM
Herança Múltipla
SIM
Smalltalk - NÃO
Java - SIM
SIM
Valida cardinalidade entre objetos
SIM
NÃO
SIM (1)
Suporta transações longas
SIM
NÃO
NÃO
Linguagem de definição de atributos
C++, Java, Smalltalk, SQL
Java, Smalltalk
C
C++
ODQL
Java
Armazena os métodos dos objetos no BD
NÃO, os métodos são
armazenados no cliente.
SIM
SIM
Suporta ODL (Object Definition
Language)
SIM
SIM
NÃO
Suporta OQL (Object Query
Language)
SIM
NÃO
SIM
Suporta SQL
SIM
Smalltalk - SIM
Java - NÃO
SIM
via ODBC
Suporta consultas através de interface gráfica
SIM
SIM
SIM
Exemplos de SGBDOOs
Objectivity/DB
Integrado diretamente com a aplicação
APIs (Application Programming Interfaces):
Não é necessário um processo separado;
C++;
SmallTalk;
Java:
Integração com IDE Eclipse;
Ferramentas de Administração e Projeto.
Suporta SQL;
Suporta XML;
Exemplos de SGBDOOs
GemStone
Armazena métodos dos objetos no banco
APIs:
C++;
SmallTalk;
Java.
Suporta SQL apenas através da interface SmallTalk;
Suporta XML, com ambiente de gerenciamento otimizado;
Compatível com .Net.
Exemplos de SGBDOOs
Jasmine
Desenvolvido pela Computer Associates
APIs:
C++;
SmallTalk;
Java;
Oferece todas as funcionalidades de um BD relacional, além das
capacidades da OO;
Suporta OQL;
Suporta SQL;
Possui integração com ferramentas CASE.
Banco de Dados Relacional-Objeto:
Introdução
Modelos de dados relacionais-objeto estendem o modelo de dados relacional
fornecendo um tipo de sistema mais rico, incluindo orientação a objetos e
acrescentando estruturas especiais à linguagem de consultas relacionais, como a
SQL, para tratar os tipos de dados acrescentados.
É introduzido um sistema de tipos aninhados que permitem que os atributos de
tuplas sejam de tipos complexos.
Essas extensões tentam preservar os fundamentos relacionais – em particular, o
acesso declaratório ao dado – enquanto estendem o poder da modelagem.
Os sistemas de banco de dados relacionais-objeto fornecem um caminho de
migração conveniente para usuários de bancos de dados relacionais que desejam
usar características orientadas a objetos.
Relações Aninhadas
Primeira Forma Normal: exige que todos os atributos de uma relação tenham
domínios atômicos. Um domínio é atômico se os elementos do domínio são
considerados unidades indivisíveis.
O modelo relacional aninhado é uma extensão do modelo relacional em que os
domínios podem ser definidos como atômicos ou como relações. Então, o valor de
uma tupla sob um atributo pode ser uma relação, e relações podem ser
armazenadas dentro de relações.
Assim, um objeto complexo pode ser representado por uma única tupla de uma
relação aninhada.
Exemplo:
Considere um sistema de recuperação de documentos em que armazenamos, para
cada documento, as seguintes informações:
Título do documento;
Lista de autores;
Data de aquisição;
Lista de palavras-chave.
Uma relação para esta informação conterá domínios não-atômicos:
título
lista_autores
data
lista_palavra_chave
(dia, mês, ano)
Plano de vendas
{Smith, Jones}
(1,abril, 89)
{lucro, estratégia}
Relatório de status
{Jones, Frick}
(17, julho, 94)
{lucro, pessoal}
Relação documento não-1NFdoc.
Exemplo:
título
autor
dia
mês
ano
palavra_chave
Plano de vendas
Smith
1
abril
89
lucro
Plano de vendas
Jones
1
abril
89
lucro
Plano de vendas
Smith
1
abril
89
estratégia
Plano de vendas
Jones
1
abril
89
estratégia
Relatório de status
Jones
17
junho
94
lucro
Relatório de status
Frick
17
junho
94
lucro
Relatório de status
Jones
17
junho
94
pessoal
Relatório de status
Frick
17
junho
94
pessoal
Versão 1NF da relação documento não-1NF.
Tipos Complexos e Orientação a Objetos
Sistemas com tipos complexos e orientação a objetos permitem que os
conceitos de E-R, como atributos multivalorados, generalizações e
especializações, sejam representados diretamente sem uma tradução
complexa para o modelo relacional.
XSQL – linguagem de consulta que estende a SQL com características de
orientação a objetos.
Tipos Estruturados e Conjuntos
create type MinhaSeqüência char varying
create type MinhaData
(dia integer,
mês char(10),
ano integer)
create type Documento
( nome MinhaSeqüência,
lista_autor setof (MinhaSeqüência),
data MinhaData,
lista_palavra_chave setof (MinhaSeqüência))
create table doc of type Documento.
Tipos Estruturados e Conjuntos
Os tipos criados usando as declarações anteriores são gravados no esquema
banco de dados. Logo, outras declarações que acessam o banco de dados podem
fazer uso das definições desses tipos.
Usualmente, sistemas de tipos complexos aceitam outros tipos de conjuntos,
como matrizes e multiconjuntos.
Matriz_autor MinhaSeqüência[10]: matriz de nomes de autor. Pode-se
determinar quem é o primeiro autor, o segundo autor e assim por diante.
Imprime-execuções multiset(integer): poderia representar o número de cópias
de um documento impresso em cada execução de impressão do documento.
Exemplo:
Diagrama UML
Exemplo:
Esquema Relacional
Exemplo:
Esquema
Objeto-Relacional
Definição dos Tipos
Herança
A herança pode ser no nível de tipos ou no nível de tabelas.
Herança de tipos:
create type Pessoa
( nome MinhaSeqüência,
seguro_social integer)
create type Estudante
(graduação MinhaSeqüência,
departamento MinhaSeqüência)
under Pessoa
create type Professor
(salário integer,
departamento MinhaSeqüência)
under Pessoa
Tanto estudante quanto professor herdam os atributos de Pessoa – isto é,
nome e seguro_social. Estudante e Professor são chamados subtipos de
Pessoa e Pessoa é um supertipo de Estudante, assim como de Professor.
Herança
Suponha que queiramos armazenar informação sobre assistentes de ensino,
que são, simultaneamente, estudantes e professores, talvez até mesmo em
diferentes departamentos herança múltipla
create type AssistenteEnsino
under Estudante, Professor
AssitenteEnsino deve herdar todos os atributos de Estudante e Professor.
Entretanto, existe um problema: os atributos seguro_social, nome e
departamento estão presentes em Estudante, assim como em Professor.
Seguro_social e nome são herdados de uma fonte comum, Pessoa. Então não há
conflito causado por herdá-los a partir de Estudante, assim como de Professor.
Departamento é definido separadamente em Estudante e Professor. De fato, um
assistente de ensino pode ser um estudante de um departamento e um professor em
outro departamento. Assim, deve-se usar o recurso de renomeação.
Herança
create type AssistentedeEnsino
under Estudante with (departamento as estudante_depto),
Professor with (departamento as professor_depto)
Em muitas linguagens de programação, uma entidade deve ter exatamente um
tipo mais específico, isto é, se uma entidade tem mais de um tipo, deve haver um
único tipo ao qual a entidade pertence e, esse único tipo deve ser um subtipo de
todos os tipos aos quais a entidade pertence.
Por exemplo, suponha que uma entidade seja do tipo Pessoa, assim como do tipo
Estudante. Então, o tipo mais específico da entidade é Estudante, já que Estudante
é um subtipo de Pessoa.
Entretanto, uma entidade não pode ser do tipo Estudante e do tipo Professor, a
menos que haja um tipo, como AssistentedeEnsino, que é um subtipo de Professor
e de Estudante.
Herança
A fim de que cada entidade tenha, exatamente, um tipo mais específico, teríamos
de criar um subtipo para cada combinação possível dos supertipos. Dentro de um
contexto universitário, por exemplo, poder-se-ia ter subtipos como:
EstudantenãoGraduadoEstrangeiro;
EstudanteGraduadoEstrangeiroJogadordeFutebol;
Etc...
Uma melhor abordagem ao contexto de sistemas de banco de dados é permitir a
um objeto ter múltiplos tipos, sem possuir um tipo mais específico.
Sistemas relacionais-objeto podem modelar tal característica pelo uso de herança
no nível de tabelas, e permitir que uma entidade exista em mais de uma tabela de
uma vez.
Herança
Herança de tabelas:
create table pessoas
(nome MinhaSeqüência,
seguro_social integer);
create table estudantes
(graduação_MinhaSeqüência,
departamento_Minhaseqüência)
under pessoas;
create table professores
(salário integer,
departamento MinhaSeqüência)
under pessoas;
Herança
As sub-tabelas estudantes e professores herdam todos os atributos da tabela
pessoas.
Não há necessidade de criar tabelas adicionais, como assistentesdeensino, que
herdam tanto de estudantes quanto de professores, a menos que hajam atributos
específicos para entidades que são tanto estudantes como professores.
Requisitos:
Cada tupla da supertabela pessoas pode corresponder a no máximo uma
tupla em cada uma das tabelas estudantes e professores, isto é, ter os
mesmos valores para todos os atributos herdados.
Cada tupla em estudantes e professores deve ter, exatamente, uma tupla
correspondente em pessoas, ou seja, com os mesmos valores para todos os
atributos herdados.
Herança
Sem a primeira condição, poderíamos ter duas tuplas em estudantes (ou
professores) que corresponderiam à mesma pessoa.
Sem a segunda condição, poderíamos ter uma tupla em estudantes ou em
professores que não corresponderia a qualquer tupla em pessoa, ou que
corresponderia a várias tuplas em pessoa.
As sub-tabelas podem ser armazenadas de uma maneira eficiente sem replicação
de todos os campos herdados. Atributos herdados, outros que não a chave
primária da supertabela, não necessitam ser armazenados e podem ser derivados
por meio de uma junção com a supertabela, baseada na chave primária.
Tipos Referência
Um atributo de um tipo pode ser uma referência a um objeto de um tipo
especificado.
Exemplo: referências a pessoas são do tipo ref(Pessoa). O campo lista_autor do
tipo Documento pode ser redefinido como:
lista_autor setof ( ref (Pessoa) )
que é um conjunto de referências a objetos Pessoa.
As tuplas de uma tabela também podem ter referências a elas. A chave primária
da tabela pode ser usada para criar essas referências.
Alternativamente, cada tupla de uma tabela pode ter um identificador de tupla
como um atributo implícito, e uma referência a uma tupla é simplesmente o
identificador de tupla.
Consultas com Tipos Complexos
A SQL foi estendida para manipular tipos complexos.
Exemplo: encontre o nome e o ano de publicação de cada documento.
select nome, data.ano
from doc
Observe que o campo ano do atributo composto data é referido pelo uso de uma
notação de ponto.
SQL: Atributos Relação-Valorados
A SQL estendida permite que uma expressão para uma relação apareça em
qualquer lugar em que o nome da relação possa aparecer, como em uma
condição from.
A habilidade de usar subexpressões livremente torna possível tirar vantagem da
estrutura de relações aninhadas, de diferentes maneiras.
Suponha a relação pdoc com o seguinte esquema:
create table pdoc
(nome MinhaSeqüência,
lista_autor setof (ref (pessoa)),
data MinhaData,
lista_palavra_chave setof (MinhaSeqüência))
SQL: Atributos Relação-Valorados
Encontre todos os documentos que têm a palavra “banco de dados” como
uma de suas palavras-chaves:
select nome
from pdoc
where “banco de dados” in lista_palavra_chave
Observe que foi usado o atributo relação_valorado lista_palavra_chave em
uma posição em que a SQL teria exigido uma subexpressão select-fromwhere.
SQL: Atributos Relação-Valorados
Suponha que queiramos uma relação contendo pares da forma
“nome_documento, nome_autor” para cada documento e cada autor do
documento.
select B.nome, Y.nome
from pdoc as B, B.lista_autor as Y
Já que o atributo lista_autor de pdoc é um campo conjunto_valorado, ele pode
ser usado em uma condição from, onde deveria ser usado uma relação.
Da mesma forma, pode-se usar as funções agregadas nestes campos:
select nome, count (lista_autor)
from pdoc
SQL: Expressões Path
Suponha a tabela definida como a seguir:
create table estudantes_phd
(orientador ref (pessoa) )
under pessoa
Encontre agora os nomes dos orientadores dos estudantes de doutorado.
select estudantes_phd.orientador.nome
from estudantes_phd
Já que estudante_phd.orientador é uma referência à tupla na tabela pessoa, o
atributo nome na consulta é o atributo nome da tupla da tabela pessoa;
As referências podem ser usadas para esconder operações de junção;
Sem o uso de referências, o campo orientador de estudantes_phd seria uma
chave estrangeira.
Aninhar e Desaninhar
A transformação de uma relação aninhada para uma relação na 1NF é
chamada de desaninhar.
A relação doc tem dois atributos (lista_autor e lista_palavra_chave) que são
relações aninhadas.
A conversão desta relação, com relações aninhadas, em uma relação básica
pode ser feita da seguinte forma:
select nome, A as autor, data.dia, data.mês, data.ano, k as palavra_chave
from doc as B, B.lista_autor as A, B.lista_palavra_chave as K.
Aninhar e Desaninhar
O processo inverso de transformação de uma relação 1 NF em uma
relação aninhada é chamado aninhar.
select título, set (autor) as lista_autor, (dia,mês,ano) as data, set
(palavra_chave) as lista_palavra_chave
from doc_flat
groupby título, data
Funções
Sistemas relacionais-objeto permitem que funções sejam definidas pelos
usuários.
Suponha que se desja uma função que, dado um documento, retorne a
contagem do número de autores.
create function total_autor(um_doc Documento)
returns integer as
select count (lista_autor)
from um_doc
Valores e Objetos complexos
Criação de uma tupla do tipo definido pela relação doc:
(“plano de vendas”, set (“Smith”, “Jones”), (1, “abril”, 89), set (“lucro”,
“estratégia”))
Inserindo essa tupla em uma relação:
insert into doc
values (“plano de vendas”, set (“Smith”, “Jones”), (1, “abril”, 89), set (“lucro”,
“estratégia”))
Benefícios do Modelo de Dados
Objeto-Relacional
Nova Funcionalidade
Aumenta indefinidamente o conjunto de tipos e funções fornecidas
pelo SGBD;
Desenvolvimento de aplicações simplificado
Reuso de código;
Consistência
Permite a definição de padrões, código reusável por todas as
aplicações.
Linguagem de Consultas para
Bancos de Dados Objeto-Relacional
O resultado de uma consulta ainda consiste de tabelas
Um SGBD Objeto-Relacional ainda é relacional pois suporta dados
armazenados em tabelas formadas por linhas e colunas
A linguagem de consultas para BDOR é uma extensão da linguagem
SQL, utilizada para definição e manipulação de dados e consultas
BDOO versus BDRO
Extensões persistentes das linguagens de programação e sistemas
relacionais-objetos estão direcionados a diferentes mercados.
A natureza declaratória e o poder limitado da linguagem SQL (comparado
com uma linguagem de programação) fornecem boa proteção de dados
contra erros de programação e tornam otimizações de alto nível
relativamente fáceis.
Linguagens de programação persistentes destinam-se a aplicações que
tenham altas exigências de desempenho. Elas fornecem acesso com baixo
overhead ao dado persistente e eliminam a necessidade de tradução do
dado se os dados tiverem de ser manipulados usando uma linguagem de
programação.
BDR versus BDOO versus BDRO
Sistemas relacionais: tipos de dados simples, linguagens de consulta
poderosas e alta proteção.
Linguagem de programação simples baseada em BDOOs: tipos de
dados complexos, integração com linguagem de programação, alto
desempenho.
Sistemas relacionais-objeto: tipos de dados complexos, linguagens de
consultas poderosa, alta proteção.
Algumas Considerações...
SGBDOO - Principais Barreiras:
Culturais
“Pra que mexer em time que está ganhando?”;
Falta de familiaridade com OO;
MID (medo, incerteza e dúvida);
Grande parte dos SGBDOOs são desenvolvidos por empresas
pequenas;
Risco de ficar “sem suporte”;
Financeiras
Alto custo de migração;
Tempo para migração;
Treinamento de pessoal;
Necessidade de profissionais mais qualificados;
Algumas Considerações...
SGBDOOs:
União de duas tecnologias
Bancos de Dados;
Orientação a Objetos.
Objetivos semelhantes ao SGBDR:
Persistir dados;
Recuperação;
Comparação;
Tratamento / Gerenciamento.
Vantagem: Utilização da tecnologia OO.
Desvantagem: Ainda pouco popular.
Tendências
SGBDO-R (Objeto-relacional)
Ferramentas de Mapeamento Objeto-Relacional
Ex.: Hibernate (www.hibernate.org)
Camada que provê interface para a aplicação
Persistência de forma transparente
A aplicação trabalha como se estivesse conectada a um BDOO
Mapeamento Objeto-Relacional
Modelo em 3 Camadas: Separação clara entre
visualização, regra de negócio e dados.
Visualização:
Camada responsável pelos elementos de
Interação com o usuário;
Negócio: Camada responsável pela implementação da
regra de negócio;
Dados: Camada responsável pelo armazenamento e
integridade dos dados.
Mapeamento Objeto-Relacional
Os dados são acessados na camada de negócios.
O Mapeamento Objeto-Relacional é portanto, uma
ferramenta de auxílio.
Hibernate
Framework de mapeamento objeto
relacional para aplicações Java;
Open Source;
Suporte:
Coleções;
Relacionamento entre objetos;
Herança, polimorfismo e composições;
Linguagem de consulta própria: (HQL –
Hibernate Query Language).
Bibliografia Utilizada:
Sistemas de Banco de Dados. Abraham Silberchatz, Henry F. Korth e S.
Sudarshan. 4ª Edição. Editora Campus, 2006.
Introdução a Sistemas de Banco de Dados. C. J. Date. 7ª Edição, Editora
Campus, 2000.
Introdução a Banco de Dados (Apostila). Osvaldo Kotaro Takai, Isabel Cristina
Italiano, João Eduardo Ferreira. DCC-IME-USP, 2005.
Sistemas de Banco de Dados, Fundamentos e Aplicações. R Elsmari, S. B.
Navathe. Rio de Janeiro: Editora LTC, 2002.
Sistemas de Banco de Dados. Ramez Elsmari e Shamkant B. Navathe. 4ª
Edição. Editora Pearson Addison Wesley, 2005.
Banco de Dados: Fundamentos, Projeto e Implementação. (Cap. 5). David M. Kroenke,
6ª Edição. Editora LTC, 1999.
Uma Reflexão sobre Banco de Dados Orientados a Objetos. Boscarioli, et. al.
CONGED, 2006.
The Object-Oriented Database System Manifesto. Atkinson, et al. Agosto, 1989.
Fundamentals of Database Systems. Ramez Elsmari, Shamkant B. Navathe.
Addison Wesley Longman, 2000.
Download