segunda-feira, 19 de setembro de 2011

Trabalho Bimestral - Banco de Dados PostGre


Modelo de Dados do Banco

PostgreSQL  é um sistema gerenciador de banco de dados  objeto relacional  (SGBDOR), desenvolvido como projeto de código aberto, o PostgreSQL é um dos SGBDs (Sistema Gerenciador de Bancos de Dados) de código aberto mais avançados, contando com recursos como:
* Consultas complexas
* Chaves estrangeiras
* Integridade transacional
* Controle de concorrência multi-versão
* Suporte ao modelo híbrido objeto-relacional
* Gatilhos
* Visões
* Linguagem Procedural em várias linguagens (PL/pgSQL, PL/Python, PL/Java, PL/Perl) para Procedimentos armazenados
* Indexação por texto
* Estrutura para guardar dados Georeferenciados PostGIS

Plataformas

Em geral, qualquer plataforma moderna  compatível com Unix deve ser capaz de executar o PostgreSQL. As plataformas que foram testadas antes do lançamento de uma versão são listadas nas instruções de instalação.
O PostgreSQL também executa nativamente nos sistemas operacionais Microsoft Windows baseados no NT tais como Win200 SP4, WinXP e Win2003. Um instalador pré-empacotado está disponível em http://pgfoundry.org/projects/pginstaller. Versões do Windows baseadas no MS-DOS (Win95, Win98, WinMe) podem executar o PostgreSQL utilizando o Cygwin.
Há também uma versão para o Novell Netware 6  e uma versão para OS/2 (eComStation).

Fabricante e Desenvolvedor

O PostgreSQL é um projeto open source coordenado pelo PostgreSQL Global Development Group. Embora as atividades do grupo sejam patrocinadas por diversas organizações de todo o mundo.
Portanto, o desenvolvimento do PostgreSQL é feito por um grupo de desenvolvedores, em sua maioria voluntários, espalhados por todo o mundo e que se comunicam via Internet. Logo, trata-se, de um projeto direcionado pela comunidade de desenvolvedores e de usuários, a qual qualquer pessoa pode se juntar, bastando se inscrever em listas de discussão e delas participarem.

Características Principais

Limite de Banco de Dados

Tamanho ilimitado de registro: não impõe limites no tamanho de armazenamento dos tipos de dados. Com a arquitetura TOAST (The Oversized-Attribute Storage Technique), os únicos limites de armazenamento de tipos de dados são impostos pela configuração do hardware.

Se um tipo de dado não se ajustar ao tamanho do bloco, atributos únicos podem ser automaticamente comprimidos ou movidos, ou ainda comprimidos fora do registro e armazenados independentemente, dentro de uma tabela relacionada. É possível armazenar registros longos, de qualquer tamanho e com ótima performance.


Tamanho máximo de um banco
Ilimitado
Tamanho máximo de uma tabela
64TB
Tamanho máximo de um registro
Ilimitado para a versão 7.1 e posteriores
Tamanho máximo de um campo
1GB para a versão 7.1 e posteriores
Máximo de linhas numa tabela
Ilimitado
Máximo de colunas numa tabela
1600
Máximo de índices numa tabela
Ilimitado


Versão de SQL utilizada

O Grupo de Desenvolvimento Global do PostgreSQL anuncia o lançamento do PostgreSQL 9.0, a versão mais recente do banco de dados relacional de código aberto mais avançado do mundo.

Suporte a Características do SQL

Stored procedures são, normalmente, pequenos pedaços de código que ficam armazenados no lado do servidor de banco de dados. A construção desses pedaços de código é tida como uma boa prática por programadores que podem, por exemplo, deixar no lado do servidor códigos complexos que são utilizados por vários aplicativos, evitando a necessidade de replicá-los em cada um deles. Diferentemente de outros SGBDs que tratam os conceitos de procedimentos armazenados, gatilhos e funções como coisas distintas, o PostgreSQL trata todos eles como funções. Essas funções têm características diferentes, mas são todas criadas como funções ou functions. Por exemplo, o que diferencia uma função de trigger (gatilho) das outras é o tipo de dado que ela retorna. Falaremos sobre gatilhos em artigos mais adiante. Então, a partir de agora utilizaremos o termo função para nos referirmos aos nossos procedimentos armazenados.

Triggers são procedimentos armazenados que são acionados por algum evento e em determinado momento. Na maioria dos bancos de dados estes eventos podem ser inserções (INSERT), atualizações (UPDATE) e exclusões (DELETE), e os momentos podem ser dois: antes da execução do evento (BEFORE) ou depois (AFTER). E isso também vale para o PostgreSQL. Um diferencial das triggers deste banco de dados para outros é que no PostgreSQL as triggers são sempre associadas a funções de triggers e, nos demais, criamos o corpo da trigger na própria declaração desta. O PostgreSQL possui dois tipos de triggers: triggers-por-linha e triggers-por-instrução. A trigger-por-linha é disparada uma vez para cada registro afetado pela instrução que disparou a trigger. Já a trigger-por-instrução é disparada somente uma vez quando a instrução é executada.

Funções de triggers são funções que não recebem nenhum parâmetro e retornam o tipo trigger. Essas funções recebem uma estrutura chamada TriggerData, e esta é passada internamente para a função pelo PostgreSQL, devem ser escritas em C (linguagem C) ou alguma linguagem procedural disponível no banco de dados. Essas liguagens podem ser várias, como Ruby, Perl, Python, entre outras.
Atualmete existem quatro linguagens procedurais disponíveis na distribuição padrão do PostgreSQL: PL/pgSQL, PL/Tcl, PL/Perl e PL/Python. Mas é possível que o usuário defina outras linguagens.


Documentação ou Suporte

Suporte

O PostgreSQL tem uma ampla variedade de opções de suporte comercial e da comunidade disponível para os seus usuários. Veja abaixo a seção "Comunidade" para ver detalhes das opções disponíveis para os usuários da comunidade de PostgreSql, incluindo listas de discussão e IRC. E não se esqueça de ler o FAQ e a documentação.

Suporte Comercial
Suporte comercial está disponível a partir de uma das muitas empresas que oferecem suporte profissional ao PostgreSQL. Uma lista de empresas que oferecem serviços de hospedagem com acesso ao PostgreSQL também está disponível.

Suporte da Comunidade
O PostgreSQL é bem suportado pela sua ativa comunidade. O desenvolvimento corrente é registrado no Noticiário Semanal do PostgreSQL e em mais de uma dúzia de listas categorizadas em tópicos como administração, anúncios, empregos, performance e SQL. Nós também temos vários Grupos de Usuários espalhados pelo mundo com informações sobre PostgreSQL em várias linguas. Os recursos da comunidade estão listados abaixo:

Documentação

FAQ (Inglês)
FAQ pt_BR
Artigos (Inglês)
Artigos (pt_BR)
Lista de Discussão PGBR-Geral (Comunidade Brasileira)
Lista de Discussão PGBR-Dev (Organização da Comunidade Brasileira)
Lista de Discussão PGBR-Eventos (Anúncio de Eventos da Comunidade Brasileira)
Listas de Discussão Internacionais
Planeta PostgreSQL Brasil (agregador de sites/blogs brasileiros)
Planet PostgreSQL Internacional (agregador de sites/blogs internacional)
Canal Brasileiro no IRC: #postgresql-br em irc.freenode.net
Outros canais no IRC

Licenças (valores para servidor e estação)

O PostgreSQL usa a licença BSD, que requer apenas que o código fonte licenciado mantenha seu direito de cópia e informação da licença. Esta licença certificada pela OSI é amplamente vista como flexível e amigável às empresas, já que ela não restringe o uso do PostgreSQL com aplicações comerciais e proprietárias. Juntamente com suporte de múltiplas empresas e propriedade pública do código, a licença BSD torna o PostgreSQL muito popular com fabricantes que querem anexar um banco de dados com seus próprios produtos sem medo de ônus financeiro, prisão à um só fabricante, ou mudanças nos termos de licenças.
LICENÇAS OPEN SOURCES Algumas licenças: General Public License (Licença Pública Geral): A GPL é a licença com maior utilização por parte de projetos de software livre, em grande parte devido à sua adoção para o projeto GNU e o sistema operacional GNU/Linux. Licença Apache é uma licença para software livre (open source) de autoria da Apache Software Foundation (ASF). Todo software produzido pela ASF ou qualquer um dos seus projetos e subprojetos é licenciado de acordo com os termos da licença Apache.
BSD permite que o software distribuído sob a licença, seja incorporado a produtos proprietários. Trabalhos baseados no material podem até ser liberados com licença proprietária. Alguns exemplos notáveis são: o uso de código do BSD (funções de rede de computadores) em produtos da Microsoft, e o uso de muitos componentes do FreeBSD no sistema Mac OS X da Apple Computer. COMPARANDO LICENÇAS GPL BSD Express - Limitação ao tamanho dos dados (máximo 4GB) - Limitação ao tamanho de memória (máximo 1GB) Informix - No Máximo um Processador e 2 GB de memória.

Ferramentas

Algumas ferramentas de projeto, administração e modelagem, que facilitam a vida de quem trabalha com o banco de dados PostgreSQL. Agradecendo a Diogo Biazus, membro do Grupo Global de Desenvolvimento do PostgreSQL, pela contribuição dada a esta coluna.
As ferramentas estão listadas abaixo separadas em 3 categorias:

·       Multiplataforma: rodam em mais de uma plataforma de software (sistema operacional);
·       Linux: rodam em máquinas com o sistema operacional GNU/Linux e
·       Windows: rodam em máquinas com o sistema operacional Microsoft Windows.

Multiplataforma

PGAccess: esta é a interface gráfica para usuário (GUI) original do PostgreSQL, no estilo do navegador de banco de dados do MS Access, escrito em Tcl/Tk. Permite navegar, adicionar e editar tabelas, visões, funções, seqüências, bases de dados e usuários, assim como consultas auxiliadas por gráficos (QBE).
phpPgAdmin: um clone do popular phpMyAdmin, otimizado para o PostgreSQL. Como o próprio nome já diz, foi criado em PHP. Esta é uma ferramenta administrativa muito boa, robusta, e existe uma versão totalmente em português. Funciona muito bem, tem muitas funcionalidades e é código livre.
PGAdmin III: uma interface completa de administração do PostgreSQL, praticamente o cliente oficial.
OpenOffice.org: o OpenOffice.org 2 traz o aplicativo Base que via JDBC permite uma manipulação bem avançada de bases de dados possibilitando o desenvolvimento de formulários e relatórios bem complexos.
Xpg: interface de administração do banco de dados PostgreSQL baseado em Java, com acesso a tabelas e entrada de dados, interface para consultas e habilidade para exportar o resultado das mesmas para relatórios em HTML. Porém tem algumas limitações, algumas funções como criação de índices não podem ser feitas visualmente. É de código livre e tem um instalador RPM.
tedia2sql: conversor de diagramas UML do programa Dia (muito utilizado em plataformas POSIX) para scripts SQL. Esta é a ferramenta que permite criar diagramas de entidade relacional no Dia, e depois converter este modelo para um script SQL, inclusive para PostgreSQL.

Todas plataformas que suportam Java

Druid III: modelagem espartana.
IBM Rational Data Architect: dicionário de dados, modelagem baseados em Eclipse. Suporte não nativo a PostgreSQL, via JDBC.
Squirrel SQL: o Squirrel SQL é uma interface gráfica em Java que permite visualizar e manusear qualquer banco de dados que suporte JDBC, como o PostgreSQL. Recursos adicionais são implementados via plugins.
Aqua Data Studio: outro freeware baseado em Java com um grande número de recursos sofisticados. Sua especialidade está em criar, editar e rodar scripts SQL. Possui cores diferenciadas para sintaxe e completa comandos automaticamente.
DBVisualizer: para quem quer uma ferramenta que funcione com vários bancos de dados diferentes, seja simples para rodar comandos SQL e visualizar a estrutura do banco de dados essa é a ferramenta certa. Não possui funcionalidades administrativas, é um visualizador.
DbWrench: uma interface espartana, para fazer a modelagem. Suporta engenharia reversa e pode ser usado gratuitamente por 30 dias.
Power Architect: Ferramente em Java para modelagem de dados com suporte a engenharia reversa. Licença GPL3

Linux

pgFouine: análise de registros de execução.
Data Architect: ferramenta de modelagem, pode ser usada para gerar bases a partir de um modelo ER (Entidade de Relacionamento). Gera o script SQL e funciona bem com o PostgreSQL, conecta com o banco através do Unix ODBC. Não é código aberto, mas o preço é muito bom para o potencial da ferramenta. Feito em Qt.
Red Hat: um tanto quanto polêmico, mas a Red Hat lançou seu banco de dados baseado no PostgreSQL, beneficiando-nos com novas ferramentas gráficas para projeto e administração de bases de dados.
TOra: originalmente, uma interface de administração de banco de dados Oracle, com habilidades limitadas para administrar bases de dados PostgreSQL (tabelas, visões e funções, somente). Porém, o sofisticado editor de funções do TOra irá funcionar para o PostgreSQL.

Plataforma Windows

Embarcadero ER Studio: uma das mais populares ferramentas de modelagem.
PGExplorer: esta é outra interface de administração de banco de dados PostgreSQL, muito parecida com o PGAdmin II.
DBTools: é uma ferramenta de gerenciamento com ótima usabilidade, desenvolvida por uma empresa brasileira, mas o software e a documentação estão em inglês. Se você for um usuário do antigo DBManager (versão 1.0.15 ou anterior) você irá se surpreender com o DBTools.
Zeos Database Explorer: permite a administração do banco de dados PostgreSQL com a ajuda de uma interface aperfeiçoada com controles avançados. O número de conjuntos de comandos incluem serviços de migração de bases de um ambiente para outro, assim como um utilitário de cópia de segurança da base de dados e restauração da mesma.
PgManager: basicamente, uma versão com mais recursos dos conhecidos PGAdmin II e PGAccess. Agrega suporte a edição de gatilhos e restrições, acha metadados e monitora consultas. Também inclui ferramentas de importação/exportação de múltiplos formatos de dados.
Microsoft Access: exatamente! Você pode usar o Microsoft Access como interface para administração de um banco de dados PostgreSQL. Contudo, você terá que conviver com as limitações impostas pelo ODBC com relação aos recursos que o programa oferece.
ERWin: aparentemente, um dos mais avançados e utilizados modeladores de entidade relacional. Não possui suporte direto ao PostgreSQL, porém, seus recursos flexíveis geram, com pouquíssimas alterações, scripts prontos para o PostgreSQL. Para que o ERWin gere um script compatível com o PostgreSQL, basta criar os domínios necessários em "/Domain Dictionary/" no menu "/Model/" para este banco de dados, como por exemplo SERIAL, INT2 ou SMALLINT, INT4 ou INTEGER, etc.
DeZign for Databases: esta é uma ferramenta de desenvolvimento de banco de dados que usa diagramas de entidade de relacionamento para modelagem e, gera automaticamente esquemas em SQL inclusive para o PostgreSQL. Suporta domínios, gera relatórios e dicionário de dados.
Quest Toad Data Modeller: antigo CaseStudio, esta é outra ferramenta de gerenciamento e projeto de banco de dados utilizando modelagem de diagramas de entidade relacional, também gera scripts SQL para o PostgreSQL e contém alguns recursos diferenciais como por exemplo, suporte a JScript e VBScript.
Genexus: modelador de banco de dados e gerador de aplicações. Ferramenta muito utilizada por grandes e médias empresas, mas amplamente criticada pela (baixa) qualidade do código e dos modelos tipicamente gerados.
Sybase Power Designer: ferramenta avançada de modelagem com suporte ao PostgreSQL, incluindo tabelas, visões, gatilhos, restrições e integridade referencial. Base para o PowerAMC (método Merise) e Quest QDesigner (substituído pelo Toad Data Modeller).


Vantagens

O PostgreSQL é um  banco  maduro, com um histórico de desenvolvimento iniciado em 1977.
Tem as principais características desejadas em um banco de dados:
Recuperação automática após crash de sistema (WAL);
MVCC (controle de concorrência de multi-versão).
Neste mecanismo, processos de leitura não bloqueiam processos de escrita e vice-versa, reduzindo drasticamente (às vezes, eliminando) a contenção entre transações concorrentes e paralisação parcial ou completa (deadlock);
Logging de transações;
Commit / Rollback / Checkpoints;
Triggers / Stored Procedures;
Constraints / Foreign Keys;
Backup On-line;
Algumas mudanças da versão mais recente Replicação e Escalabilidade: Hot Standby, Replicação em Fluxo Administração e Segurança: Atualização in Loco (Upgrade-in-Place) Integrada (pg_upgrade), Autenticação RADIUS, Verificação de Força de Senha (passwordcheck) Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT PERMISSIONS) Projeto de Bancos de Dados e SQL: Restrições de Unicidade Postergáveis, Gatilhos Condicionais. Gatilhos por Colunas, Ordenamento em Agregações, Novas "Windowing Functions" (RANGE PRECEEDING e FOLLOWING). Funções Armazenadas (Stored Procedures): Blocos de Código de Procedimento Anônimos (comando DO), Melhorias nas Funções Armazenadas em Perl e Python (incluindo suporte ao Python 3), Chamadas com Parâmetros Nomeados Performance e Recursos Avançados: Mensagens Assíncronas Melhoradas (LISTEN/NOTIFY), Suporte a Windows 64-bit, Otimização para Consultas Geradas por ORM (remoção de JOIN), Chaves Únicas para Dados não Escalares (Exclusion Constraints), Suporte Expantido para Dados Chave-Valor (HStore), Planos de Explain em JSON e XML.
PGAccess : esta é a interface gráfica para usuário (GUI) original do PostgreSQL, no estilo do navegador de banco de dados do MS Access, escrito em Tcl/Tk. phpPgAdmin : um clone do popular phpMyAdmin, otimizado para o PostgreSQL. Esta é uma ferramenta administrativa muito boa, robusta, e existe uma versão totalmente em português. Funciona muito bem, tem muitas funcionalidades e é código livre. PGAdmin III : uma interface completa de administração do PostgreSQL, praticamente o cliente oficial. OpenOffice.org : o OpenOffice.org 2 traz o aplicativo Base que via JDBC permite uma manipulação bem avançada de bases de dados possibilitando o desenvolvimento de formulários e relatórios bem complexos. Xpg: interface de administração do banco de dados PostgreSQL baseado em Java, com acesso a tabelas e entrada de dados, interface para consultas e habilidade para exportar o resultado das mesmas para relatórios em HTML. Porém tem algumas limitações, algumas funções como criação de índices não podem ser feitas visualmente. É de código livre e tem um instalador RPM.

Dump

Realiza dump consistente com o banco de dados on-line sem bloquear usuários.
Podem ser selecionada parte dos objetos na exportação ou importação como permissões, dados, esquemas, etc.
Um dump pode ser exportado ou compactado diretamente para outro banco utilizando pipe!
Método SQL-dump : A idéia por trás do Método SQL-dump é gerar um arquivo texto contendo comandos SQL que, ao serem processados pelo servidor, recriam o banco de dados no mesmo estado em que este se encontrava quando o arquivo foi gerado. O PostgreSQL disponibiliza o programa utilitário pg_dump para esta finalidade. (o pg_dump não bloqueia outras operações no banco enquanto ta executando). Cópia de segurança no nível de sistema de arquivo: Uma estratégia alternativa para fazer cópia de segurança, é copiar diretamente os arquivos que o PostgreSQL usa para armazenar os dados dos bancos de dados. (O servidor de dados precisa estar totalmente parado tanto na hora de fazer a cópia como na hora de restaurar). Cópia de segurança em-linha: Durante todo o tempo, o PostgreSQL mantém o registro de escrita prévia (WAL = write ahead log) no subdiretório pg_xlog do diretório de dados do agrupamento. O WAL contém todas as alterações realizadas nos arquivos de dados do banco de dados. O WAL existe, principalmente, com a finalidade de fornecer segurança contra quedas: se o sistema cair, o banco de dados pode retornar a um estado consistente “refazendo” as entradas gravadas desde o último ponto de controle. Se for necessário fazer a recuperação, pode ser feita a recuperação da cópia de segurança do banco de dados no nível de sistema de arquivos e, depois, refeitas as alterações a partir da cópia dos arquivos de segmento do WAL, para trazer a restauração para o tempo presente.
Acredita-se que a maior vantagem do Software de código aberto como o PostgreSql é o fato que pequenas empresas tem condição de atingir qualidade admirável no seu software com relativamente baixo custo. Um exemplo prático foi a Jynx onde todas as informações são armazenadas num banco de dados relacional PostgreSql.
As principais vantagens do PostgreSql são:
o Imunidade ao fato de não ter que pagar por uma licença, muito menos para várias.
o Performance bastante admirável.
o Multi-plataforma.
o Altamente escalável.
O PostgreSQL tem algumas vantagens com relação ao MySQL, como integridade referencial e suporte a transações NATIVO. O MySQL também oferece esses recursos, mas não é NATIVO, mas usando as tabelas do tipo InnoDB que não é da equipe MySQL AB. Fora que para tirar proveito desse tipo de tabela o MySQL precisa ser mais bem configurado, para reservar espaço para as tabelas, entre
outras providências.

Clientes

Algumas Empresas que Patrocinam o PostgreSQL
- InterpriseDB
- Fijitsu
- RedHat
- Skype
- Sun

Algumas Empresas que usam o PostgreSQL (internacionais)
- Apple
- BASF
- Cisco
- OMS (Organização Mundial de Saúde)

Algumas Empresas que usam o PostgreSQL (nacionais)
- FAB (Força Aérea Brasileira)
- Prefeitura Municipal de Sobral
- Vivo
- DNOCS
- DETRAN do Ceará

História Evolutiva

Após seu retorno a Berkeley, em 1985, Stonebraker começou um projeto pós-Ingres patrocinado pela DARPA (*Defense Advanced Research Projects Agency) e pelo ARO (Army Research Office) com o objetivo de resolver problemas com o modelo de banco de dados relacional. O PostgreSQL é um dos resultados de uma ampla evolução que se iniciou com o projeto Ingres, desenvolvido na Universidade de Berkeley, Califórnia. O líder do projeto, Michael Stonebraker, um dos pioneiros dos bancos de dados relacionais, deixou a universidade em 1982 para comercializar o Ingres, porém retornou a ela logo em seguida. *Agência de Pesquisas em Projetos Avançados. Estas funcionalidades incluíam a habilidade de definir tipos, mas também a habilidade de descrever relações - as quais até este momento eram amplamente utilizadas, mas completamente mantidas pelo usuário. No Postgres, o banco de dados "compreendia" as relações e podia obter informações de tabelas relacionadas utilizando regras. O principal problema era a incapacidade do modelo relacional compreender “tipos” (atualmente, chamados de objetos), ou seja, combinações de dados simples que formam uma única unidade. O projeto resultante, chamado Postgres, era orientado a introduzir a menor quantidade possível de funcionalidades para completar o suporte a tipos. As principais características acrescentadas nas versões 6.x são MVCC (Multiversion Concurrency Control – Controle de Concorrência Multiversões), melhorias no SQL e novos tipos de dados nativos (novos tipos de datas e hora e tipos geométricos). Em agosto de 1996, Marc Fournier, Bruce Momjian e Vadim B. Mikheev lançaram a primeira versão externa da Universidade de Berkeley e deram início à tarefa de estabilizar o código herdado. Também em 1996, o projeto foi renomeado para PostgreSQL a fim de refletir a nova linguagem de consulta ao banco de dados: SQL. A primeira versão de PostgreSQL, a 6.0, foi liberada em janeiro de 1997. Desde então, um grupo de desenvolvedores e de voluntários de todo o mundo, coordenados pela Internet, têm mantido o software e desenvolvido novas funcionalidades. A versão 8.0 foi lançada em janeiro de 2005 e entre outras novidades, foi a primeira a ter suporte nativo para Microsoft Windows (tradicionalmente, o PostgreSQL só rodava de forma nativa em sistemas Unix e, em sistemas Windows - através da biblioteca Cygwin). Dentre as muitas novidades da versão 8.x, pode-se destacar o suporte a tablespaces, savepoints, point-in-time recovery, roles e Two-Phase Commit (2PC). Em julho de 2009 foi lançada a versão mais recente: 8.4. Em maio de 2000 foi liberada a versão 7.0. As versões 7.x trouxeram as seguintes novas funcionalidades: Write-Ahead Log (WAL), esquemas SQL, outer joins, suporte a Ipv6, indexação por texto, suporte melhorado a SSL e informações estatísticas do banco de dados. Em um sistema usando WAL, todas as modificações são gravadas em um log antes de serem aplicadas. Uma das principais vantagens da utilização do WAL é um número reduzido de forma significativa de gravações em disco, pois somente o arquivo de log deve ser liberado para o disco no momento da confirmação da transação, ao invés de cada arquivo de dados alterados pela transação. Em ambientes de multiusuários, efetivações de várias transações podem ser realizadas com um único fsync do arquivo de log.

o Administração e Segurança
o Atualização in Loco (Upgrade-in-Place) Integrada (pg_upgrade)
o Autenticação RADIUS
o Verificação de Força de Senha (passwordcheck)
o Comandos de Gestão de Permissões de Banco de Dados Facilitados (GRANT ON ALL e DEFAULT PERMISSIONS)
o Performance e Recursos Avançados
o Mensagens Assíncronas Melhoradas (LISTEN/NOTIFY)
o Suporte a Windows 64-bit
o Otimização para Consultas Geradas por ORM (remoção de JOIN)
o Chaves Únicas para Dados não Escalares (Exclusion Constraints)
o Suporte Expantido para Dados Chave-Valor (HStore)
o Planos de Explain em JSON e XML

O PostgreSQL 9.0 inclui ainda dezenas de outras grandes melhorias que aprimoram todos os aspectos do projeto e da performance de aplicações de bancos de dados, incluindo: suporte a Windows 64 bits, gatilhos condicionais e por coluna, atualização in loco da 8.3 e 8.4, restrições de unicidade postergáveis, e mensagens assíncronas de alto desempenho.

domingo, 18 de setembro de 2011

MRel - Modelo Relacional - Perguntas e Respostas


1) Explique conceitualmente a diferença entre o MER e o Modelo de Dados Relacional, ou simplesmente Modelo Relacional (MRel).
 
A diferença entre eles é que no MER utiliza dados conceituais de alto-nível e o MRel utiliza implementação de dados mais simples. O MER é um modelo de dados conceitual de alto-nível. Assim, os conceitos do MER foram projetados para serem compreensíveis a usuários, descartando detalhes de como os dados são armazenados. E já o MRel os modelos de dados de implementação são mais simples com uma estrutura de dados uniforme e o mais formal. E os modelos de dados relacionais apresentam os dados da base com uma coleção de relações, cada relação poderá ser estendida como uma tabela ou um simples arquivo de registro.
Atualmente, o conceito MER é utilizado principalmente durante processo de projetos da base de dados, estima-se que esse conceito possa ser utilizado diretamente em uma classe de SGBDS’s.


2) Explique os conceitos de Instância, Esquema e Domínio no MRel. Explique as notações no MRel.

A abordagem relacional está baseada no principio de que as informações em uma base de dados podem ser consideradas como relações matemáticas e que estão representadas de maneira uniforme, através do uso de tabelas, ou falando de uma forma direta um arquivo, porem um arquivo é mais restrito que uma tabela. Numa tabela de alunos aonde contenha os itens RA, NOME, END, TELEF, IDADE.
O domínio de um atributo, em geral, um tipo de dado que especifica o que pode receber. EX: Nomes de alunos. – conjunto de todos os nomes possíveis para pessoas no formato String.
É um conjunto de valores atômicos, que significa um valor indivisível e monovalorado.
Relações: dado seguinte esquema de uma Relação de alunos:
Aluno = {Nome, RG, Idade}
A instância de uma relação em um determinado momento é toda a relação no momento, ou seja, uma instancia de Alunos são todos os alunos cadastrados no momento. Se amanhã acrescentar mais alunos, a instância será todos os alunos antigos mais os novos.


3) Explique os conceitos de super-chave, chave candidata e chave estrangeira.

Super Chave é um conjunto de um ou mais atributos que, tomado coletivamente, permite-nos identificar unicamente uma entidade no conjunto de entidades. Por exemplo: o atributo CPF do conjunto de entidades Cliente é suficiente para distinguir uma entidade de Cliente das outras. Assim, CPF é uma superchave.

Chave candidata é qualquer superchave que não tenha um subconjunto próprio como uma outra superchave. É possível que diversos conjuntos distintos de atributos possam servir como uma chave candidata.
Suponha que uma combinação de NOME e RUA seja suficiente para distinguir entre membros do conjunto de entidades Cliente. Então ambos, {CPF} e {NOME, RUA}, são chaves candidatas. Embora os atributos CPF e NOME juntos possam formar uma superchave para Cliente, esta combinação não forma uma chave candidata, uma vez que o atributo CPF sozinho é uma chave candidata.

Chave estrangeira é um atributo ou uma combinação de atributos numa relação R2, cujos valores são necessário para equivaler à chave primária de uma relação R1.
Uma chave estrangeira é um campo, que aponta para a chave primária de outra tabela ou da mesmas tabela. Ou seja, passa a existir uma relação entre tuplas de duas tabelas ou de uma única tabela. A finalidade de chave estrangeira é garantir a integridade dos dados referenciais, pois apenas serão permitidos valores que supostamente vão aparecer na base de dados.
Esse tipo de atributo não permite exclusão, modificação e/ou inserção de dados em tabelas que estejam dependentes umas das outras, o que requer modificadores especiais, como cascade, por exemplo. Isso também exige uma maior atenção do administrador da base de dados, quanto à própria manipulação dos dados.


4) Explique o conceito de integridade no MRel.

As restrições de chave e de integridade de entidade aplicam-se apenas a relações individuais. A restrição de integridade referencial é uma restrição que é especificada entre duas relações e é usada para manter a consistência entre tuplas de duas relações.
Informalmente, a restrição de integridade referencial estabelece que um tupla de uma relação que se refere à outra relação deve se referir a uma tupla existente naquela relação. Não existe uma representação formal para chave estrangeira. Normalmente, identifica-se um arco direto de cada chave estrangeira à relação que ela faz referência.


5) Explique o conceito de integridade referencial no MRel.

A restrição de integridade referencial é uma restrição que é especificada entre duas relações e é usada para manter a consistência entre tuplas de duas relações. A restrição de integridade referencial estabelece que um tupla de uma relação que se refere a outra relação deve se referir a uma tupla existente naquela relação. Por exemplo, o atributo NDEP da tabela EMPREGADO indica o número do departamento que cada empregado trabalha. Assim, todos os valores de NDEP nas tuplas da relação EMPREGADO devem pertencer ao conjunto de valores do atributo DNÚMERO da relação DEPARTAMENTO. E para definir a restrição de integridade referencial, há a necessidade de antes definir a chave-estrangeira.


6) Explique os conceitos de Intenção e Extensão no MRel. Quais são as operações de atualização sobre relações?

Intenção da relação => Esquema da Relação R
Extensão da relação => Estado da relação r(R).
São utilizados, com freqüência, os termos intenção da relação para o esquema R e extensão da relação para a instância r(R). 

Operações de Atualizações sobre Relações
Existem três tipos básicos de operação de atualização sobre relações - inserção, remoção e modificação. A inserção é usada para inserir novas tuplas em uma relação, a remoção elimina tuplas e a modificação modifica os valores de alguns atributos. Quando são aplicadas operações de atualização, o projetista deve verificar que as restrições de integridade especificadas no esquema da base de dados relacional não sejam violadas.

sexta-feira, 16 de setembro de 2011

MER - Modelo Entidade Relacionamento - Perguntas e Respostas

1) Explique o conceito do MER e a sua importância no relacionamento entre os profissionais da informática e os demais profissionais.

O MER é um modelo de dados conceitual de alto-nível. Seus conceitos do  foram projetados para serem compreensíveis a usuários, descartando detalhes de como os dados são armazenados.
Consiste em um conjunto de objetos básicos chamados entidades e nos relacionamentos entre esses objetos.

O MER é usado principalmente durante o processo de projeto da base de dados e tem por finalidade facilitar o projeto de banco de dados, possibilitando a especificação da estrutura lógica geral do banco de dados.
Existem expectativas para que uma classe de SGBD’s baseados diretamente no MER esteja disponível no futuro.


2) Explique e comente o conceito de entidades e atributos.

O objeto básico que o MER representa é a entidade. Uma entidade é algo do mundo real que possui uma existência independente. Uma entidade pode ser um objeto com uma existência física. Exemplo: uma pessoa, carro ou empregado ou pode ser um objeto com existência conceitual, como: uma companhia, um trabalho ou um curso universitário.

Entidade: é uma representação abstrata de um objeto do mundo real.

Cada entidade tem propriedades particulares, chamadas atributos, que o descrevem. Por exemplo, uma entidade empregado pode ser descrita pelo seu nome, o trabalho que realiza, idade, endereço e salário. Uma entidade em particular terá um valor para cada um de seus atributos. Os valores de atributos que descrevem cada entidade ocupam a maior parte dos dados armazenados na base de dados.

Atributo: Elemento de dado que contém informação que descreve uma entidade, também conhecido como campo.

Alguns atributos podem ser divididos em subpartes com significados independentes. Abaixo alguns tipos de atribuitos:

Atributo Monovalorado: assume um único valor para cada elemento do conjunto-entidade
Ex.: Nome

Atributo Composto: formado por um ou mais sub-atributos
Ex.: Endereço (Endereço da Rua, Cidade, Estado e CEP)

Atributo Multivalorado: uma única entidade tem diversos valores para este atributo (seu nome é sempre representado no plural)
Ex.: Dependentes

Atributo Determinante: identifica cada entidade de um conjunto-entidade (também conhecido com atributo chave)
Ex.: Cod_Func

Domínio de um Atributo: conjunto de valores permitidos para o atributo
Ex.: Sexo {M, F}


3) Explique e comente o conceito de relacionamento.

Relacionamento é a associação entre duas ou mais entidades,tendo relacionamento
total ou obrigatório e parcial ou opcional. Também tem o auto-relacionamento que é
estabelecido entre uma entidade e ela mesma.

Grau de relacionamento:

Auto relacionamento: 1 entidade
Binário: 2 entidades
Ternário: 3 entidades
N-ário: maior ou igual a 4

Cardinalidade: número de elementos em uma interação.

1 : 1 = 1 elemento do A pode-se relacionar com apenas 1 do B;
1 : N = 1 elemento do A pode-se relacionar com N (muitos) do B;
m : N = M (muitos) elementos do A pode-se relacionar com N (muitos) do B.


4) Explique e comente o conceito de atributo-chave.

O atributo-chave é uma restrição que é dada para identificar unicamente uma entidade no conjunto-entidade e nenhum atributo que participe da chave de um conjunto-entidade devem aceitar valores nulos. E o seu valor pode ser usado para identificar cada entidade unicamente, as vezes, um conjunto de atributos pode formar uma chave, que será chamado atributo composto, que será um atributo-chave do tipo de entidade.


5) Explique o conceito do DER e a sua importância no relacionamento entre os profissionais da informática e os demais profissionais.

DER é a representação gráfica do modelo MER, ele é usado para representar o modelo conceitual do negócio.


6) Dê ou faça um exemplo de um DER e explique o mesmo.

DER 1:1 Exemplo: casamento, onde um marido pode possuir apenas uma esposa e uma esposa apenas um marido.

DER 1:N Exemplo: Veiculo automotor, onde um veículo pode possuir apenas um proprietário, mas um proprietário pode possuir vários veículos.


DER N:N Exemplo quarto de hotel, onde um quarto pode será alugado por varias pessoas e uma pessoa pode alugar vários quartos.