terça-feira, 8 de fevereiro de 2011

Normalização de Dados



Bom Normalização de Dados para quem nunca ouviu falar eu vou comentar um pouco mais sobre tudo isso aos novatos na área de Banco de Dados. Vou tentar ser o mais breve e objetivo possível. A Normalização de Dados é uma série de passos que se segue no projeto de um banco de dados que permite um armazenamento consistente e um eficiente acesso aos dados em um banco de dados relacional. Esses passos reduzem a redundância de dados e as chances dos dados se tornarem inconsistentes.

No entanto, muitas SGBDs relacionais não têm separação suficiente entre o projeto lógico da base de dados e a implementação física do banco de dados, e isso tem como conseqüência que as consultas feitas a um banco de dados totalmente normalizado têm um mau desempenho. Nestes casos, usa-se por vezes a desnormalização para melhorar o desempenho, com o custo de menores garantias de consistência.

Definição

Consiste em definir o formato lógico adequado para as estruturas de dados identificados no projeto lógico do sistema, com o objetivo de minimizar o espaço utilizado pelos dados e garantir a integridade e confiabilidade das informações.

A normalização é feita, através da análise dos dados que compõem as estruturas utilizando o conceito chamado “Formas Normais (FN)”. As FN são conjuntos de restrições nos quais os dados devem satisfazê-las. Exemplo, pode-se dizer que a estrutura está na primeira forma normal (1FN), se os dados que a compõem satisfizerem as restrições definidas para esta etapa.

A normalização completa dos dados é feita, seguindo as restrições das quatro formas normais
existentes, sendo que a passagem de uma FN para outra é feita tendo como base o resultado obtido na etapa anterior, ou seja, na FN anterior.

Para realizar a normalização dos dados, é primordial que seja definido um campo chave para a estrutura, campo este que permite irá identificar os demais campos da estrutura.

Formas Normais existentes:

1 – Primeira Forma Normal (1FN)

Consiste em retirar da estrutura os elementos repetitivos, ou seja, aqueles dados que podem compor uma estrutura de vetor. Podemos afirmar que uma estrutura está normalizada na 1FN, se não possuir elementos repetitivos. Exemplo:

Estrutura original:

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Cod. do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente, Relação das mercadorias vendidas (onde para cada mercadoria temos: Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria) e Total Geral da Nota)

Analisando a estrutura acima, observamos que existem várias mercadorias em uma única Nota Fiscal, sendo portanto elementos repetitivos que deverão ser retirados.

Estrutura na primeira forma normal (1FN):

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome Cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota)

Arquivo de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria)

Obs. Os campos sublinhados identificam as chaves das estruturas.

Como resultado desta etapa ocorre um desdobramento dos dados em duas estruturas, a saber:

- Primeira estrutura (Arquivo de Notas Fiscais): Dados que compõem a estrutura original, excluindo os elementos repetitivos.

- Segundo estrutura (Arquivo de Vendas): Dados que compõem os elementos repetitivos da estrutura original, tendo como chave o campo chave da estrutura original (Num. NF) e o campo chave da estrutura de repetição (Código da Mercadoria).

2 – Segunda Forma Normal (2FN)

Consiste em retirar das estruturas que possuem chaves compostas (campo chave sendo formado por mais de um campo), os elementos que são funcionalmente dependente de parte da chave. Podemos afirmar que uma estrutura está na 2FN, se ela estiver na 1FN e não possuir campos que são funcionalmente dependente de parte da chave.

Exemplo:

Estrutura na primeira forma normal (1FN):

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota)

Arquivo de Vendas (Num. NF, Código da Mercadoria, Descrição da Mercadoria, Quantidade vendida, Preço de venda e Total da venda desta mercadoria)

Estrutura na segunda forma normal (2FN):

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota)

Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)

Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda)

Como resultado desta etapa, houve um desdobramento do arquivo de Vendas (o arquivo de Notas Fiscais, não foi alterado, por não possuir chave composta) em duas estruturas a saber:

- Primeira estrutura (Arquivo de Vendas): Contém os elementos originais, sendo excluídos os dados que são dependentes apenas do campo Código da Mercadoria.

- Segundo estrutura (Arquivo de Mercadorias): Contém os elementos que são identificados apenas pelo Código da Mercadoria, ou seja, independentemente da Nota Fiscal, a descrição e o preço de venda serão constantes.

3 – Terceira Forma Normal (3FN)

Consiste em retirar das estruturas os campos que são funcionalmente dependentes de outros campos que não são chaves. Podemos afirmar que uma estrutura está na 3FN, se ela estiver na 2FN e não possuir campos dependentes de outros campos não chaves.

Exemplo:

Estrutura na segunda forma normal (2FN):

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente, Nome do cliente, Endereço do cliente, CGC do cliente e Total Geral da Nota)

Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)

Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda)

Estrutura na terceira forma normal (3FN):

Arquivo de Notas Fiscais (Num. NF, Série, Data emissão, Código do Cliente e Total Geral da Nota)

Arquivo de Vendas (Num. NF, Código da Mercadoria, Quantidade vendida e Total da venda desta mercadoria)

Arquivo de Mercadorias (Código da Mercadoria, Descrição da Mercadoria, Preço de venda) Arquivo de Clientes (Código do Cliente, Nome do cliente, Endereço do cliente e CGC do cliente)

Como resultado desta etapa, houve um desdobramento do arquivo de Notas Fiscais, por ser o único que possuía campos que não eram dependentes da chave principal (Num. NF), uma vez que independente da Nota Fiscal, o Nome, Endereço e CGC do cliente são inalterados. Este procedimento permite evitar inconsistência nos dados dos arquivos e economizar espaço por eliminar o armazenamento freqüente e repetidas vezes destes dados. A cada nota fiscal comprada pelo cliente, haverá o armazenamento destes dados e poderá ocorrer divergência entre eles.

As estruturas alteradas foram pelos motivos, a saber:

- Primeira estrutura (Arquivo de Notas Fiscais): Contém os elementos originais, sendo excluído os dados que são dependentes apenas do campo Código do Cliente (informações referentes ao cliente).

- Segundo estrutura (Arquivo de Clientes): Contém os elementos que são identificados apenas pelo Código do Cliente, ou seja, independente da Nota Fiscal, o Nome, Endereço e CGC dos clientes serão constantes.

Após a Normalização, as estruturas dos dados estão projetadas para eliminar as inconsistências e redundâncias dos dados, eliminando desta forma qualquer problema de atualização e operacionalização do sistema. A versão final dos dados poderá sofrer alguma alteração, para atender as necessidades específicas do sistema, a critério do analista de desenvolvimento durante o projeto físico do sistema.

segunda-feira, 7 de fevereiro de 2011

Tecnologia OLAP


Olá pessoal hoje vou falar de uma tecnologia chamada e para vocês terem uma melhor entendimento sobre oque estarei falando eu vou citar algumas definições para melhor entendimento deste assunto chamado OLAP,ou On-line Analytical Processing é a capacidade para manipular e analisar um grande volume de dados sob múltiplas perspectivas.

As aplicações OLAP são usadas pelos gestores em qualquer nível da organização para lhes permitir análises comparativas que facilitem a sua tomada de decisões diárias.

Classifica-se em ROLAP, MOLAP, HOLAP, DOLAP E WOLAP.

Benefícios

"Online analytical processing", ou OLAP fornece para organizações um método de acessar, visualizar, e analisar dados corporativos com alta flexibilidade e performance. A tecnologia quanto maior e complexa a informação armazenada, mais difícil é para retirá-la. A tecnologia acaba com estas dificuldades levando a informação mais próxima ao usuário que dela necessite. Portanto, o OLAP é freqüentemente utilizado para integrar e disponibilizar informações gerenciais contidas em bases de dados operacionais, sistemas ERP e CRM, sistemas contábeis, e Data Warehouses. Estas características tornaram-no uma tecnologia essencial em diversos tipos de aplicações de suporte à decisão e sistemas para executivos.
Citar uma outra visão geral de OLAP é um Business Intelligence (BI) como citei pouco atrás
  • É um processo de coleta, transformação, análise e distribuição de dados para melhorar a decisão de negócios;

  • Sua infra-estrutura tecnológica é composta de data warehouses ou data marts, ferramentas OLAP, EIS, data mining, consultas e relatórios e software de visualização dos dados;

  • Os bancos de dados são a infra-estrutura básica de qualquer sistema de business intelligence. São neles que vão estar armazenados os dados que serão transformados em informações competitivas.

Hoje OLAP é um dos muitos componentes do Framework de Business Intelligence, assim como outras tecnologias de Suporte à Decisão, tais como: visualização de dados, data mining, data warehousing. Alguns fornecedores têm feito o esforço de incluir na sua linha de produtos estas tecnologias de suporte à decisão, outros fornecedores optaram por um produto aberto formando parcerias com fornecedores de produtos complementares.

Muitas outras tecnologias de suporte à decisão devem se integrar com a tecnologia OLAP, incluindo pacotes de análise estatística, sistemas de informações geográficas (GIS), e ferramentas de visualização de dados.

A maioria de vendedores de servidores OLAP oferecem add-ins para planilha eletrônica como opção de front-end, possibilitando, com isto, apresentar dados multidimensionais via planilha eletrônica. A principal vantagem desta abordagem é que ela combina a exibição flexível, a força em formatação e os cálculos para fins específicos das planilhas com o gerenciamento de dados, cálculos e performance da tecnologia de banco de dados multidimensionais. Os fornecedores de servidores OLAP só precisam produzir diferentes versões de seus add-ins para cada nova versão da planilha.

Modelo de Dados

Em um modelo de dados OLAP, a informação é conceitualmente organizada em cubos que armazenam valores quantitativos ou medidas. Dentro de cada dimensão de um modelo OLAP, os dados podem ser organizados em uma hierarquia que define diferentes níveis de detalhe. Por exemplo, dentro da dimensão tempo, você poderá ter uma hierarquia representando os níveis anos, meses, e dias. Da mesma forma, a dimensão região poderá ter os níveis país, região, estado e cidade. Assim, um usuário visualizando dados em um modelo OLAP irá navegar para cima (drill up) ou para baixo (drill down) entre níveis para visualizar informação com maior ou menor nível de detalhe sem a menor dificuldade. Algumas Aplicações

A aplicação do OLAP é bastante diversificada e seu uso encontra-se em diversas áreas de uma empresa. Alguns tipos de aplicação aonde a tecnologia é empregada são:

- Finanças Análise de L&P, Relatórios L&P, Orçamento, Análise de Balanço, Fluxo de Caixa, Contas a Receber, …

- Vendas Análise de vendas (por região, produto, vendedor, etc.), Previsões, Lucratividade de Cliente/Contrato, Análise de Canais de Distribuição, ….

- Marketing Análise de Preço/Volume, Lucratividade de Produto, Análise de Mercados, …

- Recursos Humanos Análise de Benefícios, Projeção de Salários, Análise de "Headcount", … Manufatura Gerência de Estoque, Cadeia de Fornecimento, Planejamento de Demanda, Análise de custos de matéria-prima.

quinta-feira, 27 de janeiro de 2011

Banco de Dados Distribuídos


Bom vou hoje falar a você um pouco mais sobre Banco de Dados Distribuído (BDD) ele é uma coleção de vários Base de Dados logicamente inter-relacionados, distribuídos por uma rede de computadores. Existem dois tipos de banco de dados distribuídos, os homogêneos e os heterogêneos. Os homogêneos são compostos pelos mesmos bancos de dados, já os Heterogêneos são aqueles que são compostos por mais de um tipo de banco de dados.

Melhor explicando num banco de dados distribuídos os arquivos podem estar replicados ou fragmentados, esses dois tipos podem ser encontrados aos longos dos nós do sistema de BDD's. Quando os dados se encontram replicados, existe uma cópia de cada um dos dados em cada nó, tornando as bases iguais (ex: tabela de produtos de uma grande loja). Já na fragmentação, os dados se encontram divididos ao longo do sistema, ou seja a cada nó existe uma base de dados diferente se olharmos de uma forma local, mas se analisarmos de uma forma global os dados são vistos de uma forma única, pois cada nó possui um catálogo que contém cada informação dos dados dos bancos adjacentes.

Podendo a replicação dos dados pode se dar de maneira síncrona ou assíncrona. No caso de replicação síncrona, cada transação é dada como concluída quando todos os nós confirmam que a transação local foi bem sucedida. Na replicação assíncrona, o nó principal executa a transação enviando confirmação ao solicitante e então encaminha a transação aos demais nós.

Arquitetura Básica

Aplicações Locais
aplicações que não requerem dados de outros lugares.
Aplicações Globais
aplicações que requerem dados de outros lugares.
Alguns cuidados com a Distribuição de Dados
  • A distribuição é transparente — usuários devem poder interagir com o sistema como se ele fosse um único sistema lógico. Isso se aplica ao desempenho do sistema, métodos de acesso, entre outras coisas.
  • Transações são transparentes — cada transação deve manter a integridade do banco de dados dentre os múltiplos bancos de dados. Transações devem também ser divididas em subtransações, cada subtransação afetando um sistema de banco de dados...

Vantagens de Bancos de Dados Distribuídos

  • Reflete a estrutura organizacional — fragmentos do banco de dados estão localizados nos departamentos que se relacionam com os dados que estes persistem.
  • Autonomia Local — um departamento pode controlar seus dados (já que é o mais familiarizado com estes).
  • Maior disponibilidade — uma falha em um banco de dados afetará somente um fragmento, ao invés do banco de dados inteiro.
  • Melhor performance — os dados estão localizados próximo do local de maior demanda e os sistemas de banco de dados por si só são paralelizáveis, permitindo carregar no banco de dados para o balanceamento entre servidores (a elevada carga em um módulo do banco de dados não irá afetar os outros módulos de banco de dados em um banco de dados distribuído).
  • Econômico — custa menos criar uma rede de pequenos computadores com o mesmo poder que um único computador maior.
  • Modularidade — sistemas podem ser modificados, adicionados ou removidos do banco de dados distribuído sem afetar os outros módulos (sistemas).

Desvantagens de banco de dados distribuídos

  • Complexidade — trabalho extra deve ser feito pelos DBAs para garantir que a natureza da distribuição do sistema é transparente. Trabalho extra deve ser feito para manter sistemas múltiplos diferentes, ao invés de um único grande. Design de banco de dados extra deve também ser feito para levar em conta a natureza desconectada do banco de dados - por exemplo, joins tornam-se proibitivamente caros quando são rodados entre múltiplas plataformas.
  • Implantação mais cara — o aumento da complexidade e uma infraestrura mais extensa significa custo extra de trabalho
  • Segurança — fragmentos de banco de dados remotos devem ser seguros e, como eles não são centralizados então os lugares remotos também devem ser seguros. A infraestrutura também deve ser segura (por exemplo, pela encriptação dos links de rede entre os lugares remotos).
  • Difícil de manter a integridade — em sistemas distribuídos, reforçar a integridade ao longo de uma rede pode exigir demais dos recursos da rede para ser viável.
  • Inexperiência — pode ser difícil trabalhar com banco de dados distribuídos e como é uma área relativamente nova ainda não há tantos casos (ou experiências) práticos de seu uso disponíveis como exemplo.
  • Falta de padrões – ainda não há metodologias e ferramentas para ajudar usuários a converter um SGBD centralizado para um SGBD distribuído.
  • Design do banco de dados mais complexo – além das dificuldades normais, o design de um banco de dados distribuídos tem que considerar a fragmentação dos dados, alocação dos fragmentos em lugares específicos e a replicação de dados.
Espero que vocês tenham gostado e entendido um pouco mais sobre (BDD) ou melhor falando Bando de Dados Distribuídos.

segunda-feira, 27 de dezembro de 2010

Utilizando MD5 em Criptográfia

Aqui desenvolvi com algumas pesquisas e montei umas Function para PHP para validação de logins ao Banco de Dados utilizando MD5, podem notar ele originalmente foi feito apenas para alimentar o md5 database md5.rednoize.com, porém você também pode utiliza-lo para efetuar pesquisas.

Código PHP:

#!/usr/bin/php -q
<?php
//Alterar a linha para #!/pathdophp/php -q -d short_open_tag=on
$servidor "md5.rednoize.com";
echo "\033[32m";
echo 
"------------------------------------\r\n";
echo 
"- md5hash - http://md5.rednoize.com -\r\n";
echo 
"- Criado por: Elder Stroparo     -\r\n";
echo 
"- E-Mail: seuemail[arroba]email.com     -\r\n";
echo 
"- Seg, 27 de Dezembro de 2010         -\r\n";
echo 
"------------------------------------\r\n";
settype($template"string");
//$template = "1234567890abcdefghijklmnopqrstuvwxyz"; //Letras e Numeros.
$template "123456789"//Somente numeros.
function GetRandomString($length) {
       global 
$template;
       
settype($length"integer");
       
settype($rndstring"string");
       
settype($a"integer");
       
settype($b"integer");
       for (
$a 0$a <= $length$a++) {
               
$b rand(0strlen($template) - 1);
               
$rndstring .= $template[$b];
       }
       return 
$rndstring;
}
if (
$argc<3) {
echo 
"\r\n";
echo 
"Para \"quebrar\" uma md5 use ".$argv[0]." -m\r\n";
echo 
"Para adicionar uma nova senha ao banco de dados (md5.rednoise.com) utilize: ".$argv[0]." -q\r\n";
echo 
"[#] Alimentando o banco de dados...\r\n";
echo 
"[!] Para finalizar pressione CTRL+C\r\n\r\n";
while (
1) {
$rand GetRandomString(7);
echo 
$rand;
echo 
" - ";
echo 
file_get_contents("http://$servidor/?p&q=$rand");
echo 
"\r\n";
}
}
if (
$argv[1] == "-m") {
$q $argv[2];
echo 
"[!] Consultando servidor...";
echo
"\r\n";
echo 
"[*] A senha é: ";
echo 
file_get_contents("http://$servidor/?p&q=$q&b=MD5-Search");
echo 
"\r\n";
}
if (
$argv[1] == "-q") {
$q $argv[2];
echo 
"[*] Senha $q - md5: ";
echo 
file_get_contents("http://$servidor/?p&q=$q");
echo 
"\r\n[!] Adicionada com sucesso!";
echo
"\r\n";
}
?>


Bom espero que tenham gostando deste exemplo em PHP, ai está um modelo de como utilizar o MD5, ele está alimentando o bando de dados e gerando uma sequencia diretamente do servidor http://md5.rednoize.com (MD5 HASH).


Funções de Criptográfia

Bom vou falar hoje um pouco sobre o termo Funções de Criptográfia que é meios de proteger as informações armazenadas em um Banco de Dados.

Os Banco de Dados são muito importante eles utilizam para armazenar diversos tipos de informações, desde dados sobre uma conta de e-mail até dados importantes da Receita Federal. Para tal existem diversos tipos, os quais variam em complexidade e sobre tudo em segurança.

A Criptográfia são técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário, oque atorna difícil de ser lida por alguém não autorizado. Assimsendo, só o receptor da mensagem pode ler a informação com facilidade.

Visão Geral: a criptografia tem quatro objetivos principais

confidencialidade da mensagem: só o destinatário autorizado deve ser capaz de extrair o conteúdo da mensagem da sua forma cifrada. Além disso, a obtenção de informação sobre o conteúdo da mensagem (como uma distribuição estatística de certos caracteres) não deve ser possível, uma vez que, se o for, torna mais fácil a análise criptográfica.

integridade da mensagem: o destinatário deverá ser capaz de determinar se a mensagem foi alterada durante a transmissão.

autenticação do remetente: o destinatário deverá ser capaz de identificar o remetente e verificar que foi mesmo ele quem enviou a mensagem.

não-repúdio ou irretratabilidade do emissor: não deverá ser possível ao emissor negar a autoria da mensagem.

Nem todos os sistemas ou algoritmos criptográficos são utilizados para atingir todos os objetivos listados acima. Normalmente, existem algoritmos específicos para cada uma destas funções. Mesmo em sistemas criptográficos bem concebidos, bem implementados e usados adequadamente, alguns dos objetivos acima não são práticos (ou mesmo desejáveis) em algumas circunstâncias. Por exemplo, o remetente de uma mensagem pode querer permanecer anônimo, ou o sistema pode destinar-se a um ambiente com recursos computacionais limitados.

Comentando melhor sobre as funções de criptográfia Criptografia

Criptografia, MD2, MD4, SHA, Hash, MD5, MD6 (não utilizavél).

Criptografia

(Do Grego kryptós, "escondido", e gráphein, "escrita") é o estudo dos princípios e técnicas pelas quais a informação pode ser transformada da sua forma original para outra ilegível, de forma que possa ser conhecida apenas por seu destinatário (detentor da "chave secreta"), o que a torna difícil de ser lida por alguém não autorizado. Assim sendo, só o receptor da mensagem pode ler a informação com facilidade. É um ramo da Matemática, parte da Criptologia.

MD2

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD4 e foram desenvolvidos pela RSA Data Security, Inc.

MD4

é um algoritmo de hash que cria um valor de hash de 128 bits funciona semelhante ao algoritmo de MD2 e foram desenvolvidos pela RSA Data Security, Inc.
Ele foi desenvolvido em 1990, mas um ano após foi sucedido pelo MD5 por possuir falhas de segurança. A lógica desse algoritmo influenciou a criação de outros algoritmos como o MD5, SHA-1 e o RIPEMD. O MD4 também é usado para computar o hash de senhas em sistemas Microsoft NT.

SHA

(Secure Hash Algorithm) está relacionada com as funções criptográficas. A função mais usada nesta família, a SHA-1, é usada numa grande variedade de aplicações e protocolos de segurança, incluindo TLS, SSL, PGP, SSH, S/MIME e IPSec. SHA-1 foi considerado o sucessor do MD5. Ambos têm vulnerabilidades comprovadas. Em algumas correntes, é sugerido que o SHA-256 ou superior seja usado para tecnologia crítica. Os algoritmos SHA foram desenhados pela National Security Agency (NSA) e publicados como um padrão do governo Norte-Americano.

O primeiro membro da família, publicado em 1993, foi oficialmente chamado SHA; no entanto, é frequentemente chamado SHA-0 para evitar confusões com os seus sucessores. Dois anos mais tarde, SHA-1, o primeiro sucessor do SHA, foi publicado. Desde então quatro variantes foram lançadas com capacidades de saída aumentadas e um design ligeiramente diferente: SHA-224, SHA-256, SHA-384, e SHA-512 — por vezes chamadas de SHA-2.

Hash

é uma sequência de bits geradas por um algoritmo de dispersão, em geral representada em base hexadecimal, que permite a visualização em letras e números (0 a 9 e A a F), representando 1/2 byte cada. O conceito teórico diz que "hash é a transformação de uma grande quantidade de informações em uma pequena quantidade de informações".

Essa sequência busca identificar um arquivo ou informação unicamente. Por exemplo, uma mensagem de correio eletrônico, uma senha, uma chave criptográfica ou mesmo um arquivo. É um método para transformar dados de tal forma que o resultado seja (quase) exclusivo. Além disso, funções usadas em criptografia garantem que não é possível a partir de um valor de hash retornar à informação original.

Como a sequência do hash é limitada, muitas vezes não passando de 512 bits, existem colisões (sequências iguais para dados diferentes). Quanto maior for a dificuldade de se criar colisões intencionais, melhor é o algoritmo.

Uma função de hash recebe um valor de um determinado tipo e retorna um código para ele. Enquanto o ideal seria gerar identificadores únicos para os valores de entrada, isso normalmente não é possível: na maioria dos casos, o contra-domínio de nossa função é muito menor do que o seu domínio, ou seja, x (o tipo de entrada) pode assumir uma gama muito maior de valores do que (o resultado da função de hash).

MD5

(Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês) na verificação de integridade de arquivos e logins.

Foi desenvolvido em 1991 por Ronald Rivest para suceder ao MD4 que tinha alguns problemas de segurança. Por ser um algoritmo unidirecional, uma hash md5 não pode ser transformada novamente no texto que lhe deu origem. O método de verificação é, então, feito pela comparação das duas hash (uma da mensagem original confiável e outra da mensagem recebida). O MD5 também é usado para verificar a integridade de um arquivo através, por exemplo, do programa md5sum, que cria a hash de um arquivo. Isto pode-se tornar muito útil para downloads de arquivos grandes, para programas P2P que constroem o arquivo através de pedaços e estão sujeitos a corrupção dos mesmos. Como autenticação de login é utilizada em vários sistemas operacionais unix e em muitos sites com autentificação.

MD6

sobre a Criptografia MD6 MD6 (Message-Digest algorithm 6) é uma função hash criptográfico. Ele usa uma árvore de Merkle-como a estrutura, e em 2008, Ronald Rivest e outros, publicaram uma nova versão do algoritmo o MD6 com hash de tamanhos 224, 256, 384 ou 512 bytes. O algoritmo MD6 iria participar do concurso para ser o novo algoritmo SHA-3, porém após removeu-o do concurso por considera-lo muito lento, anuncionado que os computadores de hoje são muito lentos para usar o MD6.

Em breve estarei postando as funções de criptográfia de acordo com cada algoritimo

segunda-feira, 20 de dezembro de 2010

Procedures e Funções em PL/SQL


Bom pessoal a pedido de algumas pessoas está ai o tutorial sobre PL/SQL de uma maneira bem simples, utilizando a linguagem PL/SQL para fazer Procedures, e Functions.

Bom então vamos a luta.

Procedures e Funções


Uma função nada mais é do que pedaços de código, definidos pelo utillizador ou pré-definidos pela linguagem, utilizados para manipular dados. Aceitam um ou mais argumentos, devolvendo um valor. O argumento é uma constante, variável ou o nome de uma coluna. O valor devolvido serve para classificar a função: será numérica se o valor devolvido é numérico, char se devolve um char. As funções são utilizadas para manipular dados, tornando mais potentes as consultas. Dividem-se em três grandes grupos: manipulação de linhas, manipulação de grupos de linhas e funções analíticas. Dentro do primeiro grupo há funções para manipular caracteres, números, datas e funções que permitem converter dados de um tipo para outro. As funções de grupo permitem obter um valor que depende do grupo de linhas, por exemplo uma média, variância ou um máximo. As funções analíticas misturam os dois tipos anteriores: devolvem um valor por cada linha, mas esse valor depende do grupo.


E uma procedure nada mais é do um bloco PL/SQL nomeado. A grande vantagem sobre um bloco PL/SQL anônimo é que pode ser compilado e armazenado no banco de dados como um objeto de schema. Graças a essa característica as procedures são de fácil manutenção, o código é reutilizável e permitem que trabalhemos com módulos de programa.

Uma procedure é, então, um bloco
PL/SQL nomeado que pode aceitar argumentos (também chamado de parâmetros) e pode ser chamada por um programa, uma sessão SQL ou uma trigger.

Durante a instalação do banco de dados Oracle um script é executado automaticamente e cria toda a estrutura necessária para que as procedures sejam executadas. Eventualmente esse procedimento automático pode falhar devido a alguma falha física no disco rígido, nesse caso o usuário
SYS pode recriar a estrutura através do script SQL DBMSSTDX.SQL.

Para criar uma procedure o usuário precisa ter o privilégio de sistema
CREATE PROCEDURE, para criar a procedure em outros schemas o usuário deve ter o privilégio de CREATE ANY PROCEDURE. Este é um ponto muito interessante sobre as procedures, os privilégios para criação de procedures têm que ser concedidos explicitamente, ou seja, não pode ser adquirido através de roles.

Para executar uma procedure externa é necessário ter o privilégio de
EXECUTE. Caso queira alterar a procedure de outro schema deve ter o privilégio de sistema ALTER ANY PROCEDURE.

A sintaxe básica de uma procedure é:


CREATE [OR REPLACE] PROCEDURE [schema.]nome_da_procedure
[(parâmetro1 [modo1] tipodedado1,
parâmetro2 [modo2] tipodedado2,
...)]
IS|AS
Bloco PL/SQL


Onde:

REPLACE - indica que caso a procedure exista ela será eliminada e substituída pela nova versão criada pelo comando;

BLOCO PL/SQL - inicia com uma cláusula BEGIN e termina com END ou END nome_da_procedure;

NOME_DA_PROCEDURE - indica o nome da procedure;

PARÂMETRO - indica o nome da variável PL/SQL que é passada na chamada da procedure ou o nome da variável que retornará os valores da procedure ou ambos. O que irá conter em parâmetro depende de MODO;

MODO - Indica que o parâmetro é de entrada (IN), saída (OUT) ou ambos (IN OUT). É importante notar que IN é o modo default, ou seja, se não dissermos nada o modo do nosso parâmetro será, automaticamente, IN;

TIPODEDADO - indica o tipo de dado do parâmetro. Pode ser qualquer tipo de dado do SQL ou do PL/SQL. Pode usar referencias como %TYPE, %ROWTYPE ou qualquer tipo de dado escalar ou composto. Atenção: não é possível fazer qualquer restrição ao tamanho do tipo de dado neste ponto.

IS|AS - a sintaxe do comando aceita tanto IS como AS. Por convenção usamos IS na criação de procedures e AS quando estivermos criando pacotes.

BLOCO PL/SQL - indica as ações que serão executadas por aquela procedure.

Vamos ver um exemplo de procedure para ajudar nosso entendimento:


CREATE OR REPLACE PROCEDURE aumenta_sal (p_empno IN emp.empno%TYPE) IS
BEGIN
UPDATE
scott.emp
SET
sal = sal * 1.10
WHERE
empno = p_empno;
END aumenta_sal;
/


Neste exemplo estamos criando uma procedure para aumentar o salário de um funcionário em 10%. A primeira linha define o NOME DA PROCEDURE, que vai ser AUMENTA_SAL.

A linha dois define o parâmetro P_EMPNO no modo IN. Ou seja, vai ser um dado informado na chamada da procedure. Em seguida determinamos que ele será do mesmo tipo e tamanho que a coluna EMPNO da tabela EMP. Isso é feito através da referencia EMP.EMPNO%TYPE.

Podemos verificar o estado de nossa procedure através de uma simples consulta:


SELECT object_name, status
FROM user_objects
WHERE object_name LIKE '%AUMENTA%';/


Agora podemos verificar o funcionamento de nossa procedure:


SELECT empno, sal
FROM scott.emp;


EMPNO SAL
---------

7839 5000
7698 2850
7782 2450



CALL AUMENTA_SAL(7839);


Ou


EXECUTE AUMENTA_SAL(7839);



SELECT empno, sal FROM scott.emp;



EMPNO SAL
--------

7839 5500
7698 2850
7782 2450



Podemos notar que o salário do funcionário 7839 aumentou em 10%.


Funções


Sintaxe Básica:


CREATE [OR REPLACE] FUNCTION nome_da_função[( parameter1 [ mode1] datatype1,parameter2 [ mode2] datatype2,. . .)]RETURN tipo_de_dadoIS|ASBloco PL/SQL;


Ao contrário das procedures as funções tem que retornar ao menos um valor.


CREATE OR REPLACE FUNCTION pega_sal
(p_id IN emp.empno%TYPE)
RETURN NUMBER
IS
v_sal emp.sal%TYPE :=0;
BEGIN
SELECT sal
INTO v_sal
FROM scott.emp
WHERE empno = p_id;
RETURN v_sal;
END pega_sal;/


Executando


VARIABLE g_sal NUMBER
EXECUTE :g_sal := pega_sal(7839)
PRINT g_sal


Função para calcular CPMF


CREATE OR REPLACE FUNCTION cpmf(p_value IN NUMBER)
RETURN NUMBER IS

BEGIN
RETURN (p_value * 0.038);
END cpmf;
/
SELECT empno, ename, sal, cpmf(sal)
FROM scott.emp
WHERE deptno = 10;


sexta-feira, 9 de julho de 2010

Mapeamento Objeto Relacional


Bom vou falar hoje sobre Mapeamento Objeto Relacional (ORM, O / RM, e O / R mapeamento) em software de computador é uma programação técnica para conversão de dados incompatíveis entre sistemas do tipo em banco de dados relacional e orientada objetos linguagens de programação. This creates, in effect, a "virtual object database " that can be used from within the programming language. Isso cria, de fato, um "virtual objeto de banco de dados"que podem ser usados dentro da linguagem de programação.

Mapeamento Objeto Relacional é uma técnica de desenvolvimento utilizada para reduzir a impedância da programação orientada aos objetos utilizando banco de dados relacionais. As tabelas do banco de dados são representadas através de classes e os registros de cada tabela são representados como instâncias das classes correspondentes.

Bom esta técnica, o programador não precisa se preocupar com os comandos em linguagem SQL; ele irá usar uma interface de programação simples que faz todo o trabalho de persistência.

Não é necessária uma correspondência direta entre as tabelas de dados e as classes do programa. A relação entre as tabelas onde originam os dados e o objecto que os disponibiliza é configurada pelo programador, isolando o código do programa das alterações à organização dos dados nas tabelas do Banco de Dados.

A forma como este mapeamento é configurado depende da ferramenta que estamos a usar. Como exemplo, o programador que use Hibernate na linguagem Java pode usar ficheiros XML ou o sistema de anotações que a linguagem providencia.

 Copyright © 2008-2010 All Right Reserved - Todos os Direitos Reservados Elder Stroparo