Projeto de Banco de Dados

Propaganda
Projeto de Banco de Dados
Prof. Fernanda Baião
[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
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
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 real
relacionadas 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
Funcionário_Empresa
Nome
Número
Valdir da Silva
José Souza
Moacyr Oliveira
Endereço
NomeEmpresa
001 R. Bauru, 10
002 R. Tambiri, 200
003 R. Santa Maria, 34
Refrig. Horizonte
Viação Machado
Refrig. Horizonte
EndereçoEmpresa
R Voluntários, 200
R. Sariava, 102
R Voluntários, 200
Como inserir uma empresa sem
inserir um funcionário na empresa?
Funcionário
Nome
Número
Endereço
NomeEmpresa
Empresa
Nome
Endereço
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
Projeto Conceitual e Lógico
Funcionário_Empresa
Nome
Número
Valdir da Silva
José Souza
Moacyr Oliveira
Endereço
NomeEmpresa
001 R. Bauru, 10
002 R. Tambiri, 200
003 R. Santa Maria, 34
Refrig. Horizonte
Viação Machado
Refrig. Horizonte
EndereçoEmpresa
R Voluntários, 200
R. Sariava, 102
R Voluntários, 200
Como remover uma empresa sem
remover os dados de seus funcionários?
Funcionário
Nome
Número
Endereço
NomeEmpresa
Empresa
Nome
Endereço
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
Funcionário_Empresa
Nome
Número
Valdir da Silva
José Souza
Moacyr Oliveira
Endereço
NomeEmpresa
001 R. Bauru, 10
002 R. Tambiri, 200
003 R. Santa Maria, 34
Refrig. Horizonte
Viação Machado
Refrig. Horizonte
EndereçoEmpresa
R Voluntários, 200
R. Sariava, 102
R Voluntários, 200
Se for necessário alterar o endereço da empresa de
refrigeração teremos que alterar dois registros
Funcionário
Nome
Número
Endereço
Empresa
Nome
Endereço
NomeEmpresa
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
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
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
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
Visão
Modelo
Modelo
Controle
Visão / Controle
Arquitetura MVC
Arquitetura Delphi
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
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 = class
Function 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;
Begin
Manipulador := TBDManipuladorGenerico.Create;
...
SQL := ‘SELECT * FROM TbCliente WHERE Nome LIKE @1 AND Idade=@2’;
...
Manipulador.ExecutaComandoParametrizado (SQL, [‘Fulano’, 25]);
...
End;
Valores dos parâmetros
Parâmetros que serão preenchidos
Acesso ao Banco de Dados
‰
De forma similar ao comando anterior ...
– O método ExecutaConsulta / ExecutaConsultaParametrizada
recebe 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 / CriaIteradorParametrizado
recebe um comando de consulta SQL e retorna um iterador
para 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)
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
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
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
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);
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 ...
Controle do Dialeto do Banco
‰
Uma solução para o problema do dialeto ...
BDSeletorDrivers
BDDriverGenerico
Nome
BDManipuladorGenerico
Registra
SelecionaDriverNome
PegaDriverSelecionado
VerificaDriverSelecionado
Configura
CriaConexao
ExecutaComando
ExecutaConsulta
PegaIdentificadorUltimaInsercao
ExecutaInsercaoSemCampos
BDDriverMySQL
BDDriverPostgreSQL
BDDriverPostgreSQL
PegaIdentificadorUltimaInsercao
ExecutaInsercaoSemCampos
PegaIdentificadorUltimaInsercao
ExecutaInsercaoSemCampos
PegaIdentificadorUltimaInsercao
ExecutaInsercaoSemCampos
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
Download