semin´ario s2i: banco de dados - mysql e postgresql · explicada mais abaixo [4]. 3 projeto 3.1...

23
Semin´ ario S2i: Banco de Dados - MySQL e PostgreSQL Marcelo Moraes Minasi 0013021-4 Florian´ opolis, 26 de abril de 2004. Lista de Tabelas 1 Tabela do fornecedor. ................................. 4 2 Tabela das pe¸ cas..................................... 4 3 Tabela do relacionamento entre fornecedores e pe¸ cas................. 5 4 Dependˆ encias: um caso errado e outro correto. ................... 8 5 Tabela do fornecedor. ................................. 9 6 Tabela da vari´ avel SEGUNDA e FP . ......................... 10 7 Tabela da vari´ avel FC e CS............................... 11 Lista de Figuras 1 Componentes de um sistema de banco de dados. .................. 3 2 Relacionamento como entidade............................. 4 3 Primeira ilustra¸ ao da arquitetura de trˆ es n´ ıveis. .................. 7 4 Segunda ilustra¸ ao da arquitetura de trˆ es n´ ıveis. .................. 7 5 Tela ap´ os a simples execu¸ ao de um cliente SQL e seu status. ........... 16 6 Benchmark de banco de dados: p´ aginas da web retornadas por segundo...... 19 7 Benchmark de banco de dados: as respostas mais r´ apidas.............. 20 odigos 1 O banco de dados de fornecedores e pe¸ cas (defini¸ ao dos dados). ......... 6 2 Exemplo de dom´ ınios usando DOMAIN........................ 12 3 Exemplo de falha de verifica¸ ao de tipo em dom´ ınios................. 13 4 Exemplo de restri¸ ao usando SELECT. ....................... 13 5 Exemplo de proje¸ ao usando SELECT......................... 13 6 Exemplo de proje¸ ao simplificada usando SELECT. ................ 14 7 Exemplo de jun¸ ao usando SELECT.......................... 14 8 Exemplo de INSERT. ................................. 15 9 Exemplo de UPDATE.................................. 15 10 Exemplo de DELETE.................................. 16 11 Exemplo de CREATE VIEW.............................. 16 12 Exemplo de uma consulta sobre uma VIEW. .................... 17 13 Exemplo de elimina¸ ao de registro na VIEW e suas implica¸ oes na tabela real. . 17 14 Exemplo de SQL Embutida com API para Java. .................. 21 15 Exemplo de SQL Embutida com API para C++................... 23

Upload: others

Post on 14-Sep-2020

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

Seminario S2i:

Banco de Dados - MySQL e PostgreSQL

Marcelo Moraes Minasi 0013021-4

Florianopolis, 26 de abril de 2004.

Lista de Tabelas

1 Tabela do fornecedor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 Tabela das pecas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Tabela do relacionamento entre fornecedores e pecas. . . . . . . . . . . . . . . . . 54 Dependencias: um caso errado e outro correto. . . . . . . . . . . . . . . . . . . . 85 Tabela do fornecedor. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96 Tabela da variavel SEGUNDA e FP. . . . . . . . . . . . . . . . . . . . . . . . . . 107 Tabela da variavel FC e CS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

Lista de Figuras

1 Componentes de um sistema de banco de dados. . . . . . . . . . . . . . . . . . . 32 Relacionamento como entidade. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 Primeira ilustracao da arquitetura de tres nıveis. . . . . . . . . . . . . . . . . . . 74 Segunda ilustracao da arquitetura de tres nıveis. . . . . . . . . . . . . . . . . . . 75 Tela apos a simples execucao de um cliente SQL e seu status. . . . . . . . . . . . 166 Benchmark de banco de dados: paginas da web retornadas por segundo. . . . . . 197 Benchmark de banco de dados: as respostas mais rapidas. . . . . . . . . . . . . . 20

Codigos

1 O banco de dados de fornecedores e pecas (definicao dos dados). . . . . . . . . . 62 Exemplo de domınios usando DOMAIN. . . . . . . . . . . . . . . . . . . . . . . . 123 Exemplo de falha de verificacao de tipo em domınios. . . . . . . . . . . . . . . . . 134 Exemplo de restricao usando SELECT. . . . . . . . . . . . . . . . . . . . . . . . 135 Exemplo de projecao usando SELECT. . . . . . . . . . . . . . . . . . . . . . . . . 136 Exemplo de projecao simplificada usando SELECT. . . . . . . . . . . . . . . . . 147 Exemplo de juncao usando SELECT. . . . . . . . . . . . . . . . . . . . . . . . . . 148 Exemplo de INSERT. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159 Exemplo de UPDATE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1510 Exemplo de DELETE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1611 Exemplo de CREATE VIEW. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1612 Exemplo de uma consulta sobre uma VIEW. . . . . . . . . . . . . . . . . . . . . 1713 Exemplo de eliminacao de registro na VIEW e suas implicacoes na tabela real. . 1714 Exemplo de SQL Embutida com API para Java. . . . . . . . . . . . . . . . . . . 2115 Exemplo de SQL Embutida com API para C++. . . . . . . . . . . . . . . . . . . 23

Page 2: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

Sumario

1 Introducao 31.1 Instalacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

2 Conceituacao basica 3

3 Projeto 53.1 Arquitetura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53.2 Formas normais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

4 SQL 114.1 Operacoes de definicao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124.2 Operacoes de manipulacao de dados . . . . . . . . . . . . . . . . . . . . . . . . . 134.3 Operacoes de Atualizacao . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134.4 Sumario das instrucoes SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14

5 Exemplo 15

6 APIs - Application Program Interfaces 176.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186.2 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18

7 Estudo comparativo entre MySQL e PostgreSQL 18

Page 3: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

1 Introducao

Esse documento foi fortemente baseado na referencia [C. 00]. Tenta-se dar uma boa basedos conceitos iniciais envolvendo bando de dados e do padrao SQL, mostrando-se, no final,um exemplo, uma simples comparacao (benchmark) envolvendo alguns sistemas de bancos dedados e algumas APIs - application program interface. Um interessante trabalho posterior seriaalgumas ferramentas graficas para construcao de um banco de dados e uma melhor comparacaode alguns sistemas de bancos de dados, como MySQL, PostreSQL, etc.

1.1 Instalacao

Assume-se aqui que o leitor conseguiu instalar perfeitamente um servidor de banco de dadosonde possa criar bancos e modifica-los, como tambem executar buscas exemplificadas nessedocumento atraves de query da SQL.

Como a instalacao varia conforme o sistema operacional, indica-se aqui apenas alguns pontei-ros para paginas de instalacao de dois dos mais usados programas para sistemas de gerenciamentode banco de dados: MySQL [MySb] na referencia [MySa] e PostgreSQL em [Pos].

Outra referencia interessante para instalacao do MySQL [MySb] e: http://www.devshed.com/c/a/MySQL/MySQL-Installation-and-Configuration/.

Apos a instalacao, algumas rotinas ainda precisam ser executadas, para maiores detalhes,veja o ponteiro: http://dev.mysql.com/doc/mysql/en/Unix post-installation.html.

2 Conceituacao basica

Sistema de Banco de Dados e simplesmente um sistema computadorizado de armazenamentode registros, composto basicamente por quatro partes: dados (banco de dados), software (sistemade gerenciamento do banco de dados), hardware (armazenamento fısico) e usuarios (programa-dores de aplicacao, usuarios finais e DBA - Administrador). Tais registros sao as linhas de umatabela, cujas colunas sao os dados. Essa tabela e um arquivo computadorizado.

Figura 1: Componentes de um sistema de banco de dados.

Um banco de dados e uma colecao de dados persistentes (nao que eles durem para sempre,mas diferem de entradas, saıdas, etc.) utilizada pelos sistemas de aplicacao.

Page 4: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

2 CONCEITUACAO BASICA 4

Sua utilizacao possui as seguintes vantagens: compartilhamento de dados, redundancia con-trolada (reduzida), inconsistencia controlada, suporte a transacoes (operacoes atomicas: tudo ounada, ou atualiza todas as tabelas necessarias, ou nenhuma; que em conjunto com o log implicaconsistencia), integridade (restricoes de integridade, por exemplo, idade ≤ 0), maior seguranca(senhas), aplicacoes independente de dados, etc.

Uma tabela (variavel de relacao) contem os dados relativos a um conjunto de entidadesidenticas (livro, tema, leitor e requisicao). Cada linha (tuplo) caracteriza uma entidade desseconjunto. Cada coluna (atributo) representa uma caracterıstica dessa entidade.

Cada tabela apresenta um identificador unico, chamado de chave primaria. Nem sempree vantagem acrescentar mais um campo designado a ser essa chave (como uma numeracaosequencial e cıclica), pois essa pode ser limitada pelo tamanho do tipo de dado desse campo.Assim, ela pode ser constituıda de varios dados agrupados da tabela. Por exemplo, o BD daEletrosul apresenta 3.000.000.000 de registros mensais!

As entidades sao composta por registros, que sao instancias daquele tipo, por exemplo: aentidade carro pode possuir os registros carroA, carroB, Monza etc. Alem de entidades, normal-mente num banco de dados, havera relacionamentos entre entidades, que segundo o paradigmarelacional, tambem sao representadas em tabelas. Observe a figura [2]. Isso sera melhor expli-cado mais abaixo.

A seguir, apresenta-se alguns conceitos basicos no contexto de banco de dados:

Chave primaria e um identificador unico para cada tuplo de uma tabela. Cada tabela deve teruma chave primaria. Uma chave primaria pode ser constituıda por um ou mais atributos.

Chave estrangeira e a utilizacao da chave primaria numa outra tabela para se poder criar umrelacionamento.

Transacao e uma unidade logica de trabalho (atomicas).

Figura 2: Relacionamento como entidade.

#Fornecedor NomeF1 A2 B

Tabela 1: Tabela do fornecedor.

#Peca NomeP1 Parafuso2 Prego

Tabela 2: Tabela das pecas.

Bancos de dados relacionais sao sistemas de banco de dados baseados em uma fundamentacaonormal (teorica) chamada de modelo relacional de dados, que apresenta tres aspectos:

• Aspecto estrutural: os dados sao representados por tabelas, e so tabelas - propriedade defechamento: a saıda de uma operacao e tambem uma tabela, o que garante que a saıda deuma operacao pode ser a entrada de outra.

Page 5: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

#Peca #Fornecedor Qtdade1 1 20002 2 3000

Tabela 3: Tabela do relacionamento entre fornecedores e pecas.

• Aspecto de integridade: essas tabelas satisfazem a certas condicoes de integridade;

• Aspecto manipulativo: os operadores disponıvies para manipular tabelas derivam umas deoutras - os tres mais importantes sao:

Restricao (DEPTOs nos quais ORCAMENTO > R$8 milhoes),

Projecao (DEPTOs sobre #DEPTO, ORCAMENTO) e

Juncao (DEPTOs e EMPREGADOs sobre #DEPTO).

Aqueles registros devem sofrer algum tipo de operacao em algum momento, como:

• Acrescentar novos arquivos (CREATE TABLE);

• Inserir novos dados em arquivos (INSERT);

• Buscar (SELECT), alterar (UPDATE) e eliminar dados em arquivos existentes (DELETE).

Esses exemplos sao todos expressos em uma “linguagem” chamada SQL. Ela sera melhorexplicada mais abaixo [4].

3 Projeto

3.1 Arquitetura

Geralmente, o projeto de um BD se da em tres nıveis, como observado nas figuras [3] e [4]:

1. Interno (fısico): como os dados sao fisicamente armazenados (numero de bytes de cadacampo, etc.);

2. Externo (logico do usuario): como os dados sao vistos por cada usuario individualmente.

CREATE VIEW teste AS (EMP WHERE SALARIO > 3K) { #EMP, NOMEEMP,SALARIO } ;

3. Conceitual (logico comunitario): intermediario entre os dois.

Na concepcao de um BD, tanto a Linguagem de definicao de dados (DDL), como ilustrado nocodigo [1], como a linguagem de manipulacao de dados (DML) sao transparentes para o usuario.

De um ponto de vista de mais alto nıvel, pode ser considerado como uma arquitetura clien-te/servidor.

3.2 Formas normais

O assunto de normalizacao e apenas uma formalizacao de uma ideia simples e muito usadana pratica. Ideia que consiste em fazer um projeto de banco de dados seguindo o paradigma“um fato em um lugar”, isto e, evitar redundancia. Alem disso, a normalizacao nos ajuda aestruturar o banco de dados de forma a tornar mais facil as atualizacoes de uma unica tupla doque seria caso esse banco nao estivesse normalizado.

Page 6: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

3 PROJETO 6

�1 TYPE #F . . . ;2 TYPE NOME . . . ;3 TYPE #P . . . ;4 TYPE QTD . . . ;

6 VAR F BASE RELATION7 { #F #Fornecedor ,8 NOME NomeF }9 PRIMARY KEY { # Fornecedores } ;

11 VAR P BASE RELATION12 { #P #Peca ,13 NOME NomeP }14 PRIMARY KEY { #Peca } ;

16 VAR FP BASE RELATION17 { #F #Fornecedor ,18 #P #Peca ,19 QTD Qtdade }20 PRIMARY KEY {#Fornecedor , #Peca }21 FOREIGN KEY { # Fornecedor } REFERENCES F22 FOREIGN KEY { #Peca } REFERENCES P ;� �

Codigo 1: O banco de dados de fornecedores e pecas (definicao dos dados).

Algumas variaveis poderiam, mesmo estando normalizadas - no sentido do paragrafo anterior- possuırem propriedades indesejaveis. E justamente nesse sentido que vem os princıpios denormalizacao avancada, ou formas normais. Esses princıpios nos permitem reconhecer essescasos e substituir essas variaveis por outras mais desejaveis de algum modo.

Dizemos que uma variavel esta em uma forma normal se ela satisfaz a um certo conjuntoprescrito de condicoes. Por exemplo, dizemos que uma variavel de relacao - que modela umrelacionamento - esta na segunda forma normal (2FN) se, e somente se, ela esta em 1FN etambem satisfaz uma outra determinada condicao, descrita mais abaixo em 3.2.

Numerosas formas normais foram definidas por volta de 1972. As tres primeiras por Codd em[E. 72]. Mais tarde, Boyce e Codd definiram tambem uma “outra terceira” forma normal, maisabrangente, conhecida como forma normal de Boyce/Codd (FNBC). Subsequentemente,Fagin definiu ainda a quarta e a quinta formas normais. A referencia [E. 72] definiu tambemum procedimento de normalizacao, atraves do qual uma variavel de relacao que esta emalguma forma normal especıfica pode ser substituıda por um conjunto de variaveis de relacaoem alguma forma mais desejada. Esse procedimento e reversıvel, o que significa que o processode normalizacao preserva informacoes.

Embora existam outras formas normais alem dessas seis, esse documento abrangera apenasas tres primeiras, visto que a implementacao de um banco de dados projetado de forma quesuas variaveis estejam na 3FN e uma boa solucao de compromisso entre a complexidade dosprocedimentos de normalizacao subsequentes e o nıvel de caracterısticas desejadas obtidas (baixaredundancia, integridade, etc.).

O processo de normalizacao consiste em decompor uma variavel de relacao em outrasvariaveis mais desejadas. Esse processo deve ser necessariamente ser perdas, i. e. reversıvel.

Page 7: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

3 PROJETO 7

Figura 3: Primeira ilustracao da arquitetura de tres nıveis.

Figura 4: Segunda ilustracao da arquitetura de tres nıveis.

Para que uma decomposicao1 sem perdas seja realizada, e assim seja possıvel recompor2 oconjunto de informacoes, precisa-se respeitar o conceito de dependencia funcional descrito aseguir.

Para entender melhor a importancia do conceito de dependencia funcional, imagine oseguinte problema: se R1 e R2 sao projecoes de alguma variavel de relacao R, e se R1 e R2 emconjunto incluem todos os atributos de R, que condicoes devem ser satisfeitas para garantir quea juncao de R1 e R2 nos dara de volta a variavel de relacao original R? Ver exemplo na tabela[4] abaixo. E aqui que entram as dependencias funcionais.

Seja R uma variavel de relacao, e sejam X e Y subconjuntos arbitrarios do conjunto deatributos de R. Entao, dizemos que Y e funcionalmente dependente de X – em sımbolos, X →Y, (”X seta Y”), se e somente se em todo valor valido de R, cada valor X tem associado a eleexatamente um valor Y. Em outras palavras, em todo valor possıvel valido de R, sempre que

1O operador da decomposicao na algebra relacional e, na verdade, o de projecao.2O operador da recomposicao na algebra relacional e, na verdade, o de juncao.

Page 8: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

3 PROJETO 8

#Fornecedor STATUS CIDADEF3 30 ParisF5 30 Atenas

Caso correto#Fornecedor STATUS #Fornecedor CIDADE

F3 30 F3 ParisF5 30 F5 Atenas

Caso errado#Fornecedor STATUS STATUS CIDADE

F3 30 30 ParisF5 30 30 Atenas

Tabela 4: Dependencias: um caso errado e outro correto.

duas tuplas concordam sobre seu valor X, elas concordam tambem sobre seu valor Y.Todo conjunto de DFs – dependencias funcionais – e equivalente a pelo menos um conjunto

irredutıvel. Se I e um conjunto irredutıvel equivalente a S, a imposicao das DFs em I imporaautomaticamente as DFs em S. Defini-se um conjunto S de DFs como irredutıvel se e somentese:

1. O lado direito (o dependente) de cada DF em S contem apenas um atributo;

2. O lado esquerdo (o determinante) de cada DF em S e por sua vez irredutıvel - significandoque nenhum atributo pode ser descartado do determinante sem converter S em algumconjunto nao equivalente a S;

3. Nenhuma DF em S pode ser descartada de S sem converter S em em algum conjunto naoequivalente a S.

Existem Diagramas DF que representam convenientemente essas dependencias. Isso e in-teressante porque as DFs possuem uma nocao semantica, cuja interpretacao so depende doprojetista. Por exemplo, #F → CIDADE significa que cada fornecedor esta localizado em exa-tamente uma cidade.

Apenas para se ter uma nocao do ponto que se deseja atingir, descreve-se informalmente oque seria a terceira forma normal (3FN).

Terceira forma normal: uma variavel esta na 3FN se e somente se os atributos nao-chaves(qualquer atributo que nao participa da chave-primaria da variavel de relacao) sao:

• Mutuamente independentes, i. e., se nenhum deles e funcionalmente dependentes de qual-quer combinacao dos outros;

• Irredutivelmente dependentes da chave primaria.

O fato de dois ou mais atributos serem mutuamente independentes quer dizer que cada umdeles pode ser atualizado independentemente dos demais.

Descreve-se a seguir o processo de normalizacao. Antes, a definicao da primeira formanormal:

Primeira forma normal: uma variavel de relacao esta em 1FN se, e somente se, em todovalor valido dessa variavel de relacao, cada tupla contem exatamente um valor para cadaatributo.

Page 9: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

3 PROJETO 9

Por exemplo:

PRIMEIRA { #F, STATUS, #P, QDE, CIDADE }PRIMARY KEY { #F, #P } ;

#F STATUS CIDADE #P QDEF1 20 Londres P1 300F1 20 Londres P2 200F1 20 Londres P3 400F1 20 Londres P4 200F1 20 Londres P5 100F1 20 Londres P6 100F2 10 Paris P1 300F2 10 Paris P2 400F3 10 Paris P2 200F4 20 Londres P2 200F4 20 Londres P4 300F4 20 Londres P5 400

Tabela 5: Tabela do fornecedor.

A principal desvantagem e a quantidade excessiva de redundancias, que sao tambem chama-das de anomalias de atualizacao. No exemplo acima, nao da para inserir a informacao de queum determinado fornecedor esta numa cidade especıfica ate que ele efetivamente forneca pelomenos uma peca. E se eliminarmos uma tupla da tabela acima, eliminaremos talvez muito maisinformacoes que gostarıamos.

Para solucionar, utiliza-se o processo de normalizacao, que informalmente pode ser entendidoagora como uma processo de desempacotamento: inserir informacoes logicamente isoladas emvariaveis de relacoes separadas.

Assim, a solucao para esses problemas seria:

SEGUNDA { #F, STATUS, CIDADE }PRIMARY KEY { #F } ;

e

FP{ #F, #P, QDE }PRIMARY KEY { #F, #P }FOREIGN KEY { #F } REFERENCES SEGUNDA;

Assim, deve ficar claro que essa estrutura resolve todos os problemas com operacoes deatualizacao descritos anteriormente.

Segunda forma normal: uma variavel esta na 2FN se e somente se ela esta na 1FN e todoatributo nao-chave e irredutivelmente dependente da chave primaria.

Mas a estrutura SEGUNDA ainda sofre pela falta de independencia mutua entre seus atri-butos nao-chaves. Mais detalhadamente, a dependencia de STATUS sobre #F, embora sejafuncional e, de fato, irredutıvel, e transitiva (atraves de CIDADE): cada valor de #F deter-mina uma CIDADE e esta, por sua vez, determina o valor de STATUS. Dependencias transitivaslevam tambem a anomalias de atualizacao. Mais uma vez a solucao e desempacotar, transformara variavel SEGUNDA em:

Page 10: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

3 PROJETO 10

SEGUNDA

#F STATUS CIDADEF1 20 LondresF2 10 ParisF3 10 ParisF4 20 LondresF5 30 Atenas

FP

#F #P QDEF1 P1F1 P2F1 P3F1 P4F1 P5F1 P6F2 P1F2 P2F2 P3F3 P2F4 P2F4 P4F4 P5

Tabela 6: Tabela da variavel SEGUNDA e FP.

FC { #F, CIDADE }PRIMARY KEY { #F }FOREIGN KEY { CIDADE } REFERENCES CS ;

e

CS{ CIDADE, STATUS }PRIMARY KEY { CIDADE } ;

Terceira forma normal: uma variavel esta na 3FN se e somente se ela esta em 2FN e todoatributo nao-chave e dependente de forma nao transitiva da chave primaria.

Uma observacao importante a ser feita e que o nıvel de normalizacao de uma variavel deuma relacao dada e uma questao de semantica, nao apenas uma questao de valores de dadosque essa variavel de relacao possa conter em algum momento particular. Para resumir, pode-sedizer que para se chegar ao nıvel da 3FN, deve-se realizar duas operacoes:

1. Dada a variavel de relacao R como esta: (Para reduzir dependencias, redundancias triviais)

R { A, B, C, D } PRIMARY KEY { A, B } ;

Deve-se substituir R por suas duas projecoes R1 e R2:

Page 11: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

FC

#F CIDADE

F1 LondresF2 ParisF3 ParisF4 LondresF5 Atenas

CS

CIDADE STATUSAtenas 30Londres 20Paris 10

Tabela 7: Tabela da variavel FC e CS.

R1 { A, D } PRIMARY KEY{ A, D } ;

R2 { A, B, C } PRIMARY KEY { A, B } FOREIGN KEY { A } REFERENCES R1 ;

2. Dada a variavel de relacao R como esta: (Para reduzir dependencias transitivas, e.g. A →B e B → C)

R { A, B, C } PRIMARY KEY { A } ;

Deve-se substituir R por suas duas projecoes R1 e R2:

R1 { B, C } PRIMARY KEY{ B } ;

R2 { A, B } PRIMARY KEY { A } FOREIGN KEY { B } REFERENCES R1 ;

4 SQL

A SQL e uma linguagem padrao para interacao com banco de dados relacionais. Original-mente, o nome ”SQL”significava Structured Query Language (Linguagem de Consulta Estrutu-rada) e se pronunciava ”sequel”. Porem, agora a linguagem se transformou num padrao, e o seunome agora e apenas um nome - nao e oficialmente uma abreviatura para alguma coisa - e apronuncia pendeu para ”esse-que-ele”. Seu nome oficial e International Standard DatabaseLanguage SQL (1992), largamente referenciada na literatura por SQL/92 ou SQL2, que foia grande revisao do padrao proposto segundo o padrao SQL.

Posteriormente, teve-se um desenvolvimento da SQL2 para a SQL3, no que concerne aosuporte a objetos. Mais informacoes a respeito do suporte a objetos podem ser obtidas noseguinte ponteiro: http://www.objs.com/x3h7/sql3.htm.

Conceitualmente, SQL e um padrao relacional, i.e., nao-procedural (nıvel de abstracao maiorque C++, por exemplo): nao se indica como mas o que se quer. A tarefa de ”como” executar edefinida pelo otimizador do SGBD.

Um tutorial de SQL pode ser obtido em: http://www.devshed.com/c/a/MySQL/A-Technical-Tour-of-MySQL/. Uma simples referencia de quais diretivas sao padronizadas e suas sintaxespode ser obtidas facilmente em http://www.1keydata.com/sql/sql.html.

Page 12: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

4 SQL 12

Uma referencia excelente para que deseja saber mais sobre SQL e o ponteiro http://sqlzoo.net/.Ele possui uma ferramenta interativa para se contruir declaracoes SQL e testa-las sobre diferentesbancos de dados.

4.1 Operacoes de definicao

Na SQL3 e possıvel definir-se domınios proprios do usuario, na SQL2 nao. Aqui, os domıniosserao considerados como tipos, mas uma discussao um pouco mais profunda mostra que eles estaolonge de serem a mesma coisa, como mostra o capıtulo 4 de [C. 00]. Os tipos internos permitidospela SQL sao:

• CHARACTER [ VARYING ] (n);

• BIT [ VARYING ] (n);

• NUMERIC (p,q);

• DECIMAL (p,q);

• INTEGER;

• SMALLINT;

• FLOAT (p);

• DATE;

• TIME;

• TIMESTAMP;

• INTERVAL.

Como dito anteriormente, os domınios em SQL nao sao tipos verdadeiros. Em SQL, elesservem apenas para permitir que um tipo embutido, ja definido, receba um nome que possa serusado como abreviacao por varias colunas em diversas definicoes de tabelas. Um exemplo dedomınios podem ser vistos no codigo [2].�

1 CREATE DOMAIN t ipo F#CHAR( 5 ) ;2 CREATE DOMAIN t ipo P#CHAR( 6 ) ;

4 CREATE TABLE F ( t ipo F# F # , . . . ) ;5 CREATE TABLE P ( t ipo P# P # , . . . ) ;6 CREATE TABLE FP ( t ipo F# F#, t ipo P# P # , . . . ) ;� �

Codigo 2: Exemplo de domınios usando DOMAIN.

Como domınio nao constitui uma tipagem forte e, portanto, nao existe uma verificacao detipo verdadeira, exige-se muito cuidado ao usa-la. Por exemplo, dadas as definicoes do codigo [2],a operacao de SQL descrita no codigo [3] nao falhara em nenhuma verificacao de tipo, emboralogicamente devesse falhar.

Pode-se criar uma base de dados no sistema de gerenciamento de banco de dados atraves dainstrucao CREATE DATABASE nome bd . Ela cria uma base da dados vazia. A partir daı, a

Page 13: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

4 SQL 13

�1 SELECT ∗2 FROM FP3 WHERE F# = P# ;� �

Codigo 3: Exemplo de falha de verificacao de tipo em domınios.

instrucao necessaria para se criar tabelas, ja mostrada acima pela facilidade em seu uso e peloseu carater auto-explicativo, e CREATE TABLE nome (tipoColuna1 nomeColuna1, tipoColuna2nomeColuna2, ) . Essa instrucao pode ser passada com mais parametros. Para mais informacoes,consulte [MyS04].

Depois de criada uma tabela, pode-se altera-la atraves da instrucao ALTERTABLE nomeADD tipoColuna nomeColuna . Ela inclui uma coluna a uma tabela ja existente. Para removerum coluna, basta trocar o ADD por DROP, que sera visto mais adiante.

Finalmente, o ultimo dos mais importantes comandos de definicao de dados, e o DROP.Essa instrucao permite excluir base de dados DROP DATABASE nome bd ou mesmo tabelasDROP TABLE nome inteiras. Para a exclusao de simples registros, usa-se DELETE, que seraexplicado mais adiante.

4.2 Operacoes de manipulacao de dados

Como dito anteriormente, os tres principais aspectos manipulativos de um banco de dadosrelacional sao: restricao, projecao e juncao. Essas tres operacoes podem ser implementadas pelainstrucao SELECT. Abaixo tem-se alguns exemplos que comprovam essa ideia.�

1 SELECT #F, #P , QDE2 FROM FP3 WHERE QDE < 150 ;� �

Codigo 4: Exemplo de restricao usando SELECT.

�1 SELECT F#, NomeF2 FROM F ;� �

Codigo 5: Exemplo de projecao usando SELECT.

Note que o codigo [5] acima pode ser simplificado como o codigo [6] abaixo.Obs.: As vezes pode ser necessario o uso de nomes qualificados para tirar a ambiguidade

de referencias a colunas, por exemplo: P.P#, FP.P#. Inclusive o ’*’ pode ser qualificado, comoem ’F.*’.

4.3 Operacoes de Atualizacao

As principais operacoes de atualizacao definidas pela SQL sao a insercao (INSERT), atua-lizacao (UPDATE) e eliminacao (DELETE) de registros. E interessante notar que a eliminacaode tabelas possui uma diretiva especial (DROP) ja mencionada anteriormente em 4.1.

O exemplo [8] abaixo pressupoes que ja exista uma tabela com o nome temp, com duas colu-nas, P# e PESO. Essa instrucao insere nessa tabela numeros de pecas e pesos correspondentesa todas as pecas vermelhas.

Page 14: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

�1 SELECT ∗2 FROM F ;� �

Codigo 6: Exemplo de projecao simplificada usando SELECT.

�1 SELECT F.F#, P#, NomeF2 FROM F , FP3 WHERE F.F# = FP.F# ;� �

Codigo 7: Exemplo de juncao usando SELECT.

O proximo exemplo, codigo [9], atualiza o status de tidis is fornecedores em Paris, duplicando-o.

A instrucao DELETE, no exemplo 10, elimina todas as remessas correspondentes a peca P2.Ja foi citado em [3.1] que pode-se criar visoes no projeto de um banco de dados. Elas

representam o nıvel mais externo da arquitetura de um banco. Em SQL pode-se criar visoesa partir da diretiva CREATE VIEW. A partir daı, essa visao e tratada exatamente como umatabela, mas que nao esta implementada fisicamente. Um exemplo de como criar um visao ede uma consulta de SQL sobre essa visao pode ser observada abaixo nos codigos [11] e [12]respectivamente.

E interessante notar que qualquer alteracao sobre uma VIEW, afetara diretamente a tabeleacorrespondente que esta fisicamente implementada. Imagine a seguinte visao criada como mostrao codigo [13]. A operacao de exclusao executada na linha 6, e o mesmo que executar a operacaoda linha 8 sobre a tabela “pai” da visao.

4.4 Sumario das instrucoes SQL

As instrucoes mais comuns usadas em SQL e mencionadas anteriormente nesse documentosao: CREATE DOMAIN, CREATE TABLE, CREATE DATABASE, CREATE VIEW, ALTERDOMAIN, ALTER TABLE, ALTER VIEW, INSERT, UPDATE, DELETE, DROP DOMAIN,DROP TABLE, DROP VIEW, DROP DATABASE.

Segue abaixo uma relacao resumida e simplificada das palavras reservadas definidas pelopadrao SQL.

Do padrao SQL2 de 1992, dentre outras mais comuns, tem-se: AFTER, ALIAS, ASYNC, BE-FORE, BOOLEAN, BREADTH, COMPLETION, CALL, CYCLE, DATA, BETWEEN, BIT,BIT LENGTH, BOTH, CASCADE, CASCADED, CASE, CAST, CATALOG, CHAR LENGTH,CHARACTER LENGTH, COALESCE, COLLATE, COLLATION, COLUMN, CONNECT,CONNECTION, CONSTRAINT, CONSTRAINTS, CONVERT, CORRESPONDING, CROSS,CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP, CURRENT USER, DATE,DAY, DEALLOCATE, DEFERRABLE, DEFERRED, DESCRIBE, DEPTH, DICTIONARY,EACH, ELSEIF, EQUALS, GENERAL, IF, IGNORE, LEAVE, DESCRIPTOR, DIAGNOS-TICS, DISCONNECT, DOMAIN, DROP, ELSE, END-EXEC, EXCEPT, EXCEPTION, EXE-CUTE, EXTERNAL, EXTRACT, FALSE, FIRST, FULL, GET, GLOBAL, HOUR, IDEN-TITY, IMMEDIATE, INITIALLY, INNER, INPUT, INSENSITIVE, INTERSECT, INTER-VAL, ISOLATION, JOIN, LAST, LEADING, LEFT, LEVEL, LOCAL, LOWER, MATCH,MINUTE, MONTH, NAMES, NATIONAL, LESS, LIMIT, LOOP, MODIFY, NEW, NONE,OBJECT, OFF, OID, OLD, NATURAL, NCHAR, NEXT, NO, NULLIF, OCTET LENGTH,ONLY, OUTER, OUTPUT, OPERATION, OPERATORS, OTHERS, PARAMETERS, PEN-DANT, PREORDER, PRIVATE, OVERLAPS, PAD, PARTIAL, POSITION, PREPARE, PRE-

Page 15: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

�1 INSERT2 INTO temp ( P#, PESO )3 SELECT P#, PESO4 FROM P5 WHERE COR = ’ Vermelha ’ ;� �

Codigo 8: Exemplo de INSERT.

�1 UPDATE F2 SET STATUS = STATUS ∗ 23 WHERE CIDADE = ’ Par i s ’ ;� �

Codigo 9: Exemplo de UPDATE.

SERVE, PRIOR, READ, PROTECTED, RECURSIVE, REF, REFERENCING, REPLACE,RESIGNAL, RETURN, RELATIVE, RESTRICT, REVOKE, RIGHT, ROWS, SCROLL, SE-COND, SESSION, RETURNS, ROLE, ROUTINE, ROW, SAVEPOINT, SEARCH, SENSI-TIVE, SEQUENCE, SESSION USER, SIZE, SPACE, SQLSTATE, SUBSTRING, SYSTEM USER,SIGNAL, SIMILAR, SQLEXCEPTION, SQLWARNING, STRUCTURE, TEST, THERE, TEM-PORARY, THEN, TIME, TIMESTAMP, TIMEZONE HOUR, TIMEZONE MINUTE, TRAI-LING, TRANSACTION, TRANSLATE, TRANSLATION, TRIM, TRUE, UNKNOWN, TRIG-GER, TYPE, UNDER, VARIABLE, VIRTUAL, VISIBLE, WAIT, WHILE, UPPER, USAGE,USING, VALUE, VARCHAR, VARYING, WHEN, WRITE, YEAR, WITHOUT, ABSOLUTE,ACTION, ADD, ALLOCATE, ALTER, ARE, ASSERTION, AT, ZONE.

Do padrao SQL3 de 1998, dentre outras mais comuns, tem-se: ACTION, ACTOR, AF-TER, ALIAS, ASYNC, ATTRIBUTES, BEFORE, BOOLEAN, BREADTH, COMPLETION,CURRENT PATH, CYCLE, DATA, DEPTH, DESTROY, DICTIONARY, EACH, ELEMENT,ELSEIF, EQUALS, FACTOR, GENERAL, HOLD, IGNORE, INSTEAD, LESS, LIMIT, LIST,MODIFY, NEW, NEW TABLE, NO, NONE, OFF, OID, OLD, OLD TABLE, OPERATION,OPERATOR, OPERATORS, PARAMETERS, PATH, PENDANT, POSTFIX, PREFIX, PRE-ORDER, PRIVATE, PROTECTED, RECURSIVE, REFERENCING, REPLACE, ROLE, ROU-TINE, ROW, SAVEPOINT, SEARCH, SENSITIVE, SEQUENCE, SESSION, SIMILAR, SPACE,SQLEXCEPTION, SQLWARNING, START, STATE, STRUCTURE, SYMBOL, TERM, TEST,THERE, TRIGGER, TYPE, UNDER, VARIABLE, VIRTUAL, VISIBLE, WAIT, WITHOUT,CALL, DO, ELSEIF, EXCEPTION, IF, LEAVE, LOOP, OTHERS, RESIGNAL, RETURN,RETURNS, SIGNAL, TUPLE, WHILE.

5 Exemplo

Apenas algumas definicoes interessantes:

Nome do servidor: mysqld ou mysqld.exe;

Nome do cliente: myslq ou mysql.exe.

Um exemplo de um comando tıpico para iniciar o cliente e:

c:\mysql\bin\mysql -h nome.do.host -u nomeDoUsuario -p nomeDaBaseDeDados

Onde:

Page 16: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

5 EXEMPLO 16

�1 DELETE2 FROM FP3 WHERE P# = ’ P2 ’ ;� �

Codigo 10: Exemplo de DELETE.

�1 CRETE VIEW bom fornecedor2 AS SELECT F#, STATUS, CIDADE3 FROM F4 WHERE STATUS > 15 ;� �

Codigo 11: Exemplo de CREATE VIEW.

nome.do.host e o endereco do computador que esta rodando o servidor;

nomeDoUsuario e o nome do usuario;

nomeDaBaseDeDados e o nome da base de dados que sera usada;

-p e a opcao que exige um prompt para a senha do usuario.

De um modo mais simple ainda, basta o comando: mysql},para que se tenha a seguinteconexao observada na figura [5]. Note que a conexao se fez, por padrao, com os seguinte atributos:usuario, minasi - quem executou o programa; host, como nenhum argumento foi passado nachamada do programa, localhost ; dentre outros.

Figura 5: Tela apos a simples execucao de um cliente SQL e seu status.

A partir do prompt fornecido pelo programa cliente, pode-se fazer qualquer solicitacao SQL,criar-se novas tabelas, base de dados (note que aı e necessario que se tenha permissao paratal), assim como elimina-las, fazer consultas, insercoes, atualizacoes e etc. Alem disso, pode-sevisualizar o banco de dados atraves de alguns comandos bem uteis:

Page 17: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

�1 SELECT F#, STATUS2 FROM bom fornecedor3 WHERE CIDADE = ’ Londres ’ ;� �

Codigo 12: Exemplo de uma consulta sobre uma VIEW.

�1 CREATE VIEW te s t e2 AS SELECT #EMP, Nome Emp , Sa l a r i o3 FROM EMP4 WHERE Sa l a r i o > 3K ;

6 DELETE FROM t e s t e WHERE Sa l a r i o < 5K ;

8 DELETE FROM EMP WHERE ( S a l a r i o > 3K && Sa l a r i o < 5K) ;� �Codigo 13: Exemplo de eliminacao de registro na VIEW e suas implicacoes na tabela real.

show databases; mostra todas as bases de dados do servidor que se tenha acesso. O comandomysqlshow funciona da mesma forma so que este e executado no shell padrao, nao no docliente.

use baseDeDadosX; configura a base de dados a ser utilizada. Normalmente, apos a ins-talacao, existem duas pre-definidas: mysql - que possui as permissoes, usuarios, etc. - e atest - base para testes que qualquer usuario pode alterar.

show tables; mostra todas as tabelas da dase de dados configurada para uso. Note que antes enecessario que se execute a instrucao usebaseDeDadosX; . O comando mysqlshowbaseDeDadosXfunciona da mesma forma, mas e executado no shell padrao.

describe tabelaX; descreve como sao cada campo de uma tabela, quais sao seus tipos, seustamanhos, quais campos compoem a chave-primaria, etc.

help mostra a ajuda.

Um outro comando, o mysqladmin, chama um programa diferente do cliente SQL. Esseprograma e usado para administrar varios aspectos do servidor de banco de dados MySQL.Informacoes mais detalhadas a esse respeito podem ser obtidas em: http://dev.mysql.com/tech-resources/articles/mysql intro.html#SECTION0005000000.

Para finalizar, mostra-se abaixo dois exemplos de consultas SQL: a primeira executada naprompt do cliente mysql, enquanto que a segunda e executada como um comando normal noshell padrao.

• SELECT* FROM tabelaX;

• mysql-e ”SELECT * FROM tabelaX”baseDeDadosY

6 APIs - Application Program Interfaces

As APIs, ou Interfaces para Programas de Aplicacao, permite que instrucoes SQL estejamembutidas dentro de programas em linguagens comuns de programacao, como C++, Java, PHP,etc. Por isso mesmo, as APIs sao tambem referenciadas como SQL Embutida.

Page 18: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

Existem tambem referencias para SQL Dinamica, que nada mais e do que um conjuntode recursos embutidos de SQL que se destinam a oferecer suporte a construcao de aplicacoesgeneralizadas, on-line e possivelmente interativas.

6.1 Java

Destinado ao fim anteriormente exposto, existe em Java um pacote chamado java.sql que per-mite executar as funcionalidades da SQL Embutida. Segundo a propria pagina de documentacaodo pacote, “ele fornece uma API para acesso e processamento dos dados gravados em umafonte de dados (usualmente um banco de dados relacional) usando a linguagem de programacaoJavaTM.” Para acessar essa pagina, basta seguir o ponteiro http://java.sun.com/j2se/1.4.2/docs/api/index.html.

Um exemplo interessante de como executar uma query em JavaTMe mostrado abaixo no codigo[14]. O exemplo foi obtido do ponteiro http://www.ils.unc.edu/ lindgren/190/mysql-jdbc/.

Ele possui um inconveniente que e a utilizacao de um JDBC3 driver muito especıfico - da Ter-rance Zellars - para a comunicacao com o banco de dados. Um JDBC driver GPL fornecido pelaMySQL AB, e portanto mais confiavel, e o MySQL Connector/J. Ele e o driver JDBC oficial parao MySQL. Mais informacoes sobre o driver pode ser obtida em http://www.mysql.com/products/connector/j/.Pode-se baixa-lo gratuitamente em http://dev.mysql.com/downloads/connector/j/3.0.html

6.2 C++

Programas escritos na linguagem C++ que necessitem das funcionalidades da SQL embutidapodem utilizar-se da API fornecida no ponteiro http://mysqlcppapi.sourceforge.net/.

Um exemplo da utilizacao dessa API pode ser observado no codigo [6.2] abaixo.

7 Estudo comparativo entre MySQL e PostgreSQL

Como dito na introducao desse documento, uma analise mais profunda comparando os bancosde dados disponıveis no mercado se faz bastante necessaria. Principalmente entre os dois maiscomuns, MySQL [MySb] e PostgreSQL [Pos], e o considerado o mais eficiente, o Oracle [Ora].

Assim, apenas para ilustrar como a performance do MySQL, que foi a base deste documento,e relativamente boa quando comparada com o Oracle 9i, mostra-se as figuras [6] e [7] abaixo.

Referencias

[C. 00] C. J. Date. Introducao a Sistemas de Bancos de Dados. Editora Campus, traducao dasetima edicao americana edition, 2000. 1, 4.1

[E. 72] E. F. Codd. ”further normalization of the data base relational model”. Data BaseSystems, Courant Computer Science Symposia Series 6, 1972. 3.2

[MySa] Instalacao do mysql. ’Internet’, http://dev.mysql.com/doc/#Installing. 1.1

[MySb] Mysql. ’Internet’, http://www.mysql.org/. 1.1, 7

[MyS04] MySQL A.B. MySQL Reference Manual. MySQLA.B, http://dev.mysql.com/get/Downloads/Manual/manual-a4.pdf/from/http://www.linorg.usp.br/mysql/, 1997-2004. 4.1

3JDBC (Java Database Connectivity), de acrodo com a JavaSofts emhttp://www.javasoft.com/products/jdbc/overview.html, ”A API JDBC define classes Java para represen-tar conexoes com banco de bados, declaracoes SQL, etc..”

Page 19: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

REFERENCIAS 19

Fonte: eWeek em ’Server Databases Clash’

Figura 6: Benchmark de banco de dados: paginas da web retornadas por segundo.

[Ora] Oracle. ’Internet’, http://www.oracle.com/database/. 7

[Pos] Postgresql. ’Internet’, http://www.postgresql.org/. 1.1, 7

Page 20: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

REFERENCIAS 20

Fonte: eWeek em ’Server Databases Clash’

Figura 7: Benchmark de banco de dados: as respostas mais rapidas.

Page 21: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

REFERENCIAS 21

�1 import java . s q l . ∗ ;2 import twz1 . jdbc . mysql . ∗ ;

4 public class TestQuery {

6 public TestQuery ( ) {7 }

9 public stat ic void main ( St r ing args [ ] ) {

11 St r ing u r l=” jdbc : z1MySQL :12 // luna . o i t . unc . edu/CES? user=alexadmin” ;13 Connection con ;14 St r ing query = ”SELECT ∗ FROM a l ex c ou r s e ” ;15 Statement stmt ;

17 try {18 Class . forName ( ”twz1 . jdbc . mysql . jdbcMysqlDriver ” ) ;19 }20 catch ( java . lang . ClassNotFoundException e ) {21 System . e r r . p r i n t ( ”ClassNotFoundException : ” ) ;22 System . e r r . p r i n t l n ( e . getMessage ( ) ) ;23 }

25 try {26 System . out . p r i n t l n ( ”Trying to connect . . . ” ) ;27 con = DriverManager . getConnect ion ( u r l , ” alexadmin” , ”x” ) ;28 System . out . p r i n t l n ( ” connected ! ” ) ;29 stmt = con . createStatement ( ) ;30 Resu l tSet r e s u l t = stmt . executeQuery ( query ) ;31 while ( r e s u l t . next ( ) ) {32 St r ing name = r e s u l t . g e tS t r i ng (1 )33 + ” ” + r e s u l t . g e tS t r i ng ( 2 ) ;34 System . out . p r i n t l n (name ) ;35 }36 stmt . c l o s e ( ) ;37 con . c l o s e ( ) ;38 }39 catch ( SQLException ex ) {40 System . e r r . p r i n t ( ”SQLException : ” ) ;41 System . e r r . p r i n t l n ( ex . getMessage ( ) ) ;42 }43 }44 }� �

Codigo 14: Exemplo de SQL Embutida com API para Java.

Page 22: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

REFERENCIAS 22

�1 #include <mysqlcppapi /mysqlcppapi . h>2 #include < i o s t ream>3 #include < iomanip>

5 int main ( ) {6 // The f u l l format f o r the Connection cons t ruc t o r i s7 // Connection ( cchar ∗ db , cchar ∗ hos t =””,8 // cchar ∗ user =””, cchar ∗ passwd=””)9 // You may need to s p e c i f y some o f them i f the database i s not on

10 // the l o c a l machine or your database username i s not the same as11 // your l o g i n name , e t c . .12 try {13 mysqlcppapi : : Connection con ;14 con . connect ( ) ;15 con . s e l e c t d a t aba s e ( ”mysql cpp data ” ) ;

17 mysqlcppapi : : Query query = con . create Query ( ) ;18 // This c r e a t e s a query o b j e c t t h a t i s bound to con .

20 query << ” s e l e c t ∗ from stock ” ;21 // You can wr i t e to the query o b j e c t l i k e you would any o ther22 // ostrem

24 mysqlcppapi : : Re su l t S to r e r e s = query . s t o r e ( ) ;25 // Query : : s t o r e ( ) e xecu t e s the query and re turns the r e s u l t s

27 cout << ”Query : ” << query . preview () << endl ;28 // Query : : prev iew ( ) s imply re turns a s t r i n g wi th the curren t29 // query s t r i n g in i t .

31 cout << ”Records Found : ” << r e s . s i z e () << endl << endl ;

33 cout . s e t f ( i o s : : l e f t ) ;34 cout << setw (17) << ”Item”35 << setw ( 4 ) << ”Num”36 << setw ( 7 ) << ”Weight”37 << setw ( 7 ) << ” Pr i ce ”38 << ”Date” << endl39 << endl ;

41 // The Resu l t S t o r e c l a s s has a read−only Random Access42 // I t e r a t o r43 for ( mysqlcppapi : : Re su l t S to r e : : i t e r a t o r i = r e s . begin ( ) ;44 i != r e s . end ( ) ; i++)45 {46 mysqlcppapi : : Row row = ∗ i ;47 cout << setw (17) << row [ 0 ]48 << setw ( 4 ) << row [ 1 ]49 << setw ( 7 ) << row [ ”weight ” ]50 // you can use e i t h e r the index number or column51 // name when r e t r i e v i n g the colume data as52 // demonstrated above .53 << setw ( 7 ) << row [ 3 ]� �

Page 23: Semin´ario S2i: Banco de Dados - MySQL e PostgreSQL · explicada mais abaixo [4]. 3 Projeto 3.1 Arquitetura Geralmente, o projeto de um BD se d´a em trˆes n´ıveis, como observado

REFERENCIAS 23

�53 << row [4 ] << endl ;54 }55 }56 catch ( mysqlcppapi : : ex BadQuery& er )57 {58 // handle any connect ion or query e r ro r s t ha t may come up59 c e r r << ”Error : ” << er . what () << endl ;60 return −1;

62 }63 catch ( mysqlcppapi : : ex BadConversion& er )64 {65 // we s t i l l need to catch bad convers ions in case something66 // goes wrong when the data i s conver ted in t o s t o c k67 c e r r << ”Error : Tried to convert \””68 << er . get Data () << ”\” to a \””69 << er . get TypeName() << ” \” . ” << endl ;70 return −1;71 }72 return 0 ;73 }� �

Codigo 15: Exemplo de SQL Embutida com API para C++.