04 projeto banco dados - centro de ciências exatas e ...fernanda.baiao/pcsbd/04 projeto banco...

17

Click here to load reader

Upload: trinhphuc

Post on 09-Nov-2018

212 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Projeto de Banco de Dados

Prof. Fernanda Baiã[email protected]

Material adaptado do Prof. Márcio Barros

Projeto do Banco de Dados

Atividades do projeto de BD

Normas de projeto conceitual

Heurísticas de projeto

Formas Normais

Projeto físico

Atividades do Projeto de BD

Principais atividades do projeto

– Projeto do esquema conceitual: produzir um esquema conceitual do banco de dados independente do SGBD que seráutilizado pelas aplicações

– Projeto transacional: determinar e descrever detalhadamente as operações que serão realizadas pelas aplicações que deverão manipular as informações do SGBD

– Seleção de um SGBD: selecionar o produto que será utilizado pelas aplicações (depende de uma variedade de fatores técnicos e não-técnicos)

– Projeto lógico de dados: especializar o modelo conceitual para o SGBD que foi selecionado e definir os modelos externos com que o banco de dados será manipulado

Page 2: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Atividades do Projeto de BD

Principais atividades do projeto (continuação)

– Projeto físico de dados: selecionar as estruturas de armazenamento, caminhos de acesso, índices, agrupamentos, tamanho dos blocos de disco, entre outras decisões de nível interno que otimizem o desempenho do sistema

– Implementação: colocar o SGBD em operação, executar os programas em DDL que criam a estrutura vazia de tabelas do banco de dados e povoar as tabelas com informações

– Ajuste fino (tunning): ajustar as características do BD de acordo com os acessos realizados e os gargalos de desempenho

Projeto Conceitual e Lógico

Normas de projeto conceitual e lógico

– O projeto conceitual e o projeto lógico de dados utilizam um conjunto de técnicas que determinam como os atributos serão distribuídos entre as relações do modelo conceitual

– Como os atributos podem ser distribuídos de diversas formas entre as relações, o projeto lógico é a atividade que seleciona boas alternativas de distribuição dos atributos entre as entidades, dentre o universo de possibilidades de distribuição

As principais normas são:

– Norma da simplicidade de relacionamentos

– Norma das anomalias de inserção

– Norma das anomalias de remoção

– Norma das anomalias de atualização

– Norma dos atributos com valores nulos

Projeto Conceitual e Lógico

Norma da simplicidade de relacionamentos

– Quando um conjunto de atributos são agrupados para formar uma relação, assume-se a existência de um certo significado associado a estes atributos

– Este significado, ou semântica, especifica como os valores armazenados para um atributo nas tuplas de uma relação devem ser interpretados

– Um bom projeto de banco de dados deve posicionar os atributos em relações de forma a facilitar o entendimento da semântica dos atributos e da relação propriamente dita

Page 3: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Projeto Conceitual e Lógico

Norma das anomalias de inserção

– Anomalias de inserção geralmente ocorrem quando uma relação representa duas ou mais entidades do mundo realrelacionadas entre si

– Neste caso, como uma mesma tupla representa as duas ou mais entidades, o banco de dados não é capaz de incluir as informações de uma entidade sem incluir informações da segunda (ou demais)

– Uma alternativa consiste em preencher os dados da entidade complementar com valores nulos. Entretanto, esta alternativa promove um número excessivo de atributos com valor nulo, o que contradiz outro critério de qualidade do projeto de banco de dados

– Outro problema com as anomalias de inserção é a duplicação de informações, o que gera redundância e, por conseqüência, anomalias de atualização

Projeto Conceitual e Lógico

Nome Número Endereço NomeEmpresa

Funcionário

Nome Endereço

Empresa

Como inserir uma empresa sem inserir um funcionário na empresa?

Nome Número Endereço NomeEmpresa EndereçoEmpresa

Funcionário_Empresa

Valdir da Silva 001 R. Bauru, 10 Refrig. Horizonte R Voluntários, 200José Souza 002 R. Tambiri, 200 Viação Machado R. Sariava, 102Moacyr Oliveira 003 R. Santa Maria, 34 Refrig. Horizonte R Voluntários, 200

Projeto Conceitual e Lógico

Norma das anomalias de remoção

– Como nas anomalias de inserção, as anomalias de remoção ocorrem quando uma mesma relação representa duas ou mais entidades do mundo real

– Neste caso, os dados de uma entidade não podem ser removidos do banco de dados sem que os dados da entidade associada também o sejam

– Como no caso das anomalias de inserção, a utilização de valores nulos reduz é uma alternativa a este problema, mas contradiz outro critério de qualidade do projeto

Page 4: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Projeto Conceitual e Lógico

Como remover uma empresa sem remover os dados de seus funcionários?

Nome Número Endereço NomeEmpresa

Funcionário

Nome Endereço

Empresa

Nome Número Endereço NomeEmpresa EndereçoEmpresa

Funcionário_Empresa

Valdir da Silva 001 R. Bauru, 10 Refrig. Horizonte R Voluntários, 200José Souza 002 R. Tambiri, 200 Viação Machado R. Sariava, 102Moacyr Oliveira 003 R. Santa Maria, 34 Refrig. Horizonte R Voluntários, 200

Projeto Conceitual e Lógico

Norma das anomalias de atualização

– Quando uma relação representa duas ou mais entidades do mundo real, duas ocorrências da primeira entidade podem estar relacionadas com uma ocorrência da segunda entidade

– Como uma única tupla representa um par de entidades, este caso seria descrito por duas tuplas. A primeira tupla conteria a relação entre a primeira ocorrência da primeira entidade e a única ocorrência da segunda entidade, enquanto a segunda tupla relacionaria a segunda ocorrência da primeira entidade com a única ocorrência da segunda

– As anomalias de atualização ocorrem nestes casos devido àreplicação de dados da única ocorrência da segunda entidade em duas tuplas da relação

– Além de provocar um maior consumo de disco, a replicação exige maior esforço para garantir a consistência dos dados (ou seja, que a alteração de alguma informação sobre a segunda entidade afete as duas tuplas que a representam)

Projeto Conceitual e Lógico

Se for necessário alterar o endereço da empresa de refrigeração teremos que alterar dois registros

Nome Número Endereço NomeEmpresa

Funcionário

Nome Endereço

Empresa

Nome Número Endereço NomeEmpresa EndereçoEmpresa

Funcionário_Empresa

Valdir da Silva 001 R. Bauru, 10 Refrig. Horizonte R Voluntários, 200José Souza 002 R. Tambiri, 200 Viação Machado R. Sariava, 102Moacyr Oliveira 003 R. Santa Maria, 34 Refrig. Horizonte R Voluntários, 200

Page 5: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Projeto Conceitual e Lógico

Norma dos atributos com valor nulo

– Se muitos dos atributos de uma relação não se aplicam a todas as ocorrências desta relação, o banco de dados possuirá muitas tuplas com atributos contendo valores nulos

– Estes atributos, além de ocuparem um espaço desnecessário, podem gerar problemas na interpretação dos resultados das operações de seleção

– Assim, os atributos que podem assumir valores nulos devem ser reduzidos.

Heurísticas para Projeto Conceitual

Baseado nas normas de projeto, existe um conjunto de heurísticas para o projeto do banco de dados

H1: Projete um esquema de relação de fácil explicação

– Não combine atributos de diversos tipos de entidades e tipos de relacionamentos em uma mesma tabela

– Caso contrário, a relação será uma mistura de diversos conceitos do mundo real, dificultando seu entendimento

– Intuitivamente, uma tabela que represente uma única entidade ou relacionamento é mais fácil de entender

Heurísticas para Projeto Conceitual

H2: Projete um esquema relacional sem anomalias

– Considere as anomalias de inserção, remoção e atualização

– Caso estas anomalias sejam necessárias, anote claramente estes problemas

– Certifique-se que os programas que manipulam o banco de dados atendam a estas restrições

H3: Projete um esquema que evita atributos com valores nulos

– Evite especialmente atributos onde valores nulos ocorram com maior freqüência nas tuplas de uma tabela

– Valores nulos devem ser tratados como exceção e não como regras, ocorrendo em poucas tuplas

Page 6: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Princípios de Normalização

Vantagens de aplicação das regras

– As tabelas resultantes podem ser armazenadas em estruturas de representação mais simples

– Elas facilitam a comunicação de dados entre sistemas com representações distintas

– Os nomes das colunas das tabelas resultantes da normalização podem ser mais simples.

Formas normais mais utilizadas

– FN1: todos os atributos devem ser atômicos

– FN2: todos os atributos não chave são atômicos e dependentes de todas as colunas da chave primária (chave primária mínima)

– FN3: todos os atributos não chave são atômicos e dependentes não transitivos da chave primária

Projeto Físico do Banco de Dados

Objetivo

– Definir uma boa estrutura de armazenamento, mas levando em conta características de desempenho

– Com isto, o projeto conceitual pode ser ajustado para as características do SGBD selecionado para o projeto

– Esta etapa do projeto exige maior conhecimento sobre as consultas e transações que serão realizadas pela aplicação

– A partir destas consultas e transações definiremos os caminhos de armazenamento e índices que otimizarão o acesso aos dados

Projeto Físico do Banco de Dados

Dados relevantes sobre as consultas

– Tabelas que serão acessadas por elas

– Atributos sobre os quais serão estabelecidas condições

– Atributos que serão utilizados para agrupamentos

– Atributos que serão utilizados para ordenações

– Atributos que serão manipulados por operadores nas consultas

– Atributos que serão retornados pelas consultas

Transações

– Operações mais comuns nas tabelas (insert, update, delete, ...)

– Atributos sobre os quais serão estabelecidas condições

– Atributos cujos valores são alterados com maior freqüência

Page 7: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Projeto Físico do Banco de Dados

Atividades do projeto físico

– Analisar consultas e transações realizadas com maior frequência: em geral, cerca de 20% das operações irá consumir 80% do tempo de processamento de uma aplicação

– Analisar consultas e transações que tenham restrições de tempo: em algumas situações, o tempo de resposta da aplicação é crítico e pode depender destas consultas e transações

– Analisar as restrições de unicidade dos atributos: a unicidade deve exige que uma consulta seja realizada antes de cada operação de atualização ou inserção. Assim, existe a necessidade de otimização destas consultas

Projeto Físico do Banco de Dados

Estratégias de otimização de consultas

– Indexação» A criação de índices sobre determinados atributos ou grupos

de atributos acelera a realização de consultas» Crie índices para chaves primárias (em geral o SGBD já cria),

para chaves estrangeiras e para atributos com unicidade

– Denormalização» Em algumas situações, a construção de tabelas representando

dois ou mais entidades pode ser necessária para acelerar as consultas a estas entidades

» Eventualmente pode ser necessário infringir as regras da 3FN ou 2FN para acelerar as consultas

» Esta quebra de regra geralmente traz um custo maior para a atualização e manutenção de consistência nas tabelas

– Replicação de Dados

– Particionamento de Dados

Composição da Aplicação

Arquitetura

Principais componentes

Acesso ao banco de dados

Janela principal

Janela de cadastro

Controle do dialeto do banco

Page 8: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Arquitetura de Software

O que é a arquitetura?

– Conjunto de soluções de projeto de sistemas que se aplicam a situações recorrentes em um domínio de projetos de software

– As soluções envolvem todas as dimensões de projeto, i.e., as interfaces com o usuário, as definições de armazenamento e as soluções lógicas (distribuição do código)

– Definimos um conjunto de classes que resolvem um problema geral do projeto e que serão especializadas para cada situação em particular deste projeto

– A solução muitas vezes depende da plataforma e da linguagem a ser utilizada no projeto

Projeto detalhado

– Especialização da arquitetura para cada caso de uso em que ela recorre dentro do projeto

Restrições Impostas pelo Delphi

Interface gráfica com o usuário

– Idealmente dividiríamos a interface gráfica em três tipos de classes (modelo, visão e controle)

– Esta divisão vem do padrão arquitetural mais conhecido dos desenvolvedores de software: o padrão MVC

– As classes de modelo representam os elementos do domínio da aplicação (ex. cliente, livro, ...)

– Em Delphi, eles geralmente não são representados como classes, sendo manipulados diretamente do banco de dados

– As classes de visão representam os formulários e relatórios, sendo comumente encontradas em aplicações Delphi

– As classes de controle recebem e tratam eventos provenientes dos formulários

– Em Delphi é comum termos as classes de visão e controle dentro de uma mesma classe (formulário)

Restrições Impostas pelo Delphi

Modelo

Visão Controle Visão / Controle

Modelo

Arquitetura MVC Arquitetura Delphi

Page 9: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Principais Componentes da Aplicação

Os sistemas de informação são geralmente compostos por:

– Componentes de acesso ao banco de dados

– Uma janela principal ou área de trabalho

– Diversas janelas de manipulação de cadastro e operações

– Diversos relatórios

Eventualmente as aplicações precisarão de:

– Classes de controle do banco de dados utilizado

– Classes de apoio a internacionalização

Acesso ao Banco de Dados

O acesso ao banco de dados em aplicações Delphi

– Originalmente, a Borland oferecia um conjunto de componentes para acesso a bancos de dados (BDE)

– O Borland Database Engine caiu em desuso e a própria empresa anunciou que era mantido no Delphi por compatibilidade

– Atualmente, a maior parte das aplicações utilizam o pacote de componentes de acesso a dados ADO

– O pacote ADO é uma evolução de diversos pacotes de acesso a dados oferecidos pela Microsoft em suas linguagens e ferramentas de desenvolvimento

– Ele é composto pode um pequeno conjunto de componentes que permitem a execução de consultas em bancos de dados

– O problema com o ADO é seu baixo nível de abstração, ou seja, ele é muito distante das aplicações e próximo ao SGBD

– Com isto, precisamos de uma camada de software intermediária para facilitar a construção da aplicação

Acesso ao Banco de Dados

Em nossa aplicação temos duas classes de acesso

– TBDIterador» Simplifica a realização de consultas» Recebe uma conexão e um comando SQL de consulta» Executa a consulta e mantém o cursor e seus dados

– TBDManipuladorGenerico» Classe que centraliza o acesso ao banco de dados» Permite a execução de consultas e atualizações» Cria e mantém uma conexão independente de acesso ao BD

Page 10: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Acesso ao Banco de Dados

Iterador

– Construído a partir de uma conexão e uma consulta SQL

– Mantém o estado da consulta, permitindo que o usuário navegue pela consulta (unidirecional) e consulte seus dados

– Possui métodos que retornam campos na forma de strings. Datas, valores numéricos reais e inteiros

– Esta classe é utilizada internamente pelo manipulador de bancos de dados, mas pode ser usada diretamente pelo desenvolvedor

TBDIterador = class (TObject)Constructor Create (const Conexao : OleVariant; SQL : String);Function HasNext : Boolean;Procedure MoveNext;Function FieldAsString (Indice : Integer) : String;Function FieldAsInteger (Indice : Integer) : Integer;Function FieldAsDouble (Indice : Integer) : Double;Function FieldAsDate (Indice : Integer) : TDateTime;

end;

Acesso ao Banco de Dados

TBDManipuladorGenerico = classFunction PegaConexao : OleVariant;Procedure ExecutaComando (SQL : String);Procedure ExecutaComandoParametrizado (ComandoSQL : String; Parametros : Array of Variant);Function ExecutaConsulta (SQL : String) : OleVariant;Function ExecutaConsultaParametrizada (ComandoSQL : String; Parametros : Array of Variant) :

OleVariant;Function ExecutaConsultaIdentificador (ComandoSQL : String) : Integer;Function ExecutaConsultaIdentificadorParametrizada (ComandoSQL : String; Parametros : Array of

Variant) : Integer;Procedure ExecutaConsultaLista (ComandoSQL : String; NumeroCampo : Integer; Lista : TStringList);Procedure ExecutaConsultaListaParametrizada (ComandoSQL : String; NumeroCampo : Integer; Lista :

TStringList; Parametros : Array of Variant);Function ConsultaIdentificadorString (NomeTabela, NomeCampo, Valor : String) : Integer;Function ConsultaIdentificadorValor (NomeTabela, NomeCampo, Valor : String) : Integer;Function CriaIterador (SQL : String) : TBDIterador;Function CriaIteradorParametrizado (ComandoSQL : String; Parametros : Array of Variant) : TBDIterador;Function PegaIdentificadorUltimaInsercao (NomeTabela : String) : Integer;Procedure ExecutaInsercaoSemCampos (NomeTabela : String);Procedure VerificaRegraNegocio (Condicao : Boolean; Mensagem : String; Vetor : Array of Const);

end;

Acesso ao Banco de Dados

• Manipulador genérico

– Em sua instanciação, cria uma conexão de acesso ao banco de dados, que pode ser capturada pelo método PegaConexao

– O método ExecutaComando recebe um comando SQL e executa este comando

– O método ExecutaComandoParametrizado é similar ao anterior, mas pode receber parâmetros para o comando

Var SQL : String;Manipulador : TBDManipuladorGenerico;

BeginManipulador := TBDManipuladorGenerico.Create;...SQL := ‘SELECT * FROM TbCliente WHERE Nome LIKE @1 AND Idade=@2’;...Manipulador.ExecutaComandoParametrizado (SQL, [‘Fulano’, 25]);...

End;

Parâmetros que serão preenchidosValores dos parâmetros

Page 11: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Acesso ao Banco de Dados

De forma similar ao comando anterior ...

– O método ExecutaConsulta / ExecutaConsultaParametrizadarecebe um comando SQL de consulta, executa a consulta e retorna a representação interna do ADO

– Este método é pouco utilizado, pois idealmente trataríamos as consultas com iteradores

– Assim, o método CriaIterador / CriaIteradorParametrizadorecebe um comando de consulta SQL e retorna um iteradorpara esta consulta

Acesso ao Banco de Dados

Determinadas consultas retornam apenas um ID

– Estas consultas são úteis em operações onde desejamos localizar um elemento específico no banco de dados

– O manipulador genérico oferece consultas que simplificam o processo de captura do identificador (tratamento do iterador)

– O método ExecutaConsultaIdentificador recebe um comando SQL de consulta, realiza a consulta e retorno identificador resultante desta

– O comando ConsultaIdentificadorString recebe o nome de uma tabela, o nome de um campo e um valor (string) e retorna o identificador do elemento que possui o referido valor no campo indicado da tabela indicada

– Se dois elementos possuem o mesmo valor no mesmo campo da mesma tabela, apenas o identificador do primeiro éretornado (não use o método neste caso)

Acesso ao Banco de Dados

Inserção de elementos– O comando PegaIdentificadorUltimaInsercao recebe o nome de

uma tabela e retorna o ID do último elemento inserido nesta tabela

– Este comando é útil quando incluímos detalhes (em tabelas separadas) de um elemento recém-incluídos

– Normalmente os detalhes mantém uma associação (através do ID) com o elemento que acabou de ser inserido na tabela

Verificação de regras de negócio– O comando VerificaRegraNegocio é útil para a verificação de

regras de negócio em cadastros

– Ele recebe uma condição, uma mensagem parametrizada (conforme a rotina Format do Delphi) e um vetor de parâmetros para formatação da mensagem

– O método gera uma exceção com a mensagem recebida (após sua parametrização)

Page 12: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Janela Principal

Principais componentes

– Menu da aplicação e barra de ferramentas

– Action list, para concentrar os comandos da aplicação

– Barra de status, para notificação do usuário

Janela Principal

O componente ActionList

– Permite a declaração e classificação de ações que podem ser realizadas no sistema

– Cada ação poderá ser, posteriormente, associada a um menu, botão de barra de ferramenta, botão convencional, ...

– As ações de um ActionList podem ser associadas a um texto de ajuda, um título, uma imagem, entre outros detalhes

ActionList

ImageList

MainMenu

Janela Principal

Editando um ActionList

Características da lista de ações

Propriedades de uma ação

Page 13: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Janelas de Cadastro

Janela padronizada para atualização de dados

– Existe uma superclasse da qual todas as janelas herdam

– A superclasse define o comportamento e estilo genérico

Janelas de Cadastro

Comportamento e estilo padronizados

– Lista de elementos cadastrados na combo no topo da janela, que pode ser filtrada pelo botão ao lado

– Ao selecionar um elemento na combo, seus dados são apresentados em pastas no centro da janela

– Clique no botão “Incluir” insere no cadastro o elemento que está atualmente sendo editado pelo usuário

– Clique no botão “Excluir” remove no cadastro os dados do elemento que está sendo consultado pelo usuário

– Clique no botão “Alterar” altera no cadastro os dados do elemento que está sendo editado pelo usuário

– Botão de fechamento da janela sempre a direita no rodapé da janela, que pode conter outros botões específicos do cadastro

Janelas de Cadastro

Padronização, padronização, padronização ...

– Usuário sabe usar um cadastro sabe usar todos os cadastros

Vantagens

– Aplicação se comporta de maneira uniforme (harmonia)

– Menor risco de erro por operação incorreta

– Operação mais rápida do sistema

– Um único manual do usuário

– Menor volume de código por cadastro

Page 14: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Janelas de Cadastro

A janela WinBDBaseCadastro

– É utilizada como superclasse de todas as janelas de cadastro

A janela possui diversos tipos de métodos

– Métodos que devem ser sobreescritos pelas subclasses

– Métodos opcionalmente sobreescritos pelas subclasses

– Métodos de apoio

Janelas de Cadastro

Métodos que devem ser escritos por todas as subclasses

– Estes métodos são todos definidos como virtual e abstract na superclasse WinBDBaseCadastro

– Eles devem ser implementados na subclasses que representam cadastros específicos

Lista de métodos sobreescritos nas subclasses (cont.)

– function IncluirElemento : Integer;» Captura os dados da janela, insere no banco de dados e retorna o

identificador do novo elemento

– procedure ApagarElemento (ID : Integer); » Remove do banco de dados o elemento cujo identificador seja o

recebido como parâmetro e seus elementos associados

– procedure AlterarElemento (ID : Integer); » Captura os dados da janela e atualiza o elemento identificado no

banco de dados pelo identificador recebido como parâmetro

Janelas de Cadastro

Lista de métodos sobreescritos nas subclasses (cont.)

– procedure ApresentaElemento (ID : Integer); » Captura do SGBD os dados do elemento com o identificador

recebido como parâmetro e apresenta na janela

– function ConsultaTodosElementos : TBDIterador; » Retorna um iterador de banco de dados com todos os elementos do

cadastro (veremos o iterador depois)

– function GeraNomeElemento (Consulta : TBDIterador) : String; » Gera o nome com que um elemento do cadastro se identifica na

combo-box do topo da janela a partir de sua iterador

– procedure HabilitaControles (Flag : Boolean); » Habilita ou desabilita os controles da janela de acordo com o estado

do flag recebido como parâmetro

Atributo protegido

– GerenciadorBancoDados : TBDManipuladorGenerico;» Objeto que centraliza o acesso ao banco de dados da aplicação» É criada uma instância para cada janela de cadastro da aplicação

Page 15: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Janelas de Cadastro

Métodos sobreescritos opcionalmente pelas subclasses– São definidos como virtual, mas possuem uma implementação default

na superclasse WinBDBaseCadastro

Lista de métodos sobreescritos opcionalmente– procedure MudaModificado (Flag : Boolean);

» Função chamada sempre que um elemento foi alterado na janela de cadastro

» Pode ser utilizada para atualizar algum controle da janela, mas a versão original deve sempre ser chamada

– function PodeRemoverElemento (ID : Integer) : Boolean; » Retorna TRUE se o elemento identificado pelo parâmetro pode ser

removido do banco de dados. Por default, retorna TRUE sempre

– procedure VerificaRegrasNegocio (ID : Integer); » Retorna com sucesso se o elemento cujos dados estão sendo

editados na janela atende às regras de negócio do sistema.» Caso alguma regra de negócio da aplicação seja infringida, gera

uma exceção.» O parâmetro indica o identificador do elemento no banco de dados

ou –1, se for um novo elemento.

Janelas de Cadastro

Lista de métodos sobreescritos opcionalmente (cont.)

– function VerificaFiltroElemento (Consulta : TBDIterador) : Boolean;» Determina se um elemento do cadastro atende ao filtro que foi

imposto pelo usuário.» Se o desenvolvedor quiser implementar um filtro, esta função deve

retornar TRUE se o elemento no iterador atende ao filtro» Por default, a janela não oferece filtros. Assim, todos os elementos

atendem ao filtro.

– function VerificaFiltroAtivo : Boolean;» Determina se existe um filtro ativo no cadastro» Por default, não existem filtros na superclasse

– procedure InicializaFiltro;» Chamada na abertura da janela para inicializar os dados do filtro

que poderá ser programado pelo usuário» Por default, não faz nada

– procedure DefineFiltro;» Deve abrir uma janela para edição dos filtros do cadastro» Por default, não faz nada

Janelas de Cadastro

Métodos protegidos de manipulação da interface

– Os métodos “MudaEstadoXXX” facilitam a habilitação e desabilitação dos controles da janela

– Existe um método para cada tipo de controle mais comumente utilizado em cadastros

– Além de desabilitar os controles, os métodos trocam sua cor para cinza, aprimorando o visual da aplicação

procedure MudaEstadoComboBox (Combo : TComboBox; Enabled : Boolean);

procedure MudaEstadoListBox (Lista : TListBox; Enabled : Boolean);

procedure MudaEstadoLinhaEdicao (Linha : TCustomEdit; Enabled : Boolean);

procedure MudaEstadoGrade (Grade : TStringGrid; Enabled : Boolean);

procedure MudaEstadoEditorDatas (Editor : TDateTimePicker; Enabled : Boolean);

Page 16: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Janelas de Cadastro

Métodos de apoio úteis para preencher os dados iniciais do cadastro e controlar quando suas funções devem estar disponíveis

Preenchimento de uma combo a partir de um vetor de strings

– Útil para preencher campos enumerados do cadastro

– Geralmente chamado no início da execução da janela

Informação de que o elemento foi alterado

– Deve ser chamada sempre que, durante uma edição, os dados do elemento corrente forem alterados

– Os botões de alteração e inclusão serão ativados, tendo em vista que alguma informação foi digitada

procedure PreencheComboVetor (Combo : TComboBox; Default : String; Vetor : Array of String);

procedure InformaElementoAlterado;

Janelas de Cadastro

Métodos de apoio úteis quando a janela tem funções que complementam as quatro operações básicas do cadastro

VerificaElementoSelecionado– Retorna TRUE se houver algum elemento do cadastro selecionado no

momento. Retorna FALSE, caso contrário.

PegaIdentificadorElementoSelecionado– Retorna o identificador (ID) de banco de dados do elemento

selecionado na janela de cadastro

PegaNomeElementoSelecionado– Retorna o nome do elemento selecionado na janela

function VerificaElementoSelecionado : Boolean;

function PegaIdentificadorElementoSelecionado : Integer;

function PegaNomeElementoSelecionado : String;

Controle do Dialeto do Banco

Outro problema comum nos cadastros é o controle do dialeto do banco de dados

SQL é padronizada?

– Uma primeira resposta seria que sim, pelo menos para a maior parte dos comandos

– Por outro lado, existem funcionalidades particulares de um ou outro banco de dados

– Em outras situações, os bancos de dados diferem em como realizam uma determinada tarefa

– Exemplos:» Retornar o ID do último elemento inserido em uma tabela» Realizar uma inserção de registro sem campos» Realizar inserções múltiplas em um único comando» Entre outras ...

Page 17: 04 Projeto Banco Dados - Centro de Ciências Exatas e ...fernanda.baiao/PCSBD/04 Projeto Banco Dados.pdf · – O projeto conceitual e o projeto lógico de ... distribuídos entre

Controle do Dialeto do Banco

Uma solução para o problema do dialeto ...

BDDriverGenerico

Nome

ConfiguraCriaConexaoExecutaComandoExecutaConsultaPegaIdentificadorUltimaInsercaoExecutaInsercaoSemCampos

BDDriverMySQL

PegaIdentificadorUltimaInsercaoExecutaInsercaoSemCampos

BDDriverPostgreSQL

PegaIdentificadorUltimaInsercaoExecutaInsercaoSemCampos

BDDriverPostgreSQL

PegaIdentificadorUltimaInsercaoExecutaInsercaoSemCampos

BDSeletorDrivers

RegistraSelecionaDriverNomePegaDriverSelecionadoVerificaDriverSelecionado

BDManipuladorGenerico

Controle do Dialeto do Banco

Drivers genéricos e controlador de drivers

– Um driver genérico define as funcionalidades que variam entre sistemas gerenciadores de banco de dados distintos

– Um driver interno implementa as diversas versões de uma funcionalidade para um SGBD específico

– Um controlador possui um driver selecionado em um conjunto de drivers disponíveis

– O manipulador genérico de bancos de dados se comunica com o controlador de dados para executar os comandos SQL e as outras funcionalidades

Projeto de Aplicações de BD

É muito importante estudar o código!

– A próxima etapa é o desenvolvimento do código

– O código mostra como as soluções arquiteturais vão ser utilizadas na prática

– Assim, somente estudando o código poderemos entender completamente o funcionamento do projeto