Escolar Documentos
Profissional Documentos
Cultura Documentos
O modelo funcional é composto por múltiplos DFD's (Diagramas de Fluxo de Dados), que
especificam o significado das operações e restrições. Um DFD contém processos que
transformam dados, fluxos de dados que movimentam os dados, objetos atores que produzem e
consomem dados e objetos depósitos, que armazenam dados passivamente.
Modelo Dinâmico - Representa a parte dinâmica do sistema. Este modelo tem como elementos
básicos:
o Evento: transmissão de informações entre objetos;
o Estado: abstração de um objeto (atributo + ligações).
Quando um evento ocorre estimulando um objeto pode ocorrer uma resposta a este estímulo
e/ou, eventualmente, a geração de um outro evento. Um evento separa dois estados e um
estado separa dois eventos.
O modelo dinâmico é composto, basicamente, por dois tipos de diagramas:
o Diagramas de Eventos: representam os eventos entre objetos do sistema;
o Diagramas de Estados: representam os estados e os eventos ocorridos em uma classe,
isto é, descreve o comportamento de uma classe de objetos.
Página 1 de 40
Em suma, o modelo dinâmico é uma coleção de diagramas de estados que interagem uns com
os outros através de eventos compartilhados.
2.2 Modelos lógicos ou de implementação (nível intermediário) - O modelo lógico já leva em conta
algumas limitações e implementa recursos como adequação de padrão e nomenclatura. Define as
chaves primárias e estrangeiras. Deve ser criado levando em conta os exemplos de modelagem de
dados criados no modelo conceitual.
Regras de Derivação:
o Derivação de relacionamentos
Regras de Restrição:
o Restrição de domínio
o Restrição de Integridade
o Restrição de Implementação
2.3 Modelo Físico (baixo nível) – Inclui a análise das características e recursos necessários para
armazenamento e manipulação das estruturas de dados (estrutura de armazenamento, endereçamento,
acesso e alocação física).
Modelo de partição de memória (frame-memory model).
Página 2 de 40
Projeto e implementação de Banco de Dados
Página 4 de 40
Alguns Conceitos básicos
Asserções => Constrains com condições semelhantes a clausula where
Atributos: propriedades da entidade. (coluna , campo , etc,..).
Conjunto de entidades: conjunto que abrange entidades de mesmo tipo, que compartilham os
mesmos atributos.
Conjunto de entidades Fracas: Atributos insuficientes para formar uma chave primária. Para
solucionar cria-se um identificador.
Derivado – resultados calculados.
Integralidade:
Disjunção: uma entidade generalizada, derivando várias subclasses especializadas.
Disjunção Parcial: Somente algumas especializações são mostradas
Disjunção Total: Todas as especializações são mostradas
Over-lap: tipo de disjunção em que uma super classe pode ter mais que uma especialização
dentro das disjunções disponíveis.
Entidade: pode ser definida como qualquer coisa do mundo real, abstrata ou concreta.
Exemplos: Cliente, Produto, Contrato, Vendas, etc.
Entidade Fraca: Entidade que não possui identificador próprio, dependente de uma super-
classe.
Especialização => Top-down “contrário de” Generalização => Botton-up
Funções agregadas => tomam um conjunto de valores e retornam um valor simples (sum,
count,etc).
Heap file ou pile file => registros gravados na ordem de entrada, arquivos desordenados.
Junção Externa => outer join
Monovalorados ou multivalorados – Ex: nº empréstimo ou dependentes.
Nota: Chama-se Domínio o conjunto de valores possíveis do atributo.
Nulos – tipo Null.
Projeção => em vez do * lista-se apenas as colunas desejadas.
Projeção generalizada => Projeção + fórmulas
Reticulado de especialização: Hierarquia, subclasse da subclasse.
Simples ou compostos – Ex: nome ou nome e sobrenome.
Spanned => split de um bloco de registro (não spanned é quando não existe a quebra de um
registro ao meio entre um bloco e outro, como ocorre no Spanned.
Subclasse compartilhada: herança múltipla.
Página 5 de 40
Álgebra Relacional
Simbologia:
<condição de seleção>(R) Ex: id=26 (Empregado)
<lista de atributos ou projeção>(R) Ex: pnome, sal, nfone (Empregado)
: União
: interseção
-: minus
: junção Ex: Dept_TempDepartamento id_dpto=id_emp Empregado
: natural join Ex: Dpto_projProjeto * (nome,idproj,data)(Departamento)
Página 6 de 40
Cardinalidade.
A Cardinalidade indica quantas ocorrências de uma Entidade participam no mínimo e no máximo do
relacionamento.
Cardinalidade Mínima - define se o relacionamento entre duas entidades é obrigatório ou não.
Ex: Abaixo temos a entidade Pais e a Entidade UF.
Um país possui no mínimo ZERO UF
(Existem paises que não possuem
Estados . Ex: Vaticano)
Uma UF pertence pelo menos a UM País.
Nota: O nome UF talvez não seja mais
apropriado. A entidade representa um
estado ou subdivisão equivalente em um
País
Cardinalidade UM para N.
PRODUTO possui nenhum ou muitas
modalidade de produto
MODALIDADE DE PRODUTO pertence a um
produto.
Nota: A cardinalidade UM para N leva a chave primária do lado UM para o lado N. Neste caso o
atributo recebe o nome de chave estrangeira ou Foreign Key ( FK ). Chave Estrangeira é a chave
primária de uma entidade que aparece em outra entidade em virtude do relacionamento.
Página 7 de 40
Cardinalidade N para N.
A cardinalidade N para N leva para o modelo lógico a necessidade de definição de mais um entidade.
Chamamos isto de ASSOCIATIVA. Para o exemplo acima teríamos:
Página 8 de 40
Anomalias de Modificações
Quando o banco de dados é mal projetado ocorrem Anomalias:
Anomalia de Inserção: Quando deve-se preencher colunas com Null por falta de informação.
Anomalias de Exclusão: Elimina-se informações de um setor ao excluir funcionários, por
exemplo.
Anomalias de Alteração: Ao alterar um setor deve-se alterar a tabela de funcionários inteira por
ex.
Dependência Funcional
Uma dependência funcional é uma restrição entre dois conjuntos de atributos de uma base de dados.
Obs: Nenhum modelo é suficientemente claro se não for acompanhado de uma definição formal
dos elementos, fazemos isto através do Dicionário de Dados. Os conceitos que podem ser triviais
a quem esta modelando podem não ser para pessoas leigas no assunto. Assim o dicionário de
dados tem o objetivo de deixar claro qualquer informação que seja de valia para o processo de
compreensão e unificação de conceitos.
Normalização: é o conjunto de regras que visa minimizar as anomalias de modificação dos dados e dar
maior flexibilidade em sua utilização.
Finalidades:
Minimização de redundâncias e inconsistências;
Formas Normais
Página 9 de 40
Realizar o projeto lógico de um BD usando o modelo relacional consiste em escolher o conjunto de
relações mais apropriado para representar as informações daquele BD, isto é, determinar que relações
serão necessárias e quais atributos cada relação terá.
A teoria da normalização permite reconhecermos os casos em que algumas relações possuem
propriedades indesejáveis, e mostra como essas relações podem ser convertidas para uma forma mais
desejável.
A teoria da normalização é baseada no conceito de formas normais. Uma relação é dita estar em uma
determinada forma normal, se ela satisfaz a um conjunto específico de restrições.
Existem vária formas normais, primeira forma normal (1FN), segunda forma normal (2FN), terceira forma
normal (3FN),... Relações na 1FN são mais desejáveis do que relações não normalizadas.
Relações na 2FN são mais desejáveis do que relações apenas na 1FN,... Ao realizar o projeto lógico de
um BD, escolhe-se em geral relações na FNBC.
Inicialmente Codd criou as três primeiras formas de normalização chamando-as de: primeira forma
normal (1NF), segunda forma normal (2NF) e terceira forma normal (3NF). Uma definição mais forte da
3NF foi proposta depois por Boyce-Codd, e é conhecida como forma normal de Boyce-Codd (FNBC)
Para determinar em que forma normal uma determinada relação está, é preciso considerar o significado
das informações que aquela relação representa no BD.
O atributo disciplinas cursadas não é atômico. Logo a relação Aluno não está na 1FN.
Transformando a relação Aluno para o formato abaixo, ela fica na 1FN.
No modelo relacional escolhemos trabalhar com relações normalizadas, pois isto não traz restrição ao
que pode ser representado e traz uma simplicidade nas estruturas de dados e em conseqüência na
manipulação dos dados.
Página 10 de 40
Chave primária: CPF cliente, no. conta
CPF cliente, no. conta -> senha
CPF cliente, no. conta -> nome cliente
CPF cliente, no. conta -> telefone
CPF cliente -> nome cliente
CPF cliente -> telefone
Os atributos nome cliente e telefone não são dependentes funcionais totais da chave primária.
(Intuitivamente observamos que eles não descrevem a informação identificada pela chave primária.) A
relação está na 1FN, mas não está na 2FN. Realizando uma decomposição sem perdas, obtém-se:
Estas duas relações estão na 2FN. Com isso, eliminamos redundância, pois da maneira anterior, os
atributos nome cliente e telefone apareceriam repetidos para cada conta de um mesmo cliente.
Estas duas relações estão na 3FN. Com isso, eliminamos redundância, pois da maneira anterior, o
atributo nome curso apareceria repetido para cada aluno de um mesmo curso.
Determinante Funcional
Um determinante funcional é um atributo ou conjunto de atributos, do qual algum outro atributo é
dependente funcional.
Exemplos:
· Na relação Aluno da seção anterior, os atributos no. reg. aluno e cód. curso são determinantes
funcionais.
· Na relação Aluno¢ da seção anterior, o atributo no. reg. aluno é um determinante funcional.
Na relação Curso da seção anterior, o atributo cód. curso é um determinante funcional.
Página 11 de 40
Forma Normal de Boyce e Codd (FNBC)
Página 12 de 40
Quarta forma normal
Página 13 de 40
A relação está na 2FN, mas não está na FNBC.
Página 14 de 40
Projeto Lógico de Bancos de Dados
O projeto lógico de um BD utilizando o modelo relacional é iniciado a partir de um conjunto inicial de
relações, obtidas com a transformação do projeto conceitual em relações. Com a identificação das
dependências funcionais entre os atributos das relações, realiza-se a normalização das relações, que,
através de idéia de decomposição sem perdas, são transformadas em um conjunto de relações
equivalente ao original, porém em um formato mais correto.
O objetivo geral do processo de normalização é obter relações em uma forma mais desejável, reduzindo
a redundância e evitando problemas nas manipulações dos dados. Quando realizamos o projeto
conceitual do BD (usando o modelo entidade-relacionamento), antes de realizarmos o projeto lógico do
BD (usando o modelo relacional), as relações já ficam em geral bem organizadas, reduzindo as
normalizações necessárias.
Página 15 de 40
Página 16 de 40
Separação
A -> BC então A -> B e A -> C
Exemplo:
CPF -> nome, endereço então CPF -> nome e CPF -> endereço
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o nome e o endereço de uma pessoa, então com este mesmo
número eu posso encontrar apenas o nome e com este mesmo número eu posso encontrar apenas o
endereço.
Acumulação
A -> B então AC -> B
Exemplo:
CPF -> endereço então CPF, idade -> endereço
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o endereço de uma pessoa, então com este mesmo número
mais a idade da pessoa eu posso encontrar o endereço também.
Transitividade
A -> B e B -> C então A -> C
Exemplo:
CPF -> código-cidade e código-cidade -> nome-cidade então CPF -> nome-cidade
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o código da cidade de uma pessoa, e com o código da cidade
eu encontro o nome da cidade, então com o número do CPF eu posso encontrar o nome da cidade.
Pseudo-Transitividade
A -> B e BC -> D então AC -> D
Exemplo:
CPF -> código-funcionário e código-funcionário, mês -> salário-funcionário então CPF, mês -> salário-
funcionário.
Leia o exemplo acima da seguinte maneira:
Se com um número de CPF eu encontro o código do funcionário, e com o código do funcionário mais um
certo mês eu encontro o salário que ele recebeu naquele mês, então com o número do CPF mais um
certo mês eu posso encontrar o salário que ele recebeu naquele mês.
Persistência de objetos
Persistência por classe – classe é criada default como persistente.
Persistência por criação – depende de como foi criado.
Persistência por marcação – marcado como persistente após criação.
Página 17 de 40
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
referenciados diretamente, ou indiretamente, a partir do objeto persistente raiz.
Página 18 de 40
Prototipação
Finalidade da Prototipação
"Prototipação é o processo de construção de um modelo de um sistema. No processo de
desenvolvimento de sistemas de informação, os protótipos são utilizados para auxiliar os projetistas e
desenvolvedores de sistemas a construir aplicações que sejam intuitivas e de fácil utilização por parte de
seus usuários”.
Protótipos são uma valiosa ferramenta no projeto de aplicações. Eles podem ajudar na avaliação de
alternativas de design a qualquer estágio do processo de desenvolvimento. Durante a fase conceitual os
elementos básicos do design podem ser explorados e testados junto com os usuários. Ao serem
projetadas as telas, menus, relatórios e levantadas as formas de interação em maior detalhe, estas
questões podem ser discutidas, avaliadas e testadas. Mais adiante modelos mais elaborados podem ser
utilizados para dar uma visão antecipada da aplicação final. Adicionalmente "storyboards" podem ser
adotados para verificação básica de sua utilização.
Durante a fase de análise de um sistema, quando são definidos os requisitos básicos, os analistas de
sistemas coletam informações sobre os procedimentos atuais do cliente e os processos de negócio
relativos ao sistema proposto. Adicionalmente eles estudam o sistema atual, se houver, conduzem
entrevistas e coletam documentação. Isto ajuda aos analistas na elaboração de um conjunto inicial de
especificações.
O emprego da prototipação ajuda a melhorar este processo, pois possibilita a conversão das
especificações básicas, ainda que algumas vezes intangíveis, em um modelo operacional tangível, ainda
que limitado, do sistema desejado. O feedback recebido dos usuários, obtido a partir da utilização de um
modelo do sistema com o qual eles podem interagir, facilita a obtenção de respostas e avaliação dos
usuários, feedback este que o analista irá utilizar para, eventualmente, modificar os requisitos originais
bem como elaborar novas especificações.
Prototipação se apresenta sob muitas formas - desde esquemas simples em papel ou softwares onde os
usuários podem colar controles e objetos (disponíveis em ferramentas RAD - Rapid Application
Development), utilização de ferramentas CASE (Computer Aided Software Engineering), linguagens de
quarta geração etc. Muitas empresas utilizam várias ferramentas durante o processo de prototipação.
Por exemplo, uns utilizarão esquemas em papel na análise inicial para facilitar um feedback concreto dos
usuários e depois desenvolvem um protótipo operacional utilizando linguagens de quarta geração, tais
como Visual FoxPro, durante a fase de projeto.
Apesar de haverem algumas diretrizes para determinar quando utilizar prototipação de software, dois
especialistas acreditaram que algumas regras estabelecidas eram nada mais do que conjecturas. No
artigo "An Investigation of Guidelines for Selecting a Prototyping Strategy", Bill C. Hardgrave e Rick L.
Wilson comparam as diretrizes para prototipação que constam na literatura sobre sistemas de
informação com seu uso efetivo por empresas que desenvolveram protótipos.
Hardgrave e Wilson enviaram 500 pesquisas sobre utilização de prototipação para gerentes de sistemas
de todos os Estados Unidos (EUA). As empresas representadas pertenciam a várias industrias,
Página 20 de 40
segmentos de mercado e ramos - educação, serviços de saúde, instituições financeiras, transporte,
varejo, seguradoras, governamentais, manufatureiras e serviços.
Baseado nos resultados de sua pesquisa, Hardgrave e Wilson descobriram que as empresas seguiam
apenas seis das dezesseis diretrizes recomendadas na literatura sobre sistemas de informação.
As diretrizes seguidas pelas empresas cujo emprego foi determinante como tendo um efeito estatístico
no sucesso dos sistemas foram:
Prototipação deve ser utilizada apenas quando os usuários podem participar ativamente no projeto Os
desenvolvedores devem ter experiência em prototipação ou treinamento adequado
Os usuários envolvidos no projeto devem ter experiência em prototipação ou serem educados no seu
uso e finalidade
Os protótipos devem se tornar parte integrante do sistema final apenas se os desenvolvedores tiverem
acesso às ferramentas de suporte à prototipação
Se os processos de experimentação e aprendizado são necessários, antes que exista um compromisso
completo com um projeto, a prototipação pode ser utilizada com sucesso.
A prototipação não é necessária se o desenvolvedor já está familiarizado com a linguagem a ser utilizada
no projeto do sistema
Dentre os seus muitos benefícios, esta abordagem reduz o custo e o tempo envolvidos no processo de
prototipação, permitindo mais iterações, dando aos desenvolvedores a oportunidade de obter feedback
imediato dos usuários no refinamento do design. Isto elimina definitivamente muitas das desvantagens
da prototipação, pois os protótipos em papel são baratos de criar, diminuindo a probabilidade dos
desenvolvedores se tornarem dependentes de seu trabalho e dos usuários alimentarem expectativas
quanto ao desempenho do sistema.
Deve ser ressaltado que os maiores benefícios da utilização de prototipação é dar aos usuários e
desenvolvedores a noção exata do sistema que deverá ser desenvolvido, estabelecer uma linguagem
comum a ser utilizada na comunicação entre eles, incentivar a interação durante todo o processo, desde
a elaboração inicial do protótipo até o desenvolvimento final do sistema, decorrendo daí um sistema
completo, útil, de fácil utilização, indo de encontro às espectativas dos usuários que, portanto,
apresentarão grande satisfação com o resultado final.
James Martin, pai do "Computer Aided Software Engineering" (CASE), e o cérebro por trás do "Rapid
Application Development (RAD)", escreveu:
"Rapid Application Development (RAD) is a development lifecycle designed to give much faster
development and higher-quality results than those achieved with the traditional lifecycle. It is designed to
take the maximum advantage of powerful development software that has evolved recently."
Página 21 de 40
Indexação:
Organização heap File (ou Pipe file): Utilizado em arquivos de registro desordenados.
Funciona como pilha, necessita reorganização devido às exclusões de registros e necessita de
classificação externa.
Arquivos de registros ordenados: Possui um campo de classificação (campo-chave). Uma
pesquisa binária pode ser feita com base em blocos em vez de registros. A pesquisa vai ao meio
da lista de busca e vai quebrando ao meio, busca pra cima ou pra baixo dependendo do valor, e
assim vai quebrando ao meio até achar o registro procurado.
Técnicas de Hashing: Necessita campo único (chave)
o Hashing Interno: Normalmente implementado por uma tabela hash, por meio de um
vetor de registros.
o Hashing Externo: Hashing para arquivos em disco é constituído de buckets (baldes),
onde existe uma tabela com os endereços de blocos de disco.
Os tipos de índice mais predominantes são baseados em arquivos ordenados (índices em nível
único) e estruturas de dados de árvores (índices multiníveis, árvores –B). Eles também podem ser
construídos em hashing ou em outras estruturas de busca de dados.
Tipos de índices:
Primário – Arquivo ordenado, possui um espelho do campo chave (chamado Chave primária) e
um ponteiro para o bloco do registro.
o Registro âncora – Primeiro registro do bloco
o Índice denso – Possui ponteiro para cada registro
o Índice esparso – Ponteiros apenas para os registros âncoras
Clustering (Agrupamento) – Não possui campo chave, nem valor distinto para os registros.
Funciona como um índice esparso, apontando para cada agrupamento de registros
semelhantes.
Secundário – Contém ponteiros para outros registros, únicos ou não. Utiliza índice denso e com
pesquisa binária nas entradas.
Multiníveis – Seu objetivo é o de reduzir o tempo em relação à busca binária. Funciona com um
primeiro nível de blocos de índices ordenados, e um segundo nível (índice primário para o
primeiro nível) que aponta para as ancoras do primeiro nível. Se a tabela for muito grande pode-
se gerar um terceiro nível para controlar os segundos níveis, e assim sucessivamente. O número
de ponteiros em um nó é chamado de fanout do nó, e vão de n/2 a n.
Arvores-B – Uma extensão dos múltiníveis, onde os nós sofrem balanceamento, de forma a
garantir que os registros procurados passarão sempre pelo mesmo número de níveis. Os
ponteiros para os registros originais podem estar em qualquer nó, em qualquer nível.
Arvores-B+ - Os ponteiros para os registros originais só se encontram nos nós folhas no último
nível da árvore. Por isso a estrutura deles difere dos nós internos.
Bitmap – Semelhante ao B-tree, porém em cada folha ele contém uma seqüência de bits. Ele é
ideal para situações de baixa cardinalidade em grandes tabelas.
Página 22 de 40
Processamento de transações
O controle de concorrência é necessário para evitar problemas como: Atualização perdida, Atualização
temporária (Dirty read), sumário incorreto e leitura sem repetição.
Estados da transação e operações adicionais:
Begin_transaction: Inicio da execução da transação.
Read ou Write: Operações de leitura e escrita em itens de banco de dados, que são executadas
como parte da transação, são registrados no log.
End_transaction: Estado de efetivação parcial, fim da execução de transação checa se a
transação pode ser aplicada ao banco de dados. O log é gravado em disco, para garantir
recuperação em caso de falha.
Commit_transaction: Afirma que as alterações podem ser seguramente efetivadas e não
desfeitas. Ocorre a gravação em disco. Grava um registro de efetivação no log.
Rollback: Término sem sucesso.
Propriedades ACID
Tipos de Bloqueios
Binários – Pode ter dois estados ou valores: bloqueado ou desbloqueado.
Compartilhados/Exclusivos (Leitura/Escrita) – Também chamado de bloqueio de múltiplo-
modo, há três operações de bloqueio:
o read_locked(X) – Bloqueado-compartilhado (shared-locked) – permite que outras
transações leiam o item.
o write_locked(X) – bloqueado-exclusivo (exclusive-locked) – totalmente bloqueado para
leitura e escrita
o unlocked(X) - Desbloqueado
Cada registro na tabela de bloqueio terá quatro campos: <nome do item de dado,
LOCK,num_de_leituras, transações_bloqueio>.
Conversão de bloqueio – Promoção quando gera uma operação write_lock(X) ou
rebaixamento de bloqueio para uma operação read_lock(X).
Protocolo de bloqueio em duas fases (2PL) – básico,estrito, conservador e rigoroso, sendo que
estrita e rigorosa são as mais comuns por causa de suas propriedades de recuperação, que são
melhores.
Bloqueios de intenção
Granularidade do item de dados:
Fina – para tamanhos pequenos de item.
Grossa – para tamanhos grandes de item.
Página 23 de 40
A idéia subjacente nos bloqueios de intenção é que a transação indique, ao longo do caminho da raiz ao
nó desejado, qual o tipo de bloqueio (compartilhado ou exclusivo) ela irá solicitar de um dos
descendentes do nó. Há três tipos de bloqueio de intenção:
1. Intenção compartilhada (IS) indica que bloqueio(s) compartilhado(s) será(ao) solicitados em
algum nó descendente.
2. Intenção exclusiva (IX) indica que bloqueio exclusivo será solicitado em algum nó descendente.
3. Intenção compartilhada exclusiva (SIX) indica que o nó corrente está bloqueado em modo
compartilhado, mas bloqueio exclusivo será solicitado em algum nó descendente.
Mecanismo de enfileiramento
Os pedidos por travas são postos em fila, quando a sessão que tem a trava libera-la, a sessão seguinte
a receberá e assim por diante.
Página 24 de 40
Página 25 de 40
Técnicas de recuperação de banco de dados
A bufferização consiste em controlar a troca de páginas entre a memória e o disco, a isso se chama
“flush” ou substituição, com exceção das páginas com flag pi-unpin setado para 1(pinned).
Terminologia
Entrada de log do tipo REDO inclui o novo valor (AFIM).
Entrada de log do tipo UNDO incluem o valor antigo (BFIM).
Se uma página em cache atualizada por uma transação não puder ser gravada antes que a
transação se efetive, ela será chamada de abordagem não-roubada (no-steal). O bit de pin-
unpin indicará se a página não puder ser escrita de volta no disco. Do contrário, se o protocolo
permitir o buffer atualizado antes que a transação se efetive, ele será chamado roubado (steal).
Steal será usado quando o gerenciador do cachê (buffer) do SGBD necessitar de um frame de
buffer para outra transação, e o gerenciador do buffer substituir uma página existente que tenha
sido atualizada, mas cuja transação não tenha se efetivado.
Se todas as páginas atualizadas por uma transação forem imediatamente escritas no disco
quando a transação se efetivar, ela será chamada abordagem forçada (force). Do contrário,
será chamada não- forçada (no-force).
Um registro [checkpoint] é escrito periodicamente dentro do log, no ponto em que o sistema grava no
banco de dados no disco todos os buffers do SGBD que tiverem sido modificados.
Fuzzy checkipointing – Nesta técnica, o sistema poderá reassumir o processamento das transações
depois que o registro [checkpoint] for escrito no log, sem ter de esperar a gravação do buffer em disco.
Entretanto, até que ocorra essa gravação, o registro [checkpoint] anterior permanecerá válido.
Se algum valor de item de dados tiver sido alterado pela transação e gravado no banco de dados, ele
deverá ser restaurado aos seus valores anteriores (BFIM). As entradas de log do tipo desfazer (UNDO)
são usadas para restaurar os valores antigos dos itens de dado que deverão ser revertidos. Esse
fenômeno é chamado reversão em cascata (cascading rollback).
Atualização Adiada
Protocolo típico de atualização adiada pode ser caracterizado como uma abordagem não-roubada (no-
steal):
1. Uma transação não pode mudar o banco de dados em disco até que ela alcance seu ponto de
efetivação.
2. Uma transação não alcança seu ponto de efetivação até que todas as suas operações de
atualização sejam registradas no log e até que seja forçada a gravação do log no disco.
Atualização Imediata
Nessas técnicas, quando uma transação emite um comando de atualização, o banco de dados pode ser
imediatamente atualizado, sem nenhuma necessidade de esperar que a transação alcance seu ponto de
efetivação. Entretanto, uma operação de atualização deve, ainda assim, ser registrada no log (em disco)
antes de sua aplicação no banco de dados – usando o protocolo registro adiantado em log (write-ahead
logging) -, de tal forma que possamos recuperá-los em caso de falha.
Página 26 de 40
Paginação Shadow (Sombra)
Considera que o banco de dados é composto por um número de páginas de tamanho fixo (ou blocos de
disco). Quando se inicia uma transação, o catálogo corrente é copiado em um catálogo shadow. O
catálogo shadow é, então, salvo em disco, enquanto o catálogo corrente é usado pela transação.
Página 27 de 40
Banco de dados de objetos
Identidade de Objeto
Um sistema de banco de dados OO fornece uma identidade única para cada objeto independente
armazenado no banco de dados. Essa identidade única é geralmente implementada por meio de um
identificador de objeto único gerado pelo sistema (OID).
Na figura a seguir, é mostrado como podem ser declarados os tipos Empregado e Departamento, e
como as definições de tipos podem ser estendidas com as operações para definir as classes.
Objetos e literais são os blocos de construção básicos do modelo de objetos. A principal diferença entre
os dois é que um objeto possui um identificador do objeto e um estado (ou valor atual), enquanto um
literal possui somente um valor, mas não identificador do objeto.
Página 29 de 40
Bancos de dados distribuídos e arquiteturas Cliente-Servidor
Banco de dados distribuído (BDD) – Coleção de múltiplos banco de dados logicamente inter-
relacionados distribuídos por uma rede de computadores.
Grau de autonomia local – Se não há nenhuma provisão para o site local funcionar como um SGBD
stand-alone, então o sistema não possui autonomia local. Por outro lado, se for permitido o acesso direto
ao servidor para transações locais, o sistema possui algum grau de autonomia local.
Sistema de banco de dados federado (SBDF) – Nesse tipo de sistema, cada servidor é um SGBD
centralizado independente e autônomo que tem seus próprios usuários locais, transações locais e DBA
e, conseqüentemente, possui um grau muito alto de autonomia local.
Página 30 de 40
Processamento de consulta distribuída usando semijunção (semijoin)
A idéia oculta no processamento de consulta distribuída utilizando a operação semijunção é reduzir o
número de tuplas em uma relação antes de transferi-la para outro site. Ou seja, em vez de transferir uma
tabela inteira para outro site, o SGBDD transfere apenas as colunas contidas nas operações join para
um dos sites, faz o processamento e retorna apenas os resultados para o site que solicitou a busca.
Controle de concorrência distribuída com base em uma cópia distinta de um item de dados
Técnicas no contexto de estender o bloqueio centralizado
Técnica de Site primário – Nesse método um único site primário é designado para ser o site
coordenador para todos os itens do banco de dados. Conseqüentemente, todos os bloqueios
são mantidos naquele site, e todos os pedidos de bloqueio e desbloqueio são enviados para lá.
Assim, esse método é uma extensão da abordagem de bloqueio centralizado.
Site Primário com site de backup – designa um segundo site para ser um site de backup, no
caso de falha do site primário, o site de backup assume como site primário.
Técnica da cópia primária – Esse método tenta distribuir a carga de coordenação de bloqueio
entre vários sites tendo cópias distintas de diferentes itens de dados armazenados em sites
diferentes. A falha de um site afeta todas as transações que estão acessando bloqueios para
itens cujas cópias primárias residam naquele site, mas outras transações não são afetadas.
Escolha de um novo site coordenador em caso de falha – Sempre que um site coordenador
falhar em quaisquer das técnicas anteriores, os sites que ainda estão em operação precisam
escolher um novo coordenador.
Método de votação – não há cópia distinta; em vez disso, uma solicitação de bloqueio é enviada
para todos os sites que possuem uma cópia do item de dados. Cada cópia mantém seu próprio
bloqueio e pode conceder ou negar a solicitação para bloqueios. Se para uma transação que
solicitar um bloqueio for concedido o bloqueio pela maioria das cópias, ela mantém o bloqueio e
informa a todas as cópias que lhe foi concedido o bloqueio. Se uma transação não receber a
maioria dos votos que lhe concedam um bloqueio dentro de um certo período de time-out, ela
cancela sua solicitação e informa a todos os sites do cancelamento.
O método de votação é considerado um método de controle de concorrência verdadeiramente
distribuído, pois a responsabilidade por uma decisão reside em todos os sites envolvidos.
Estudos de simulação têm mostrado que a votação tem um tráfego maior de mensagens entre os
sites que os métodos de cópia distinta. Se o algoritmo levar em consideração as possíveis falhas
de sites durante o processo de votação, ele se torna extremamente complexo.
Recuperação distribuída
O protocolo commit de duas fases freqüentemente é usado para assegurar a correção do commit
distribuído. Utilizado no Oracle.
Protocolo de efetivação em duas fases:
Fase 1: Quando todos os bancos de dados participantes sinalizarem ao coordenador que sua
parte da transação multibanco foi concluída, o coordenador envia uma mensagem ‘preparar para
efetivar’ a fim de preparar cada participante para efetivação da transação. Cada banco de dados
participante que receber essa mensagem forçará a gravação de todos os registros em log, bem
como informações necessárias para a recuperação local para o disco e, então, enviará um sinal
de ‘pronto para efetivar’ ou ‘Ok’ ao coordenador. Se a gravação forçada no disco falhar, ou se a
transação local não puder ser efetivada por alguma razão, o banco de dados participante envia
um sinal ‘não pode efetivar’ ou ‘não Ok’ ao coordenador. Se o coordenador não receber uma
resposta de um dos bancos de dados dentro de um certo intervalo de tempo, ele assumirá um
‘não Ok’ como resposta.
Fase 2: Se todos os bancos de dados participantes responderem ‘Ok’ e o voto do coordenador
também for um ‘Ok’, a transação será bem sucedida, e o coordenador envia um sinal ‘efetivar’
para a transação dos bancos de dados participantes. Como todos os efeitos locais da transação
e as informações necessárias para recuperação local foram registrados nos logs dos bancos de
dados participantes, a recuperação a falhas é possível. Cada banco de dados participante
completa a efetivação da transação escrevendo uma entrada [efetivar] para a transação no log e,
se necessário, atualizando permanentemente o banco de dados. De outro modo, se um ou mais
dos bancos de dados participantes, ou se o coordenador optar por um ‘não Ok’ como resposta, a
transação falhará e o coordenador enviará uma mensagem para ‘reverter’ ou desfazer o efeito
Página 31 de 40
local da transação para cada banco de dados participante. Esse procedimento é feito
desfazendo as operações de transação por meio do log.
Os dados em um SBDD Oracle podem ser replicados usando snapshots (instantâneos) ou tabelas
mestras replicadas. A replicação é proporcionada nos seguintes níveis:
Replicação básica: Réplicas das tabelas são gerenciadas para acesso somente de leitura. Para
as atualizações, os dados precisam ser acessados em um único site primário.
Replicação avançada (simétrica): estende-se para além da replicação básica permitindo que as
aplicações atualizem réplicas de tabelas ao longo de um SBDD replicado. Os dados podem ser
lidos e atualizados em qualquer site. Isso exige um software adicional chamado opção de
replicação avançada do Oracle. Um snapshot (instantâneo) gera uma cópia de uma parte da
tabela por meio de uma consulta chamada consulta de definição de snapshot. Uma definição
simples de snapshot se parece com isto:
CREATE SNAPSOT vendas.pedidos AS
SELECT * FROM vendas.pedidos@sd.us.americas;
Página 32 de 40
XML e banco de dados na Internet
XML (Extended Markup Language – Linguagem estendida de marcação)
E dados semi-estruturados, a informação de esquema está misturada com valores dos dados, uma vez
que cada objeto de dados pode ter atributos diferentes que não são conhecidos com antecedência. Por
isso, esse tipo de dados às vezes é chamado dado autodescritivo. Considere o seguinte exemplo.
Queremos coletar uma lista de referências bibliográficas referentes a um certo projeto de pesquisa.
Algumas dessas referências podem ser livros ou relatórios técnicos, outras podem ser artigos de
pesquisa em revistas científicas ou em anais de conferências, outras ainda podem referir-se a edições
completas de revistas científicas ou de anais de conferências. A imagem a seguir mostra dados semi-
estruturados como um grafo direcionado.
Página 33 de 40
O modelo XML é chamado modelo de árvore ou modelo hierárquico.
Página 34 de 40
Válido – Nesse caso, o documento deve ser bem formado e, além disso, os nomes de elementos
usados nos pares de tags de iniício e de fim precisam seguir a estrutura especificada em um
arquivo XML DTD (Definição de Tipo de Documento) separado ou em um arquivo de esquema
XML como o da imagem a seguir.
Quando o valor do atributo standalone em um documento XML for ‘no’, o documento necessita
ser verificado em relação a um documento DTD separado. O problema é que muitos
processadores XML têm dificuldade de interpreta-lo.
Assim como o XML DTD, o esquema XML está baseado no modelo de dados de árvore, com elementos
e atributos como os conceitos principais de estruturação. Porém, ele toma emprestado alguns conceitos
adicionais de banco de dados e de modelos de objeto, tais como chaves, referências e identificadores.
Página 35 de 40
Página 36 de 40
Data Mining
Regras de Associação
Uma regra de associação é da forma X=>Y, essa associação estabelece que, se um cliente comprar X,
ele também estará propenso a comprar Y. LME (lado da mão esquerda) => LMD (lado da mão direita), é
chamado conjunto-item.
Para que uma regra de associação seja do interesse de um pesquisador de dados, a regra precisa
satisfazer algumas medidas. Duas medidas de interesse comuns fornecem suporte e confiança.
Suporte – para uma regra LME=>LMD é com relação a ela própria. È o percentual de transações
que contém todos os itens na própria relação LME U LMD. Se o suporte é baixo, isso implica que
não existe nenhuma evidência significativa que os itens em LME U LMD ocorram juntos, dado
que o conjunto de itens ocorre em apenas uma pequena fração de transações.
Confiança (força da regra) – da regra LME=>LMD é calculada como o suporte (LME U
LMD/suporte (LMD)).
Para reduzir o espaço de busca combinatória, os algoritmos para encontrar as regras de associação
utilizam as seguintes propriedades:
Fechamento por baixo - Um subconjunto de um conjunto de itens grandes precisa também ser
grande (isto é, cada subconjunto de um conjunto de itens grande excede o suporte mínimo
exigido).
Antimonotonicidade - Por reciprocidade, um superconjunto de um conjunto de itens pequeno é
também pequeno (implicando que ele não tem suporte suficiente).
Página 37 de 40
Algoritmo Apriori
Foi o primeiro a usar as propriedades de fechamento por baixo e antimonotonicidade, possui três fases
principais:
1. Fase da geração dos candidatos
2. Fase da poda dos candidatos
3. Fase do cálculo do suporte (validação).
Página 38 de 40
Glossário
Fecho transitivo: significa que se existe uma linha em que A referencia B e uma linha em que B
referencia C, deve haver uma linha em que A referencia C. Em outros termos, a tabela deve conter, para
cada artigo, seu código seguido do código de cada um de seus artigos referenciados, seguido do código
de cada artigo referenciado pelos artigos referenciados e assim recursivamente.
Linguagem Procedural: A linguagem PL/SQL utiliza o conceito de bloco estruturado. Esses blocos são
compostos por procedures e funções. Um bloco tem a estrutura básica, como descrito na imagem logo
abaixo e ele é composto por três partes:
Declare - Seção opcional, em que todos
os objetos são declarados.
Begin - Em que os comandos PL/SQL
são colocados.
Exception - Em que os erros são tratados
Semântica x Sintaxe: A semântica (do grego σημαντικός, derivado de sema, sinal) refere-se ao estudo
do significado, em todos os sentidos do termo. A semântica opõe-se com freqüência à sintaxe, caso
em que a primeira se ocupa do que algo significa, enquanto a segunda se debruça sobre as estruturas
ou padrões formais do modo como esse algo é expresso (por exemplo, escritos ou falados).
Dependendo da concepção de significado que se tenha, tem-se diferentes semânticas. A semântica
formal, a semântica da enunciação ou argumentativa e a semântica cognitiva, por exemplo, estudam o
mesmo fenômeno, mas com conceitos e enfoques diferentes.
SQL Dinâmico: Um SQL Dinâmico é um comando SQL ou um bloco PL/SQL válido, codificado
dentro de uma string (populada em tempo de execução) e pode ser executado através do uso do
comando EXECUTE IMMEDIATE, a partir da versão 8i do banco de dados Oracle. Esse tipo de
comando SQL pode conter placeholders para bind (host) arguments. Um placeholder é um
Página 39 de 40
identificador não declarado, então o valor que lhe é atribuído substitui uma variável da
composição da sintaxe do comando, sendo que é preciso prefixar tal coluna com o símbolo: (dois
pontos).
Referências:
http://www.dct.ufms.br/~nalvo/teaching/modelagem/material/Cap4.pdf
http://pt.wikipedia.org/wiki/Sistema_de_gerenciamento_de_banco_de_dados
Sistemas de Banco de Dados – Abraham Silberschatz, Henry F. Korth, S. Sudarshan – Editora Makron
Books
Página 40 de 40