Вы находитесь на странице: 1из 68

Sumrio

Modelagem de 06 Normalizao de dados na prtica


Dados [ Roberto de Angelantonio Jr. ]
Projeto/ Modelagem

Minicurso, Projeto de 14 Introduo a projeto de banco de dados Parte 1


Banco de Dados [ Ricardo Rezende ]

Boas Prticas
21 Os dez erros comuns em projetos de banco de dados Parte 1
[ Ricardo Rezende ]

Banco de Dados
30 Validando documentos XML atravs do XML Schema Definition
[ Dhiego Piroto e Rodrigo Oliveira Spnola ]
Ol, eu sou o DevMan! Desta
pgina em diante, eu estarei
40 Obtendo melhor desempenho no servidor SQL Server lhe ajudando a compreender
Banco de Dados/ Persistncia

Banco de Dados [ Felipe de Assis ]


com ainda mais facilidade o
contedo desta edio. Ser
um prazer contar com sua
Minicurso
49 Novidades para desenvolvedores no Oracle 11g Parte 2 companhia! Confira abaixo o
[ Thyago Bernuci ] que teremos nesta revista:

Banco de Dados
54 Questes de banco de dados do concurso da PRODAM (2012)
[ Mauro Pichiliani ]

Boa Ideia
63 Trabalhando com listas dinmicas
[ Marcelo Josu Telles ]

Brinde na web desta edio


1) Criando uma Stored Procedure Helo World em C# e Registrando no SQL Server - Curso Desenvolvimento para SQL Server com .NET - Parte 3
Nesta vdeo aula ser mostrado como criar uma stored procedure simples (ProcHelloWorld), no estilo Ol Mundo, a fim de exemplificar como usar

1
o C# para criar objetos SQL no banco de dados usando linguagem gerenciada. So examinados os namespaces necessrios, o template gerado e
um mtodo simples. A seguir mostra como registrar a stored procedure no SQL Server para ser rodada em seu contexto (hospedada como se fosse
uma procedure normal), sendo ento consumida por aplicaes clientes, incluindo o SQL Server Management Studio, o prprio Visual Studio e uma
aplicao simples em .NET.

Vdeo Para visualizar acesse o link:


http://www.devmedia.com.br/articles/listcomp.asp?keyword=sql101&codigobanca=ochorios

Gostou das vdeo aulas? O portal www.devmedia.com.br possui mais de 2 mil vdeo aulas e dezenas de cursos online sobre desenvolvimento de
software! Agora voc pode comprar as vdeo aulas que preferir e fazer sua prpria combinao de vdeos! Saiba mais em www.devmedia.com.br/creditos

eu
Feedback
D seu feedback sobre esta edio!
s
D

A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que voc, leitor, acha da revista!
sobre e

D seu voto sobre esta edio, artigo por artigo, atravs do link:
s

ta
edio
www.devmedia.com.br/sqlmagazine/feedback - Para votar, voc vai precisar do cdigo de banca desta edio, que : ochorios
Expediente Editorial
EDITORIAL

A
tualmente muito comum encontrar sistemas com diversos pro-
blemas de performance decorrentes de uma modelagem de dados
incorreta, com muita redundncia e com o negcio mau planejado.
Na maioria das vezes, os problemas na estrutura de dados so to complexos
de serem solucionados que a alternativa mais vivel construir um novo sis-
tema ou comprar algo pronto no mercado, abandonando o atual.
Ano 9 - 101 Edio 2012 - ISSN 1677918-5 - Impresso no Brasil Mas quais so os fatores negativos que contribuem para um retrabalho
to grande?
Em muitos casos o sistema comea a ser planejado pela codificao, ou
seja, ao invs de se desenhar o negcio no modelo de dados, o foco o de-
Corpo Editorial
Atendimento ao Leitor senvolvimento, e desta forma, as tabela, colunas, relacionamentos e etc., so
Editor Geral A DevMedia conta com um departamento exclu- criados para atender o cdigo e no o inverso.
Rodrigo Oliveira Spnola sivo para o atendimento ao leitor. Se voc tiver Neste contexto, a SQL Magazine destaca como tema de capa desta edio
rodrigo.devmedia@gmail.com algum problema no recebimento do seu exemplar
ou precisar de algum esclarecimento sobre assina- Projeto de BD na Prtica. So trs matrias que apresentam sob diferentes
Sub Editores turas, exemplares anteriores, endereo de bancas perspectivas preocupaes que devemos ter ao realizar esta atividade fun-
Eduardo Oliveira Spnola e Ricardo Rezende de jornal, entre outros, entre em contato com: damental no desenvolvimento de projetos de software.

Jornalista Responsvel Em complemento, a SQL Magazine traz nesta edio outras matrias muito
www.devmedia.com.br/central
Kaline Dolabella - JP24185 (21) 3382-5038 interessantes envolvendo assuntos como SQL Server, Oracle e Prova de Con-
cursos. Uma tima leitura a todos.
Na Web Publicidade
Para informaes sobre veiculao de anncio na
www.devmedia.com.br/sqlmagazine
revista ou no site e para fechar parcerias ou aes
especficas de marketing com a DevMedia, entre
Distribuio
em contato com:
FC Comercial e Distribuidora S.A
Rua Teodoro da Silva, 907 publicidade@devmedia.com.br
Graja - RJ - 206563-900
Rodrigo Oliveira Spnola
rodrigo.devmedia@gmail.com
Editor Chefe da SQL Magazine, WebMobile e
Fale com o Editor! Engenharia de Software Magazine.
muito importante para a equipe saber o que voc est revista ou no site SQL Magazine, entre em contato com os
achando da revista: que tipo de artigo voc gostaria de editores, informando o ttulo e mini-resumo do tema que Doutor e Mestre em Engenharia de Software pela
ler, que artigo voc mais gostou e qual artigo voc menos voc gostaria de publicar: COPPE/UFRJ - o maior centro de ensino e pesquisa
gostou. Fique a vontade para entrar em contato com os em engenharia da Amrica Latina. Autor de diversos
editores e dar a sua sugesto! Rodrigo Oliveira Spnola - Editor da Revista artigos cientficos sobre Engenharia de Software
Se voc estiver interessado em publicar um artigo na rodrigo.devmedia@gmail.com publicados em revistas e conferncias renomadas,
dentro e fora do pas.

Assine agora e tenha acesso a


todo o contedo da DevMedia:
www.devmedia.com.br/mvp
the right-size Database

SQL E Isam Uma


Combinao De Sucesso!

Deixe o sistema de sua empresa mais leve


e rpido. Conhea as novidades do c-tree e
faa toda a diferena!
U ADICIONE processamento de transaes,
recuperao automtica, backups dinmicos e
replicao aos seus aplicativos.
U AMPLIE sua escolha de APIs com C, C++,
.NET, ODBC, JDBC, PHP e SQL.
U FAA como muitas empresas no mundo todo,
lderes em diversos segmentos como finanas,
telecomunicaes e sade, que tm baseado
suas solues crticas na tecnologia c-tree.

Baixe seu SDK grtis


www.faircom.com
ration
Corpo

11-3872-9802
irCom
1 Fa
201
Projeto de Software/ Modelagem Nesta seo voc encontra artigos sobre projeto, anlise ou modelagem de dados

Normalizao de
dados na prtica
A Resumo DevMan
tualmente muito comum encontrar sistemas com
diversos problemas de performance decorrentes
de uma modelagem de dados incorreta, com mui- De que se trata o artigo:
ta redundncia e com o negcio mau planejado. O objetivo deste artigo introduzir os conceitos de normalizao
Na maioria das vezes, os problemas na estrutura de da estrutura de dados e explicar de uma forma clara e objetiva a
dados so to complexos de serem solucionados que a maneira de se aplicar isto no momento da elaborao dos modelos
alternativa mais vivel construir um novo sistema ou de dados.
comprar algo pronto no mercado, abandonando o atual. Com base nos exemplos aqui descritos ser possvel entender facil-
Mas quais so os fatores negativos que contribuem para mente a melhor maneira de se usar cada conceito no dia-a-dia.
um retrabalho to grande?
Em muitos casos o sistema comea a ser planejado pela Em que situao o tema til:
codificao, ou seja, ao invs de se desenhar o negcio A normalizao deve ser usada sempre que uma nova demanda
no modelo de dados, o foco o desenvolvimento, e desta apontar a necessidade de criao de um novo projeto, ou mesmo na
forma, as tabela, colunas, relacionamentos e etc., so manuteno das estruturas de dados j existentes em sua empresa.
criados para atender o cdigo e no o inverso.
Ento, a melhor opo para aumentar a qualidade da Normalizao de dados na prtica:
aplicao criar um modelo de dados que contemple Este artigo foi elaborado para os profissionais que, de alguma ma-
todo o negcio, e para isso, necessrio utilizar as regras neira, tm a responsabilidade de manter e manipular as estruturas
de normalizao. de dados da empresa.
A normalizao se refere a um conjunto de regras de A ideia passar de forma simples algumas dicas de como modelar
modelagem de dados (ler Nota DevMan 1), que tem dados e as principais regras de normalizao.
por objetivo reduzir os problemas de lgica, auxiliar O artigo vai ajudar, principalmente, as pessoas que no possuem
no desenvolvimento de software, deixando a leitura da conhecimento nesta tcnica e ir reforar alguns conceitos para os
estrutura de dados mais fcil, contribuindo assim para profissionais que j possuem experincia no processo de modelagem
melhoria na performance dos sistemas e, principalmen- de dados relacional.
te, evitar a redundncia. O uso correto das normas ir agregar qualidade no resultado final
do sistema, melhorar o desempenho da base de dados e evitar
redundncias.
Nota do DevMan 1
Modelo de Dados: Um banco de dados projetado para armazenar os dados. A este conta algumas limitaes e implementa recursos como adequao
projeto damos o nome de modelo de dados, que uma tarefa do arquiteto de dados.
atravs da modelagem de dados que sero definidas quais as tabelas com seus de padro e nomenclatura. Alm disto, neste modelo definimos
respectivos campos e os relacionamentos entre essas tabelas. as chaves primrias e estrangeiras. J no modelo fsico de dados
fazemos a modelagem fsica do modelo de banco de dados. Le-
vamos em conta as limitaes impostas pelo SGBD escolhido e
Existem vrias regras na normalizao, mas utilizando deve ser criado sempre com base nas definies feitas no modelo
a 1FN, 2FN e 3FN (ler Nota DevMan 2) possvel atin- lgico de dados.
gir um grau muito elevado de maturidade no modelo
de dados. Entendimento do negcio
Para construirmos nosso modelo de dados normaliza- O primeiro passo para se obter sucesso na construo de um
do, vamos iniciar com o modelo lgico e depois, partimos modelo de dados normalizado conhecer o negcio e as regras
para o modelo fsico. O modelo lgico de dados j leva em que devem ser projetadas.

6 SQL Magazine Edio 101


Uma linguagem muito utilizada para projetar o negcio a UML
(ler Nota DevMan 3), mas como este no o nosso foco, vamos
utilizar o modelo lgico como ponto de partida para chegarmos
ao nosso objetivo, que o modelo fsico.

Nota do DevMan 2
1FN, 2FN e 3FN
1FN = Primeira Forma Normal
2FN = Segunda Forma Normal
3FN = Terceira Forma Normal
Figura 1. Formulrio de Pedido de Cotao

Cliente
Nota do DevMan 3 Endereo

UML: A Unified Modeling Language (UML) uma linguagem de modelagem no proprietria de E-mail
terceira gerao. A UML no uma metodologia de desenvolvimento, o que significa que ela no Fone 1
diz para voc o que fazer primeiro e em seguida ou como projetar seu sistema, mas ela lhe auxilia a
visualizar seu projeto e a comunicao entre objetos. Fone 2

Basicamente, a UML permite que desenvolvedores visualizem os produtos de seus trabalhos em Cdigo Item
diagramas padronizados. Junto com uma notao grfica, a UML tambm especifica significados, isto Item
, semntica. uma notao independente de processos, embora o RUP (Rational Unified Process)
tenha sido especificamente desenvolvido utilizando a UML. Quantidade
Unidade de Medida
Um sistema sempre surge de uma necessidade, e para que Valor Unitrio
possamos exemplificar as regras da normalizao, utilizaremos Valor Total do Item
um exemplo simples, mas que contm pontos importantes para
Vendedor
o entendimento das normas. Observe a Figura 1.
Data Cotao
Usaremos como exemplo um formulrio comum, feito em pla-
nilha, mas que por alguma necessidade, ser desenvolvido um Data de Envio da Cotao

sistema para seu controle. Valor Total da Cotao


A Figura 1 representa um formulrio de Cotao, que tem por Tabela 1. Informaes extraidas do Formulrio de Cotao
objetivo registrar uma solicitao de preos por parte dos clientes
da empresa. Este primeiro atributo deve ser incorporado em uma Entidade,
Para este exemplo no ser necessrio definir qual tipo de que vamos definir como PESSOA. Neste artigo usaremos uma
produto ou o segmento da empresa, pois este um formulrio generalizao de Entidade/Tabela, com isso podemos agrupar
genrico que pode ser encontrado em muitas empresas. O nico todos os tipos de pessoa dentro do mesmo objeto.
ponto importante que, a partir do modelo de dados seja possvel Com esta primeira definio, devemos encontrar todos os atri-
gerar todas as informaes contidas no formulrio. butos que pertencem a PESSOA.
Mas por onde devemos iniciar a modelagem de dados? fcil identificar que os atributos Endereo, e-mail, Fone 1, Fone 2
Uma forma fcil de iniciar uma normalizao deste tipo agru- e Vendedor tambm devem incorporar a entidade PESSOA. No se
par todos os atributos em uma caixa conforme podemos observar preocupe ainda com as aplicaes das formas normais, lembre-se
na Tabela 1. que estamos separando os assuntos.
Com base nas informaes extradas do Formulrio de Cotao, Observe na Figura 2 como fica a nossa Entidade Pessoa ainda
seria interessante separar os atributos por assunto, para facilitar desnormalizada.
a aplicao da normalizao. Ento criaremos entidades sempre Continuando a busca pelos assuntos, nos deparamos com o
que identificarmos um assunto para agrupar todos os atributos atributo Cdigo do Item, e isto sugere que uma entidade ITEM
encontrados na Tabela 1. seja inserida no nosso modelo lgico. Alm disso, assim como
O primeiro atributo Cliente, mas a verdadeira funcionalidade fizemos com a entidade Pessoa, preciso encontrar os outros
dele armazenar o nome do cliente, e este um ponto muito atributos referentes a este assunto.
relevante, identificar a funcionalidade de cada um dos atributos, Ento teremos os atributos Item, Unidade de Medida e Valor Uni-
ou seja, o que devera ser armazenado na coluna. trio, que vo formar a nossa entidade ITEM, conforme Figura 3.

Edio 101 SQL Magazine 7


Normalizao de dados na prtica

Observe a Figura 2 e note que temos os atributos NUME-


RO_FONE_1 e NUMERO_FONE_2. Este um tpico problema
encontrado em diversas estruturas de dados. Quando encon-
tramos atributos com as mesmas caractersticas e nomes iguais,
diferenciados apenas por nmeros, como nosso exemplo, isto
caracteriza atributos multivalorados.
Isto seria um grande problema para o negcio, pois a PESSOA
Figura 2. Entidade desnormalizada PESSOA s poderia ter dois telefones. Mas, e se houvesse a necessidade de
incluir o terceiro telefone?
Neste caso, apesar do atributo pertencer a entidade PESSOA,
devemos torn-lo um atributo no repetitivo nesta entidade, e
desta forma devemos isolar o atributo e criar uma nova entidade
que tem por objetivo permitir a possibilidade de uma pessoa ter
zero ou muitos telefones.
Figura 3. Entidade desnormalizada ITEM
Ento aplicando a 1FN, teremos uma nova entidade e este novo
objeto obviamente receber o nome de PESSOA_TELEFONE, e
Agora nos restam poucos atributos sem uma entidade definida, ser filha da entidade PESSOA.
e necessrio continuar com a atividade de agrupamento at o Para evoluir nosso exemplo e demonstrar o relacionamento entre
fim de todos eles. as entidades, importante atribuir uma Primary Key(PK) para
O prximo atributo a Quantidade, e como essa quantidade a entidade PESSOA, que tambm dever compor a PK da nova
referente a uma Cotao, devemos criar uma entidade que entidade PESSOA_TELEFONE.
represente a cotao dos itens do cliente, afinal este o tema Observe na Figura 5 como devem ficar nossas duas entidades.
principal de nosso exemplo. Ento vamos nomear esta entidade
provisoriamente de ITEM_CLIENTE_COTACAO.
Alm da Quantidade, nos sobraram pouqussimos atributos,
sendo eles: Data da Cotao, Data de Envio da Cotao e o Valor
Total da Cotao. Sendo assim, teremos nossa terceira entidade
representada conforme a Figura 4.
Figura 5. Entidades ainda desnormalizadas PESSOA e PESSOA_TELEFONE

Existem alguns casos em que o atributo no est repetido expli-


citamente, mas fcil detect-los, como o caso do atributo DES-
CRICAO_ENDERECO. Este atributo tem as mesmas caractersticas
do caso anterior e por este motivo, ele deve ser isolado em uma
nova entidade, pois, apesar de pertencer a uma pessoa, possvel
Figura 4. Entidade desnormalizada ITEM_CLIENTE_COTACAO ter cadastrado nenhum ou muitos endereos para ela.
Perceba que um verbo foi colocado no relacionamento entre as
Com o trabalho de alocao de atributos por assunto concludo, entidades PESSOA e PESSOA_TELEFONE. Ele indica a ao que
vamos iniciar a fase mais importante deste artigo, que a aplicao uma entidade tem sobre a outra.
das regras de normalizao. Esta ao facilita o entendimento no momento da visualizao
e na leitura do modelo de dados lgico. Por exemplo, fica simples
1FN entender que uma pessoa tem telefones.
Podemos afirmar que uma tabela s est na 1FN se obrigatoria- Voltando ao nosso modelo, observe o exemplo da Figura 6, onde
mente respeitar a seguinte regra: a PK da entidade PESSOA incorporada PK da entidade PES-
1. No permitida a existncia de atributo multivalorado, ou seja, SOA_ENDERECO, possibilitando a incluso de muitos endereos
um atributo no pode receber mais de um valor. para uma determinada pessoa.
Com isso, as entidades PESSOA, PESSOA_TELEFONE e PES-
Mas como identificar esta situao e como trat-la? SOA_ENDERECO esto na 1FN.
preciso sempre ficar atento a todas as caractersticas dos Agora vamos focar nossa validao na prxima entidade, que
atributos, sempre observar as colunas que podem ter mltiplos a ITEM.
valores para o mesmo registro. Analisando os atributos da entidade ITEM, fcil notar que
Vamos iniciar a aplicao da 1FN na entidade PESSOA e desco- nenhum dos trs tem possibilidades de ser multivalorados, ento
brir de uma forma clara como esta norma deve ser usada. passaremos para a validao da prxima entidade.

8 SQL Magazine Edio 101


Apesar de no estar explcito o fato de redundncia nesta nor-
ma, considero que minha interpretao seja mais abrangente e
melhore um pouco o conceito e por este motivo, uniremos os dois
atributos em um, que represente o nome do cliente e do vendedor
e incluiremos um campo atrelado a uma Check Constraint (ler
Nota DevMan 4) que represente qual o tipo da pessoa.

Nota do DevMan 4
Check Constraint: Uma Check Constraint(CK) uma funcionalidade do banco de dados que
permite definir previamente condies para uma coluna, ou seja, a coluna s aceita os valores j
determinados na CK

Se estamos modelando uma entidade PESSOA, nada mais


Figura 6. Entidades ainda desnormalizadas PESSOA , PESSOA_TELEFONE e PESSOA_ ENDERECO justo que todas as pessoas do exemplo possam ser includas,
portanto, o nome mais adequado para este novo atributo seja
Observe a Figura 4 e perceba que tambm existe a possibilidade NOME_PESSOA.
de um Cliente solicitar a cotao de mais de um item e por este Voc pode discordar da soluo dada no exemplo e dizer que
motivo, precisamos criar uma tabela de cotao, para que ela seria melhor controlar Vendedores e Clientes em entidades di-
atenda esta demanda. ferentes. Na verdade os dois esto certos, mas isto depende do
A nova entidade deve receber um nome condizente com sua objetivo do sistema. Neste caso, estamos modelando um exemplo
funo, ento nada mais lgico que seu nome seja COTACAO, e a simples, onde a ideia principal passar os conceitos bsicos de
sua tabela filha seja a COTACAO_ITEM e, desta forma, garantimos
que a 1FN seja devidamente aplicada (ver Figura 7).

Figura 7. Entidades PESSOA , COTACAO, COTACAO_ITEM_ITEM, NA 1FN

2FN
Uma entidade s est na 2FN se respeitar obrigatoriamente as
regras descritas abaixo:
1. Deve estar obrigatoriamente na 1FN;
2. Todas as colunas devem ser totalmente dependentes da PK.

A 2FN nada mais que um complemento da 1FN, pois voc s


pode avaliar sua consistncia se a norma anterior foi totalmente
respeitada.
Vamos iniciar a 2FN pela Figura 6 onde podemos encon-
trar dois campos que so redundantes, NOME_CLIENTE e
NOME_VENDEDOR. Note que os dois campos pertencem
entidade PESSOA, porm possuem a mesma funo e neste
momento devemos retirar a redundncia e melhorar o conceito
das entidades.

Edio 101 SQL Magazine 9


Normalizao de dados na prtica

normalizao, e por este motivo, optei pela generalizao, onde


defino uma entidade para um assunto, embora fosse possvel
implementar a especializao, onde separaramos as pessoas
por grupos especficos. Entretanto, isto poderia causar algumas
confuses ou perda de informaes mais importantes passadas Figura 9. Entidades ITEM e UNIDADE_MEDIDA, na 2FN
neste artigo.
Agora observe a Figura 8 j considerando as novas modificaes A entidade COTACAO j est na 2FN, pois todos os atributos
para adequar a 2FN. so pertinentes a entidade. Sendo assim, encerramos a validao
para todas as entidades no que diz respeito a esta regra.
Analisando ainda a Figura 7, podemos notar que a entidade
COTACAO_ITEM uma tabela associativa.
As tabelas associativas so filhas de mais de uma entidade e tem
obrigatoriamente as FKs herdadas compondo a PK, conforme o
exemplo. Esta entidade tambm est na 2FN.

3FN
Uma entidade s est na 3FN se respeitar obrigatoriamente as
regras descritas abaixo:
1. Deve estar obrigatoriamente na 2FN;
2. No pode haver atributos que tenham origem de clculos de-
rivados de outros atributos

A 3FN a norma mais simples de todas para se identificar, pois


so atributos que armazenam resultados de clculos efetuados
Figura 8. Entidades PESSOA , PESSOA_TELEFONE e PESSOA_ ENDERECO na 2FN entre outros atributos. Geralmente so atributos usados para
fins de gerao de relatrios ou telas de consultas e que no sero
A entidade ITEM nosso prximo passo para a validao da 2FN. imputados pelo usurio.
Observe que na Figura 3 nem todos os atributos pertencem a esta O armazenamento de clculos alm de ser uma desnormalizao,
entidade e simples identificar, basta seguir esta dica: pode ser tambm um grande problema. Suponha que a frmula
Atributos com nomes Cdigo, Identificador, Tipo, Sigla ou que tenham de um clculo est errada e isso s constatado meses ou anos
valores que precisam de algum mecanismo para identific-los e no so depois. Imagine os problemas que a empresa pode ter por conta
PK, FK ou Check Constraint devem ser analisados, pois necessrio disso, pois as decises e estratgias so tomadas a partir de in-
vincul-los a uma Check Constraint ou serem transferidos para uma formaes extradas dos dados armazenados.
nova entidade e depois receber um relacionamento se tornando uma FK A nica tabela que deve passar pela reviso da 3FN a COTA-
na entidade filha. CAO, pois o campo VALOR_TOTAL_COTACAO pode ser o resul-
tado dos atributos QUANTIDADE_ITEM e o VALOR_UNITARIO
O atributo TIPO_UNIDADE_MEDIDA um timo exemplo. da entidade COTACAO_ITEM.
Observando sua caracterstica possvel dizer que ele deve ter Nosso modelo lgico est quase pronto, mas ainda podemos
sua representao em outra entidade, diferente do TIPO_PESSOA, melhor um pouco mais.
que pode ser representada por uma Check Constraint. Temos uma entidade com a responsabilidade de armazenar os
Cada um dos atributos mantidos no TIPO_UNIDADE_ME- itens que sero comercializados e como os valores dos itens podem
DIDA devem ter suas representaes em uma nova entidade, ser alterados no decorrer dos meses, nossas cotaes nunca tero
e para isso foi necessrio criar uma nova entidade UNIDA- o valor unitrio real da poca em que foram feitas.
DE_MEDIDA e transfer-la para l, passando para a entidade Para isso, devemos criar um campo do valor unitrio dentro
ITEM apenas o atributo CODIGO_UNIDADE_MEDIDA como da entidade COTACAO_ITEM, com a inteno de garantir pes-
uma FK, conforme Figura 9. quisas e consultas das cotaes anteriores. Esta incluso no se
Agora temos que analisar a entidade COTACAO. Perceba que na caracteriza como uma redundncia de dados, pois lembre-se
Figura 7 existem dois relacionamentos da entidade PESSOA para a que o valor unitrio da entidade ITEM mutvel, pois sempre
COTACAO. Estes relacionamentos so referentes ao cliente, que est que houver reajuste de preos, este valor ser alterado. Mas
solicitando uma cotao, e ao vendedor, que elabora a cotao. no caso da cotao, o valor unitrio deve manter-se esttico,
Apesar de terem a mesma origem, os atributos possuem nomes sempre.
relativos sua funo na entidade COTACAO, fazendo com que Veja agora na Figura 10 como o nosso modelo lgico ficou aps
sejam nicos nesta entidade. a aplicao da 1FN, 2FN e 3FN.

10 SQL Magazine Edio 101


Preparando o modelo fsico Mediante essas dicas bsicas, observe como fica nosso modelo
Agora precisamos usar a estrutura normalizada do nosso modelo de dados fsico na Figura 11.
lgico para criar o modelo fsico e para isso preciso entender
algumas diferenas de nomenclaturas. Observe a Tabela 2. Excees da normalizao
A partir deste momento, todas as entidades sero chamadas Sempre que um modelo de dados validado, devemos nos
de tabela e todos os atributos sero chamados de colunas, pois preocupar com a aplicao das regras da normalizao, mas em
estamos saindo da modelagem do negcio para a estrutura fsica alguns casos, somos obrigados a relevar esses conceitos.
que ser implementada no banco de dados. Existem alguns casos em que o dado armazenado na base de dados
Voc deve ter sempre em mente que uma padronizao de nomes de uma empresa tambm de propriedade de instituies externas,
de objetos de banco de dados e seus tipos de dados so importantes principalmente entidades governamentais, ento a exceo deve ser
para o melhor aproveitamento possvel no momento da utilizao. aplicada aos documentos fiscais, aqueles que so feitos para atender
Estruturas de dados sem padro so difceis de se trabalhar os governos, prefeituras, a Receita Federal e etc.
nos momentos que necessrio efetuar
manuteno ou at mesmo na hora de criar Diferenas de nomenclatura entre os modelos
instrues SQL. Lgico Fsico
Tente sempre padronizar os nomes das Entidade Tabela
Atributo Coluna
tabelas e incluir colunas com uma natureza,
a qual tem a finalidade de definir qual o Tabela 2. Diferena de nomenclatura ente os modelos de dados lgico e fisico
seu data type.
Outro ponto diferente entre os dois modelos
so os nomes dos relacionamentos. No modelo
de dados lgico nomeamos os relacionamen-
tos com verbos que identificam a interao
entre as entidades, sempre do pai para o filho,
e no modelo fsico, nomeamos o relaciona-
mento com os nomes da tabela pai, seguida
do nome da filha e iniciando com uma sigla
que identifique qual o tipo do ndice. Neste
caso, comum usar a sigla FK_.
Lembre-se tambm de sempre atribuir a
opo NOT NULL para as informaes obri-
gatrias. Desta forma, voc garante que estes
dados sero preenchidos assim que uma nova
linha na tabela for inserida ou alterada.
Figura 10. Modelo de dados lgico normalizado

Figura 11. Modelo de Dados Fsico

Edio 101 SQL Magazine 11


Normalizao de dados na prtica

Concluso
No existe um modelo de dados certo ou
errado, o que existe so modelos bons ou
ruins. Cada profissional tem uma forma
de pensar e para um negcio, possvel
encontrar vrias maneiras de criar um
modelo de dados.
muito importante saber os conceitos de
normalizao e identificar a funo de cada
atributo/coluna. Quanto mais o profissional
modelar negcios, se aperfeioar e o resul-
tado final ser melhor que o anterior.
O que se deve ter em mente que a nor-
malizao um conjunto de regras que vai
guiar seu trabalho, agregando qualidade
estrutura de dados que ser criada, facili-
tando assim a manuteno e manipulao
Figura 12. Exemplo simplificado de Nota Fiscal dos dados.
Usando as trs formas normais descritas
Um timo exemplo so as Notas Fiscais. Estes documentos devem neste artigo, seus prximos modelos de dados iro ganhar mais qua-
ter exatamente seus campos e valores calculados e armazenados lidade e consequentemente o sistema tambm vai ficar melhor.
nas tabelas, mantendo os relacionamentos com as tabelas pais O importante utilizar as regras na sequncia, para que nada
para rastreamento de informaes. seja deixado para trs, garantindo assim um total aproveitamento
Para exemplificar a modelagem de uma Nota Fiscal, utilizaremos destas regras. Ponha em prtica estes pequenos conceitos e tenha
como ponto de partida o nosso modelo de cotao j desenvolvido. a certeza que o resultado ser timo e com o tempo voc usar
Como uma cotao de itens pode se tornar uma venda, criaremos essas regras naturalmente.
nossas novas tabelas a partir da tabela COTACAO.
Observe a Figura 12. As tabelas NOTA_FISCAL e NOTA_FIS- Roberto de Angelantonio Jr.
CAL_ITEM mantm o relacionamento com as tabelas de origem roberto_ang@hotmail.com
das informaes, porm todas as colunas so inseridas da mesma Bacharel em Administrao de Sistemas da Informao pela
maneira que esto impressas na Nota Fiscal. Universidade Ibero-Americana. Atua na rea de sistemas a mais
O exemplo da Figura 12 no est completo, pois uma NF necessita de vinte anos, sendo que, na maior parte da carreira trabalhou como
de mais informaes, trata-se apenas de um modelo didtico. Administrador de Dados. Experincia em implementar e reestruturar a
Este tipo de situao no pode ser considerado uma redundn- rea de Administrao de Dados em diversas empresas.
cia ou quebra da normalizao, pois os dados de um documento
fiscal devem se manter ntegros. Se por acaso o nome ou o valor D seu feedback sobre esta edio! eu
Feedback

unitrio de um produto for alterado, os dados dos documentos s


D

A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
fiscais emitidos antes dessa alterao permanecero estticos,
voc, leitor, acha da revista!
s
ta

garantindo assim a informao gerada no documento.


edio

Resumindo, todas as colunas usadas para emitir uma Nota Fiscal D seu voto sobre este artigo, atravs do link:
devem estar na ntegra dentro da tabela Nota Fiscal. www.devmedia.com.br/sqlmagazine/feedback

12 SQL Magazine Edio 101


Edio 101 SQL Magazine 13
Projeto de Software/ Modelagem Nesta seo voc encontra artigos sobre projeto, anlise ou modelagem de dados

Introduo a projeto de
banco de dados Parte 1
Tipos de dados e chaves

Este artigo faz parte de um curso Resumo DevMan


De que se trata o artigo:
O artigo apresenta as melhores prticas no desenvolvimento de um
projeto de banco de dados relacional. Neste sentido, o artigo ajuda o
arquiteto de dados a projetar os modelos de bancos de dados conside-

E
ncontrei mais um artigo muito interessante na rando boas prticas para garantir o xito do projeto.
internet. Na verdade, desta vez encontrei este
artigo em um local realmente vasto de literatu- Em que situao o tema til:
ras tcnicas disponveis para todos os profissionais. especialmente til desde o incio do projeto de um sistema de banco
Estou falando do IBM developerWorks (ver seo de dados relacional.
Referncias Bibliogrficas).
O artigo encontrado do autor Philipp K. Janert (ver Introduo a projeto de banco de dados Parte 1:
seo Referncias Bibliogrficas), que fala sobre al- Quais so as melhores escolhas ao projetar o esquema para um banco
guns conceitos prticos no projeto de banco de dados. de dados relacional? Qual o fundamento para decidir em favor de um
Este primeiro artigo trata dos tipos de dados simples e contra alguma outra alternativa?
e complexos e tambm uma viso sobre as chaves Em face a grande variedade de recomendaes e especificaes dadas
primria e estrangeira. pelos desenvolvedores de Sistemas de Gerenciamento de Banco de
Philipp
Consultor de Projetos de Software, pro- Dados, como Oracle, Microsoft, IBM entre outros, muito fcil ignorar os
gramador de servidores e arquiteto. Seu interesse fundamentos bsicos de banco de dados relacionais.
especfico a identificao, criao, transmisso e Neste srie de artigos sero apresentados os conceitos de tipos de da-
das melhores prticas de engenharia de software. Ele dos simples e complexos, e tambm sobre as chaves primrias e chaves
mantm o site www.BeyondCode.org e seus artigos estrangeiras, que so extremamente importantes para manter o banco
foram publicados em IEEE Software, Linux Journal, de dados ntegro e com bom desempenho.
e no site OReilly Network. Ele possui um Ph.D. em Tambm ser vista uma introduo normalizao de banco de dados
Fsica Terica da Universidade de Washington em e as cinco formas normais. discutido tambm outros usos possveis para
Seattle. um banco de dados em um projeto, por exemplo, como um repositrio
Mas claro que no poderia simplesmente fazer uma de dados de configurao ou de registro.
traduo. Me preocupei em agregar informaes ao
artigo e torn-lo mais agradvel e rico para voc, leitor
da SQL Magazine. Vamos ao que interessa. As chaves primrias e assuntos afins
Nesta srie, Phillip discute algumas prticas gerais Um banco de dados relacional (RDB) armazena dois tipos de
que encontrou durante sua trajetria profissional e informao - dados e relacionamentos. Podemos considerar
percebeu que so particularmente teis. Nenhuma dados como sendo os nomes de clientes, nmeros de inventrio,
dessas prticas especfica para um produto de qual- descrio de itens, e assim por diante, que o aplicativo usa. J os
quer fornecedor e tudo deve, portanto, ser aplicvel, relacionamentos se referem s chaves primrias e chaves estran-
independentemente de qual implementao de banco geiras que o banco de dados precisa para encontrar registros de
de dados est sendo usada. dados e relacion-los uns aos outros.

14 SQL Magazine Edio 101


Nota do DevMan 1
Surrogate key chave substituta: A chave substituta (surrogate key) em um banco de dados um Em um banco de dados atual, a chave substituta pode ser a chave primria, gerada pelo sistema de
identificador nico para qualquer entidade do mundo modelado ou um objeto no banco de dados. A gerenciamento de banco de dados e no derivada dos dados do aplicativo no banco de dados. O nico
chave substituta no derivada dos dados da aplicao. motivo de se ter uma chave substituta o de atuar como a chave primria. tambm possvel que a
chave substituta exista, alm do UUID gerado pelo banco de dados (por exemplo, um nmero de RH
Uma distino importante entre uma chave substituta e uma chave primria depende se o banco de para cada empregado que no seja o UUID de cada empregado).
dados um banco de dados atual (como os transacionais, ou on-line) ou um banco de dados temporal
(conhecido como bando de dados histricos). Uma vez que um banco de dados atual armazena somente A chave substituta freqentemente um nmero sequencial (por exemplo, em Sybase ou SQL
dados atuais vlidos, h uma correspondncia um-para-um entre uma chave substituta no mundo Server uma coluna do tipo identity column, um nmero serial no PostgreSQL, uma sequncia
modelado e a chave primria do banco de dados. Neste caso, a chave substituta pode ser utilizada como (sequence) no Oracle ou uma coluna definida com AUTO_INCREMENT no MySQL), mas no
uma chave primria. Numa base de dados temporal, no entanto, existe uma relao muitos-para-um necessariamente precise ser, estes so apenas mecanismos que auxiliam nesta tarefa. Ter a
entre as chaves primrias e as chaves substitutas. Uma vez que pode haver vrios objetos na base de chave independente de todas as outras colunas isola as relaes de banco de dados a partir de
dados correspondente a uma chave substituta nica, no podemos usar o substituto como uma chave mudanas nos valores de dados ou projeto do banco de dados (tornando a base de dados mais
primria; outro atributo necessrio para, alm do substituto, identificar exclusivamente cada objecto. gil) e garante a exclusividade.
Alguns estudiosos argumentam que uma chave substituta deve ter as seguintes caractersticas: Numa base de dados temporal, necessrio distinguir entre a chave substituta e a chave primria.
Normalmente, cada linha teria tanto uma chave primria quanto uma chave substituta. A chave
- O valor nico para todo o sistema, portanto, nunca reutilizado; primria identifica a linha nica no banco de dados, a chave substituta identifica a entidade nica no
- O valor gerado pelo sistema; mundo modelado; estas duas chaves no so as mesmas. Por exemplo, a tabela "Funcionrio" pode
conter duas linhas para John Smith, uma linha quando ele foi contratado entre 1990 e 1999, outra linha
- O valor no manipulvel pelo usurio ou aplicao; quando ele foi contratado entre 2001 e 2006. A chave substituta idntica (no exclusivo) em ambas as
linhas no entanto a chave primria ser nica.
- O valor no contm nenhum significado semntico;
Alguns arquitetos de banco de dados usam chaves substitutas sistematicamente, independentemente
- O valor no visvel para o usurio ou aplicao;
da adequao das chaves candidatas, enquanto outros usaro uma chave j presente nos dados, se
- O valor no composto de vrios valores de domnios diferentes. houver.

Conceitos bsicos sobre relacionamentos A segunda razo para que chaves substitutas sejam favorveis
Para efeitos de modelagem de dados, os relacionamentos devem tem a ver com eficincia e facilidade de manuteno, desde que
ser praticamente transparentes. Na verdade, o conhecimento voc pode escolher o tipo de dados mais eficiente para a chave
purista de banco de dados no faz distino entre dados e rela- substituta. Alm disso, a chave substituta tipicamente um campo
cionamentos. No entanto, voc vai ver que os relacionamentos so nico (no uma chave composta), o que simplifica o esquema
mais eficientes para a administrao e manuteno, bem como em (particularmente quando a chave utilizada em outras tabelas
termos de desempenho de execuo, ter alguns campos adicionais como uma chave estrangeira ver Nota DevMan 2).
que servem como chaves para o banco de dados. Toda tabela deve ter uma coluna dedicada a servir como chave
Cada tabela deve ter uma chave primria: um atributo ou com- primria desta. Esta coluna pode ser chamada de id ou pk (ou
binao de atributos que so garantidos como sendo nicos e no possivelmente <nome_da_tabela>_id ou <nome_da_tabela>_pk
nulos. Em geral, til introduzir uma chave substituta (surrogate isso vai depender da padronizao de nomenclatura adotada).
key ver Nota DevMan 1) - um atributo de tabela que no tem A maioria dos bancos de dados so ajustados para tirar proveito
nenhum significado para a regra de negcio, mas simplesmente de consultas utilizando-se nmeros inteiros, por isso faz sentido
serve como identificador nico para cada registro na tabela. Este usar este tipo de dados como chave primria. Muitos bancos de
o relacionamento a que me refiro. dados, incluindo Oracle, Postgres tambm fornecem um tipo
Os requisitos para uma chave primria so muito rigorosos. inteiro especial chamado serial ou sequencia, o que gera uma
Uma chave primria deve: sequncia de nmeros inteiros nicos. Declarar uma coluna para
Existir; usar esses tipos garante que uma nica chave gerada para cada
Ser nica; linha inserida.
No deve mudar ao longo do tempo. As chaves estrangeiras so atributos da tabela, que so os valores
das chaves primrias de outra tabela. Muitas vezes faz sentido
As chaves substitutas ajudam a mitigar o fato de que os dados reais rotular colunas de chave estrangeira explicitamente, por exemplo,
da aplicao quase nunca cumprem estes requisitos. Nem toda pessoa atravs da adopo de uma conveno de nomenclatura, como
tem um Nmero de Seguridade Social (os que esto fora os EUA), as <nome_da_outra_tabela>_fk. A restrio de integridade refe-
pessoas mudam seus nomes, e outras informaes importantes. rencial (referncias) deve ser declarado como parte da instruo
Os dados da aplicao tambm podem simplesmente ser ruins - CREATE ao criar a tabela.
falhas no sistema de Administrao da Previdncia Social podem Vale a pena repetir que as chaves substitutas fazem parte ape-
levar a diferentes pessoas que tm o mesmo nmero de Seguro nas do relacionamento - a sua existncia no elimina a exigncia
Social. Uma chave substituta ajuda a isolar o sistema a partir de de modelagem para ser capaz de formar uma chave primria
tais problemas. a partir dos dados da aplicao. Nos dados da aplicao, uma

Edio 101 SQL Magazine 15


Introduo a projeto de banco de dados Parte 1

chave candidata um subconjunto de todos os atributos, va- Na prtica, nem sempre voc vai encontrar uma chave candidata
lores que nunca so nulos, e que cada combinao de valores entre os dados da aplicao. Imagine uma tabela para armazenar o
nico. Como uma verificao da correta modelagem de dados, primeiro e o ltimo nome de cada usurio, mas no tenha nenhum
as chavea candidatas devem existir e ser documentada para atributo adicional. Agora vamos supor que h duas pessoas dife-
cada tabela. rentes, ambos tm o primeiro nome Joe e sobrenome Blow. Em
tal caso, no existe nenhuma combinao de atributos da tabela
que podem formar uma chave candidata adequada.
O problema se voc est falando sobre a singularidade de
Nota do DevMan 2 conjuntos de dados ou sobre a singularidade das entidades em
questo - usurios, neste exemplo. Em geral, mais intuitivo, em
Foreign key chave estrangeira: No contexto de bancos de dados relacionais, uma chave
estrangeira uma restrio referencial entre duas tabelas. Uma chave estrangeira um campo em
especial para os desenvolvedores acostumados a anlise orien-
uma tabela relacional que corresponde a uma chave candidata de outra tabela. A chave estrangeira tada a objetos, para modelar a singularidade das entidades em
pode ser usada para referncia cruzada entre tabelas. questo. As chaves substitutas, como discutido anteriormente,
Por exemplo, imagine que temos duas tabelas, uma tabela de clientes que inclui todos os dados do podem ajudar a alcanar este objectivo.
cliente, e uma tabela de pedidos que inclui todos os pedidos dos clientes. A inteno aqui que todos os
pedidos devem ser associados a um cliente que j est na tabela CLIENTE. Para fazer isso, vamos colocar
uma chave estrangeira na tabela de pedidos e relacion-la com a chave primria da tabela CLIENTE. Chaves alternativas e identificadores visveis
Como parte do relacionamento, a chave substituta no tem neces-
A chave estrangeira identifica uma coluna ou conjunto de colunas em uma tabela (referncia) que se refere
a uma coluna ou conjunto de colunas em outra tabela (referenciada). As colunas da tabela de referncia sidade de ser sempre visvel fora do banco de dados. Em particular,
deve referenciar as colunas da chave primria ou superchave na tabela referenciada. Os valores em uma nunca deve ser revelada para o usurio / aplicao. Isto permite ao
linha das colunas que fazem referncia deve ocorrer em uma nica linha na tabela referenciada. Assim, uma
administrador do banco de dados alterar a representao das chaves
linha na tabela de referncia no podem conter valores que no existem na tabela de referncia (exceto
potencialmente NULL). Desta forma, as referncias podem ser feitas para relacionar informaes, o que vontade, conforme a necessidade. Se uma necessidade de negcio
uma parte essencial da normalizao banco de dados.Vrias linhas na tabela de referncia podem se referir surge que proporcia aplicao um identificador nico para um
a mesma linha na tabela referenciada. Na maioria das vezes, reflete o relacionamento um (tabela pai ou
tabela de referncia) para muitos (tabela filho, ou referncia a tabela) 1:n.
conjunto de dados, este identificador deve ser considerado como
dados reais da aplicao e mantido separado do relacionamento.
A tabela de referncia e a referenciada podem ser a mesma, ou seja, a chave estrangeira remete para
a a chave primria da mesma tabela. Este tipo de relacionamento conhecido, no SQL:2003, como um Por exemplo, uma coluna adicional chamada NumeroConta ou
auto-relacionamento ou chave estrangeira recursiva. algo semelhante pode ser introduzida sem que faa parte do re-
Uma tabela pode ter vrias chaves estrangeiras, e cada chave estrangeira pode referenciar uma lacionamento. Claro, este atributo deve ser no nulo e nico para
tabela diferente. Cada chave estrangeira aplicada de forma independente pelo sistema de banco que forme uma chave candidata (ver Nota DevMan 3). Tendo uma
de dados. Portanto, os relacionamentos entre tabelas em cascata podem ser estabelecidos usando coluna separada para identificadores visveis tambm torna pos-
chaves estrangeiras.
svel gerar e formatar os valores para este atributo de uma forma
amigvel de modo que seja fcil ler informaes sobre o telefone
de um cliente, por exemplo.
Um caso limite quando o identificador no diretamente
Nota do DevMan 3 visvel, mas ainda pode ser acessvel para a aplicao. Os exem-
plos incluem os campos ocultos em pginas Web nas quais um
Candidate key chave candidata:No modelo de dados de bancos de dados relacionais, uma
chave candidata de uma relao uma superchave mnima para que haja um relacionamento, isto
identificador devolvido para o cliente para ser usado como um
, um conjunto de atributos, tais que: parmetro no pedido seguinte. Embora no haja nenhuma neces-
- a relao no tem duas tuplas distintas (ou seja, linhas ou registros em linguagem de banco de sidade de o usurio lidar com o identificador, um malware pode
dados) com os mesmos valores para estes atributos (o que significa que o conjunto de atributos tentar falsificar este identificador. Usando os valores numricos
uma superchave); de uma chave primria diretamente, em princpio, permite que
- no h nenhum subconjunto adequado destes atributos para o qual detm (o que significa que qualquer ataque hacker percorra toda a tabela!
o conjunto mnimo). Defesas contra este problema incluem tanto criptografar quanto
Os atributos constituintes so chamados atributos primos. Por outro lado, um atributo que no descriptografar o valor da chave primria, ou proteger a chave
aparece em qualquer chave candidata chamado de um atributo no-primo.
anexando um Message Authentication Code (MAC). Uma alternati-
Uma vez que uma relao no contm tuplas duplicadas, o conjunto de todos os seus atributos va usar um atributo identificador visvel de difcil falsificao
superchave se valores nulos no so utilizados. Daqui resulta que cada relao ter pelo menos
uma chave candidata. para a tabela, como atribuir valores hash (ver Nota DevMan 4)
para a chave primria ou um rtulo do tempo da criao (claro,
As chaves candidatas de uma relao nos dizem todas as maneiras possveis que podemos
identificar as suas tuplas. Como tal, so um conceito importante para o projeto de um esquema de a singularidade deste atributo deve ser assegurada.)
banco de dados. Por razes prticas, Sistemas de Gerenciamento de Banco de Dados geralmente Para que a chave seja visvel para a aplicao (em oposio ao
exigem que, para cada relao uma das suas chaves candidatas seja declarada como chave usurio final), vai depender diretamente das especificidades
primria, o que significa que ele considerado como a forma preferida para identificar tuplas
individuais. Chaves estrangeiras, por exemplo, geralmente so obrigadas a fazer referncia a tal do projeto. Usar um tipo numrico diretamente faz com que a
chave primria e no a qualquer uma das chaves candidatas. representao da chave do banco de dados esteja diretamente no
cdigo da aplicao e deve ser evitado para no cair no problema

16 SQL Magazine Edio 101


de acoplamento. Em desenvolvimentos de pequena escala, uma
representao do valor da chave do tipo string pode ser aceitvel Nota do DevMan 5
(todos os tipos de dados que podem ser armazenados em um
banco de dados devem ser capazes de serem serializados). Universally Unique Identifier - UUID: Um identificador exclusivo universal (UUID
Universally Unique Identifier) um padro identificador utilizado na construo de software,
Mas a melhor soluo utilizar um simples empacotador, objeto padronizado pela Open Software Foundation (OSF) como parte do Distributed Computing
conhecido como wrapper, que adiciona uma pequena complexi- Environment (DCE).
dade, mas fornece uma forte dissociao da representao das A inteno de UUIDs permitir que sistemas distribudos identifiquem informaes sem uma
chaves do banco de dados e suas interfaces. O perigo tornar o coordenao central significativa. Neste contexto, a palavra "nico" deve ser entendida como
objeto wrapper muito inteligente. A inteno das chaves substitutas praticamente nico em vez de nica garantidamente. Uma vez que os identificadores tm
um tamanho finito, possvel que dois itens diferentes compartilhem o mesmo identificador.
torn-las simples e eficiente para o banco de dados manusear. O tamanho do identificador e o processo de gerao devem ser definidos de modo a tornar
Configuraes de um valor no banco de dados, possivelmente, esta situao suficientemente improvvel na prtica. Qualquer um pode criar um UUID e
a partir de um string, comparando com outro objeto chave, e, us-lo para identificar algo com confiana razovel de que o mesmo identificador nunca
ser involuntariamente criado por qualquer pessoa para identificar outra coisa. A informao
possivelmente, a serializao so todos os mtodos que so etiquetada com UUIDs pode, portanto, ser posteriormente combinada em um nico banco de
necessrios. Inteligncia, tal como a capacidade de verificar o dados sem a necessidade de resolver conflitos de identificadores.
contedo com base em um clculo de um valor hash, sugerem
que esse objeto provavelmente pertence ao domnio de dados da
aplicao (como os identificadores de registros visveis, apresen- UUIDs podem ter algumas dificuldades tcnicas. Para garantir
tado anteriormente). a unicidade, todos os UUIDs devem ser gerados por um servio
centralizado - o que leva a problemas de escalabilidade e pode
se tornar um ponto nico de falha. A questo da escalabilidade
Nota do DevMan 4 pode ser solucionada por uma abordagem estratificada em que um
servidor central usado para dar sementes para vrios escravos,
Funo Hash: Uma funo hash um algoritmo ou sub-rotina que mapeia grandes conjuntos que por sua vez geram os identificadores finais em lotes, e assim
de dados de comprimento varivel, chamados chaves, para conjuntos de dados menores de por diante. Para representar um UUID em um banco de dados,
um comprimento fixo. Por exemplo, o nome de uma pessoa, tendo um comprimento varivel,
pode-se utilizar como atributo uma string ou uma chave composta
pode ser convertido em um valor hash de um nico nmero inteiro. Os valores retornados
por uma funo hash so chamados de valores hash, cdigos hash, somas hash, checksum ou que compreende vrias colunas inteiras. Ambas abordagens so
simplesmente hashes. significativamente mais lentas do que as operaes com base em
As funes hash so usadas principalmente para acelerar as tarefas de pesquisa de comparao chaves compostas de inteiros longos. Chaves compostas tambm
de tabelas ou de dados, tais como encontrar itens em um banco de dados, deteco de valores aumentam a complexidade do esquema do banco de dados, quan-
duplicados ou registros semelhantes em um arquivo grande, encontrando trechos similares em
seqncias de DNA, e assim por diante. do utilizado como chaves estrangeiras.
No final, se um registro em um banco de dados precisa ter um
Uma funo hash deve ser referencialmente transparente, ou seja, se chamada duas vezes em uma
entrada que igual (por exemplo, as strings que consistem na mesma sequncia de caracteres), ID exclusivo global verdadeiramente ditado pelas regras de ne-
deve dar o mesmo resultado. Este um conceito em muitas linguagens de programao que gcio, e no pela arquitetura de banco de dados. Alguns registros
permitem ao usurio substituir igualdade e funes hash para um objeto: se dois objetos so j podem conter alguma forma de UUID (itens de mercadorias, por
iguais, seus cdigos hash devem ser o mesmo.
exemplo, normalmente possuem um Cdigo de Produto Universal
Funes hash esto relacionadas com (e muitas vezes confundida com) checksums, dgitos de
como cdigo de barras). Alguns outros registros, possivelmente
verificao, impresses digitais, funes de randomizao, cdigos de correo de erros e funes
hash criptogrficas. Embora estes conceitos se sobrepem, em certa medida, cada um tem as suas correspondentes a entidades empresariais principais, podem de
prprias utilizaes e requisitos e so desenvolvidas e optimizadas de maneira diferente. O banco alguma outra forma j conter um identificador nico como parte
de dados HashKeeper mantido pelo American National Drug Intelligence Center, por exemplo,
mais adequadamente descrito como um catlogo de impresses digitais de arquivo do que de
de seus dados corporativos (como a combinao de timestamp e
valores hash. o nome da conta para uma entrada de livro-caixa, por exemplo).
Se este no for o caso, um UUID pode ser gerado e armazenado
juntamente com os dados teis para os registos que o exijam. Em
O problema de Universally Unique Identifier - UUID qualquer caso, UUIDs devem ser considerados como parte dos
Uma ltima considerao diz respeito possvel necessidade dados da aplicao - e no do relacionamento.
de um identificador universalmente exclusivo (UUID Univer- Mesmo que (e este um grande se) a abordagem de mapeamen-
sally Unique Identifier ver Nota DevMan 5). A resposta que, to objeto-relacional escolhida exija que cada objeto de negcios
de fato, bancos de dados relacionais no necessitam de UUIDs. tenha um ID nico e persistente, no h necessidade de basear os
Na verdade, o conceito UUID pouco relacionado com o ge- trabalhos internos do banco de dados relacional nesse fato.
renciamento de banco de dados relacionais. Chaves de bancos Em resumo, eu bato na tecla de que os dados de negcio devem
de dados relacionais - o relacionamento - precisam apenas ser ser mantidos fora do relacionamento interno do banco de dados.
nicas em cada tabela, que pode ser conseguido usando um tipo Construir um banco de dados relacional em torno de UUIDs que-
de dados auto-incremento, tais como o tipo de seriais mencionado bra este princpio usando atributos, que, no final, so realmente
anteriormente. parte dos dados de negcios, como infraestrutura interna.

Edio 101 SQL Magazine 17


Introduo a projeto de banco de dados Parte 1

Tipos de dados Sem contar que nenhum valor monetrio deve ser armazenado
O padro SQL define uma srie de tipos de dados padro e sem tambm registrar a moeda - mesmo se voc ache que a sua
a maioria dos fornecedores de Sistemas de Gerenciamento de aplicao nunca vai lidar com qualquer coisa, diferente de dlares.
Banco de Dados implementam alguns outros adicionais que so Considere a criao de uma tabela de moeda e relacionando-a
especficos para o seu prprio produto. Na ausncia de razes com os valores monetrios usando chaves estrangeiras em vez de
verdadeiramente convincentes para o contrrio, evite tais exten- incorporar informaes de moeda diretamente. Isto ajuda com a
ses por causa da portabilidade. internacionalizao (nomes diferentes de moeda e smbolos), bem
como com problemas de formatao.
Strings e Nmeros
Em geral, os tipos numricos oferecem poucos problemas - basta Booleanos e o tipos de tabelas de sistema
selecionar um que grande o suficiente para suportar o tamanho O uso do tipo bool em qualquer lugar do projeto uma dica
necessrio de valores. para repensar este tpico especial novamente. Pouqussimos
A tentativa de encontrar tamanho ideal de uma coluna do tipo atributos so verdadeiramente limitados a apenas dois valores
string um esforo que geralmente no vale a pena. Voc pode - mesmo uma coluna Gnero tem uma tendncia maliciosa
evitar um monte de confuso mais tarde, definindo todas os de se transformar para (pelo menos) trs estados - masculino,
campos de texto com o tipo varchar(n) e limitando-se a alguns feminino, e desconhecido. Permitir nulos apenas mascara o
comprimentos de string padro e introduzindo apelidos (aliases) problema real. Uma abordagem mais flexvel para os cdigos de
para eles, tais como: 32bytes (Label), 256bytes (Nota), e 4k tipo necessria.
(Texto). Em muitos lugares no banco de dados, atributos determinam o
Mesmo se os requisitos de negcios restringirem o tamanho m- tipo de um registro de alguma forma. A coluna Gnero men-
ximo de campos determinados para valores especficos, o esquema cionada acima um exemplo. Outros exemplos podem incluir
de banco de dados definitivamente no o melhor lugar para fazer TipoItem (como mercadoria, seguro, embalagem e frete), Ti-
cumprir essas regras. O momento em que os dados chegam ao poPagamento (dinheiro, cheque, ordem de pagamento, carto
banco de dados, tarde demais para fazer qualquer coisa sobre ele de crdito, troca), e coisas como TipoLoja, TipoAfiliao,
(exceto rejeit-los). Restries individuais, decorrentes de regras TipoDispositivo, e muitos mais. Isto inclui tambm casos em
de negcio e requisitos, devem ser executadas pela camada de que voc deseja armazenar o tipo de um objeto em algum modelo
lgica de negcio, que lida com a interao do usurio e validao de objeto aplicvel.
de entrada. Por outro lado, a manuteno do esquema do banco Para cada tipo, voc precisa de alguma forma de documentao
de dados consideravelmente simplificado, se for limitada a um dizendo no s o nome do tipo, mas tambm as caractersticas
punhado de atributos de strings diferentes. associadas com ele, por exemplo, voc pode querer saber o que as
Limite o uso de strings de tamanho fixo para os cdigos de permisses de cada TipoUsuario tem. Que melhor lugar para
todos os tipos (em oposio a strings de tamanho varivel para manter esta informao do que no prprio banco de dados?
o texto real). Tenha em mente porm, que aparentemente, cdi- Qualquer registro que tem alguma forma de informaes de
gos de tamanho fixo se tornam mais amplos ao longo do tempo. tipo associado a ele deve conter uma coluna de cdigo de tipo,
O arquiteto de banco de dados prudente tenta evitar qualquer que em si uma chave estrangeira referenciando uma tabela de
coisa semelhante ao problema Y2K (bug do milnio) para novos cdigos de tipo. A restrio de chave estrangeira garante que no
trabalhos de desenvolvimento. h registros com tipos invlidos. A tabela de cdigos de tipo pode
ter os seguintes atributos:
Tempo e dinheiro typeCode_pk;
Um tipo para gravar timestamps (combinaes de data / Label (mnemnico exclusivo, como varchar(32));
hora) sempre necessrio e , felizmente, coberto pelo padro Descrio (varchar(256) deve ser suficiente)
SQL. Infelizmente, no h nenhuma implementao de tipo de URI (apontando para recursos adicionais, se necessrio)
dados que satisfaa plenamente a necessidade de gravar um (ver Nota DevMan 6);
valor monetrio. codeGroup_fk.
Armazenar os valores monetrios e trat-los no cdigo do
programa como um valor de ponto flutuante sempre leva a erros Atributos adicionais so, naturalmente, concebveis - tais como
de arredondamento. Gravando o valor como um inteiro exato da um cdigo de trs letras ou um cdigo numrico visvel.
menor subdiviso monetria (como cent para dlares norte- O atributo codeGroup_fk serve para organizar os cdigos de
americanos, bem como para Euros e outras moedas apropriadas) tipo relacionados. Por exemplo, todos os TipoAssinante pode-
pode no ser suficiente tambm. Muitos valores usam mais dgitos riam formar um grupo. O atributo codeGroup_fk uma chave
alm do ponto decimal que os dois que existem nas moedas (basta estrangeira em uma tabela separada. No entanto, ao perceber
visitar o seu posto de gasolina e voc ver). A escolha de decimal que um grupo de cdigo nada mais que um cdigo de tipo,
com 5 a 9 dgitos deve funcionar, no entanto. a relao pode ser feita de modo recursivo onde codeGroup_fk

18 SQL Magazine Edio 101


referencia typeCode_pk. Isso no s faz da tabela cdigo de tipo Correio;
desnecessria, mas tambm torna possvel organizar os grupos Endereo Linha 1;
em uma estrutura hierrquic. melhor manter o cdigo de tipo Endereo Linha 2;
de sistema relativamente simples e direto. Endereo Linha 3;
Cidade;
Estado;
Nota do DevMan 6 Cdigo Postal (CEP);
Pas.
URI (Uniform Resource Identifier): Em TI, um URI - Uniform Resource Identifier
(Identificador Uniforme de Recursos) uma cadeia de caracteres compacta usada para Informaes de contato podem incluir os seguintes atributos:
identificar ou denominar um recurso na Internet. O principal propsito desta identificao Ttulo;
permitir a interao com representaes do recurso atravs de uma rede, tipicamente a Rede
Mundial, usando protocolos especficos. URIs so identificadas em grupos definindo uma Nome;
sintaxe especfica e protocolos associados. Nome do Meio (ou inicial);
Um URI pode ser classificado como um localizador (URL) ou um nome (URN), ou ainda como Sobrenome;
ambos. Um URN - Uniform Resource Name (Nome de Recursos Uniforme) como o nome de uma Sufixo (como jr. ou sr.);
pessoa, enquanto que um URL - Uniform Resource Locator (Localizao de Recursos Uniforme) Endereo residencial;
como o seu endereo. O URN define a identidade de um item, enquanto que o URL nos d um
mtodo para o encontrar. Endereo comercial;
Um URN tpico o sistema ISBN para identificar individualmente os livros. ISBN 0-486-27557-4
Telefone residencial;
(urn:isbn:0-486-27557-4) cita sem equvocos uma edio especfica da obra de Shakespeare Telefone comercial;
Romeu e Julieta. Telefone celular;
Para aceder a esta objeto e ler o livro, necessrio obter a sua localizao: um endereo URL. Fax;
Um URL tpico para este livro um caminho de arquivos, como file:////home/pedro/Desktop/ Pager;
RomeoAndJuliet.pdf, identificando o livro eletrnico salvo no disco de um PC local.
E-mail.
Ento o propsito de URNs e URLs o de serem complementares.
Finalmente, nmeros de telefone no devem ser considerados
simplesmente nmeros. Na verdade, eles se dividem em os se-
Tipos de dados complexos guintes campos:
Finalmente
, existem alguns tipos

de dados

comuns, mas

comple- Cdigo do Pas;
xos
, tais
como nmeros de telefone
, endereos postais, informa-
Cdigo de rea;
es de contato, e cartes de crdito - que ocorrem em quase todos Prefixo;
os esquemas de banco de dados. Normalmente, esses registros Nmero da linha;
precisam ser acessados a partir de muitas tabelas no banco de Ramal.
dados. Em um sistema de eCommerce tpico, por exemplo, pode
ser necessrio armazenar informaes de contato para os usurios, Em um nmero de telefone, tais como 987-1234, o prefixo
fornecedores, armazns, e administradores. o 987 e o nmero da linha 1234. O ramal a nica parte do
Ao invs de incluir
os

atributos
do

respectivo

usurio

, fornece- nmero de telefone que opcional. , provavelmente, suficiente
dor, ou outro registro. (e repetindo assim as colunas em todo o usar char(4) para todas as colunas, mas pode-se considerar
banco de dados), faz sentido a criao de uma tabela nica para as char(6) por segurana. Note-se que os cdigos de rea nos
informaes de contato que referenciada por chaves estrangeiras EUA esto limitados a trs dgitos, mas isso no verdade
por todas as outras tabelas. Isto tem dois benefcios imediatos: para outros pases.
mais fcil
alterar

posteriormente a
cardinalidade

dos
rela-
Os dados confidenciais devem ser mantidas de forma cripto-
cionamentos; grafada. Mesmo que o sistema de banco de dados esteja compro-
Ele localiza as futuras alteraes ao tipo de dados complexo. metido, os dados ainda so protegidos contra uso indevido. O
mais famoso exemplo deste tipo de gerenciamento de dados o
Antecipar os atributos que sero provavelmente necessrios sistema de senhas Unix, que apenas armazena hashes de senhas
para
cada

um desses
tipos

complexos

uma arte
. Minha

suges- dos usurios, em vez das senhas propriamente ditas. Alguns da-
to tentar se esforar ao mximo desde o incio ao invs de ser dos, como nmeros de carto de crdito, precisam ser codificados
forado a mudar o esquema a cada vez que um campo adicional em uma forma recupervel, no entanto, uma criptografia de mo
torna-se necessrio. nica (como para o arquivo de senhas Unix) no vai funcionar.
Uma amostragem de atributos possveis para endereos postais Isto leva ao problema da administrao de chaves de criptogra-
inclui: fia - claramente, no devem ser armazenadas no banco de dados,
Departamento; juntamente com os segredos, mas que so fornecidos no momento
Empresa; necessrio, por exemplo.

Edio 101 SQL Magazine 19


Introduo a projeto de banco de dados Parte 1

Concluso Ricardo Rezende


Neste artigo, discutimos algumas prticas gerais ao projetar e-mail: ricardo@devmedia.com.br / ricarezende@gmail.com
bancos de dados relacionais, incluindo: Blog: http://www.devmedia.com.br/ricardorezende
Os benefcios da manuteno da tabela de atributos adicionais Blog: http://purl.org/ricarezende/blog
sem qualquer significado de negcios para servir como chaves Twitter: http://twitter.com/ricarezende
substitutas; DBA Oracle certificado pela Oracle University (DBA 9i track e DBA OCP
10g). IBM Certified Database Associate DB2 9. DBA Oracle na IBM do Brasil em projeto
A recomendao de no basear os trabalhos internos do banco
internacional administrando ambiente de produo de alta criticidade. Consultor indepen-
de dados em identificadores universalmente nicos;
dente de Bancos de Dados. Editor tcnico da revista SQL Magazine. Mestrando em Cincia
A utilizao de uma instalao centralizada de cdigos de da Computao pelo Instituto de Computao da Universidade Estadual de Campinas - IC
tipo para expressar atributos com intervalos predeterminados UNICAMP. Docente no curso de Administrao de Banco de Dados na Dextra Systems.
de valores;
Algumas consideraes na concepo de tipos de dados com-
plexos para serem usadas durante todo o esquema de banco de D seu feedback sobre esta edio! eu
Feedback

s
D
dados. A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
voc, leitor, acha da revista!

s
ta
edio

No prximo artigo, falarei sobre normalizao de banco de dados D seu voto sobre este artigo, atravs do link:
e alguns usos para um banco de dados dentro de um projeto, como www.devmedia.com.br/sqlmagazine/feedback
o uso de tabelas de histrico e logs de eventos. At a prxima.

20 SQL Magazine Edio 101


Projeto de Software/ Modelagem Nesta seo voc encontra artigos sobre projeto, anlise ou modelagem de dados

Os dez erros comuns


em projetos de banco
de dados Parte 1
Este artigo faz parte de um curso Resumo DevMan
De que se trata o artigo:
Este artigo apresenta os dez erros mais comuns no processo de

S
em a menor sombra de dvidas a internet se tornou modelagem de um banco de dados, tanto no tocante modelagem
uma das principais fontes de consulta do mundo em si, quanto manuteno e tambm o desempenho geral do banco
moderno. Nem me lembro mais qual foi a ltima de dados. Neste contexto, o contedo deste artigo serve para que o
vez que entrei em uma biblioteca para pesquisar algo. arquiteto de dados reflita sobre algumas ms prticas de modelagem
Sim, continuo comprando livros. Por sinal adoro perder de dados para que possa evit-las em seus projetos.
algumas horas em uma boa livraria, principalmente as
que possuem livros tcnicos. Em que situao o tema til:
Mas no podemos negar que a quantidade de material Durante o desenvolvimento de um modelo de dados, evitar certos
de boa qualidade e de fcil acesso que encontramos na vcios e prticas pouco adequadas especialmente til para que o
internet vasta e interessante. projeto como um todo alcance o xito desejado ou que, ao menos, o
E justamente em uma dessas navegadas encontrei retrabalho seja o mnimo possvel.
um artigo interessante escrito por Louis Davidson, um
Arquiteto de Dados (DA Data Architect, em ingls) com Os dez erros comuns em projetos de banco de dados Parte 1:
mais de 15 anos de experincia em Bancos de Dados (ver Durante o desenvolvimento de um projeto de banco de dados co-
seo Referncias Bibliogrficas), que fala sobre os mum nos depararmos com situaes realmente assustadoras. Muitas
dez erros mais comuns no projeto de Bancos de Dados. dessas situaes esto diretamente ligadas a erros que os arquitetos
Mas claro que no poderia simplesmente fazer uma comentem mais frequentemente do que gostaramos.
traduo. Me preocupei em agregar informaes ao fato que se pretendssemos escrever sobre todos os erros comuns
artigo e torn-lo mais agradvel e rico para voc, leitor durante o projeto/modelagem de banco de dados, teramos assunto
da SQL Magazine. para um livro inteiro, e com direito a um segundo livro. Como a inten-
Se o projeto de Banco de Dados feito de maneira o no a de escrever um livro, separamos os dez erros mais comuns
correta, ento o desenvolvimento, implementao e, e que, acreditem, podem ser totalmente evitados.
consequentemente, o desempenho geral do banco de Neste primeiro artigo sero abordados os cinco primeiros, que
dados ter poucos problemas. Um banco de dados bem passam por problemas de m concepo e planejamento do pro-
projetado simplesmente funciona. H um pequeno jeto, problemas tpicos de falta de normalizao, falta completa de
nmero de erros no projeto de banco de dados que trans- padres de nomenclatura, total falta de documentao e chegando
formam a vida de desenvolvedores, gerentes e DBAs em ao problema de utilizao de uma nica tabela para armazenar todos
um imenso inferno astral. os valores de domnio.
Este artigo trata dos dez piores erros que so cometidos Sem dvida nenhuma este artigo no traz a soluo para todos os
de uma maneira at que comum em grande parte dos problemas de projeto de banco de dados, mas leva o leitor a uma
projetos de bancos de dados. reflexo profunda do que ele pode evitar para obter um projeto pleno
Nenhuma lista de erros jamais ser definitiva. e o mais prximo possvel do xito.
As pessoas, algumas vezes, fazem um monte de coisas

Edio 101 SQL Magazine 21


Os dez erros comuns em projetos de banco de dados Parte 1

estpidas para garantir um prazo ou at mesmo por pura pregui- M concepo / planejamento
a, inclusive eu. Conheo muita gente assim, acredite. O autor j inicia com uma frase de efeito: Se voc no sabe onde
Esta lista reflete simplesmente os erros de projeto de banco de da- est indo, qualquer caminho te leva at l George Harrison.
dos que nos deparamos com uma certa frequncia, infelizmente. Palavras profticas para qualquer momento da vida e uma
importante salientar que todos ns estamos sujeitos a comenter descrio do tipo de questes que afligem muitos projetos nos
equvocos e mesmo implementar prticas, como dizer, pouco dias de hoje.
ortodoxas que podem no surtir o efeito desejado. claro que Deixe-me perguntar: voc pode contratar um empreiteiro para
sempre que escrevemos qualquer artigo, seja para a revista ou construir uma casa e exigir que ele comece a construir a fundao
para o blog, procuramos apresentar sempre as melhores prticas no dia seguinte? Pior ainda, se voc exigir que seja feito sem pro-
e ensinar sempre o melhor possvel. jetos ou planta da casa? Felizmente, voc respondeu no (espero
O mais importante que, aps ler este artigo, voc tenha sempre que tenha respondido isso)para ambos. Um projeto necessrio
uma pequena voz interior lhe alertando sempre que estiver prestes para a casa que voc quer construda, e que a terra sob a qual est
a cometer um destes equvocos. a constru-la no afunde em alguma caverna subterrnea. Agora,
Vejamos ento a to falada lista: se voc respondeu sim, eu no tenho certeza de que este artigo
01. M concepo / planejamento; possa te ajudar!
02. Ignorar a normalizao; Exatamente como uma casa, um bom banco de dados cons-
03. Falta de padres de nomenclatura; trudo com premeditao e com o devido cuidado e ateno
04. Falta de documentao; despendidos s necessidades dos dados que este banco de dados
05. Uma tabela para armazenar todos os valores de domnio; ir armazenar, no podem ser simplesmente jogados em uma
06. Usar coluna auto-incremento como sua nica chave; espcie de balaio.
07. No utilizar as caractersticas do SQL para proteger a integri- Uma vez que o banco de dados a base de praticamente todos os
dade de dados; projetos de negcios, se voc no utilizar corretamente o tempo
08. No usar stored procedures (ver Nota DevMan 1) para acessar para mapear as necessidades do projeto e como o banco de dados
dados; vai ao encontro deles, ento as chances so de que todo o projeto
09. Tentativa de construo de objetos genricos; ir desviar-se do curso e perder a direo. Alm disso, se voc
10. Falta de testes. no dispender o tempo necessrio logo no incio do projeto para
garantir que o mesmo esteja correto, ento voc ver que todas
Neste primeiro artigo, veremos os cinco primeiros erros comuns as alteraes substanciais nas estruturas de banco de dados que
descritos acima. voc precisa fazer mais para a frente podero causar um impacto

Nota do DevMan 1
Stored Procedures: Uma stored procedure (procedimento armazenado) uma sub-rotina disponvel do sistema de banco de dados, as stored procedures podem ser implementados numa variedade
para aplicativos que acessam um sistema de banco de dados relacional. Uma stored procedure (muitas de linguagens de programao, por exemplo SQL, Java, C ou C++. As stored procedures escritos em
vezes chamada de proc, sproc, stopro, StoredProc, sp ou SP) , na verdade, um cdigo armazenado no linguagens de programao no-SQL podem ou no executar instrues SQL.
dicionrio de dados do banco de dados.
A crescente adoo de stored procedures levaram introduo de elementos procedurais para a
Os usos tpicos para stored procedures incluem a validao de dados (integrado ao banco de dados) ou linguagem SQL nas normas SQL1999 e SQL2003. Isso fez com que o SQL se tornasse uma linguagem de
mecanismos de controle de acesso. Alm disso, as stored procedures podem consolidar e centralizar a programao imperativa. A maioria dos sistemas de banco de dados oferecem extenses proprietrias,
lgica que foi originalmente implementada na camada da aplicao. Processamentos extensos ou que vo alm do descrito nas normas SQL1999 e SQL2003.
complexos que requerem a execuo de vrias instrues SQL so movidos para stored procedures e
todos os aplicativos simplesmente a chamam. possvel ainda utilizar stored procedures aninhadas, ao Abaixo uma listagem dos principais Sistemas de Gerenciamento de Banco de Dados e respectiva
executar uma stored procedures de dentro de outra. linguagem de implementao de stored procedures:

As stored procedures so semelhantes s funes definidas pelo usurio (UDF User Defined Function, CUBRID: Java;
em ingls). A principal diferena que UDFs podem ser usadas como qualquer outra expresso dentro de DB2: SQL PL ou Java;
instrues SQL, enquanto stored procedures devem ser chamadas utilizando a instruo CALL ou EXECUTE.
Firebird: PSQL (Fyracle tambm suporta uma parcela de PL/SQL, da Oracle);
As stored procedures podem retornar conjuntos de resultados, ou seja, os resultados de uma instruo
SELECT. Tais conjuntos de resultados podem ser processados usando cursores, atravs de outras stored Informix: SPL
procedures, associando um conjunto de resultados de localizao, ou por aplicativos.
Microsoft SQL Server: Transact-SQL e vrias linguagens do framework .NET;
As stored procedures podem conter tambm variveis declaradas para processamento de dados e
MySQL: stored procedures prprias, adere norma SQL2003;
cursores que permitem percorrer vrias linhas em uma tabela. Linguagens procedurais normalmente
incluem declaraes IF, WHILE, LOOP, REPEAT, CASE, e muito mais. As stored procedures podem receber Oracle: PL/SQL ou Java;
variveis ou modificar as variveis e devolv-las, dependendo de como e onde a varivel declarada.
PostgreSQL: PL/pgSQL, pode tambm usar linguagens prprias como pl/perl ou pl/php;
A implementao exata e correta de stored procedures varia de um sistema de banco de dados para outro.
Fornecedores de banco de dados mais importantes os implementam de alguma forma. Dependendo Sybase ASE: Transact-SQL.

22 SQL Magazine Edio 101


enorme em todo o projeto, e aumentar significativamente a proba- conjuntos de dados quantos voc queira, para produzir o con-
bilidade de o cronograma do projeto ir por gua abaixo. junto final que voc precise.
Muito frequentemente, uma fase de planejamento simples- Esta natureza aditiva extremamente importante, no apenas
mente ignorada em favor de apenas garantir o cronograma. O pela facilidade de desenvolvimento, mas tambm em funo de
projeto sempre avana em uma certa direo e quando os pro- desempenho. Os ndices so mais eficazes quando trabalham
blemas inevitavelmente surgem - devido falta de concepo e com todo o valor da chave. Sempre que precisar usar funes
planejamento - no h tempo hbil para voltar atrs e corrigir os do tipo CHARINDEX, SUBSTRING, LIKE, etc. em sua consulta
problemas corretamente, usando tcnicas apropriadas. quando SQL para analisar um valor que uma combinao com outros
as gambiwares comeam (somos profissionais de TI, no faze- valores (por exemplo, para buscar apenas o ltimo nome de uma
mos gambiarras, mas sim gambiwares), com a promessa velada pessoa em uma coluna onde est armazenado o nome completo)
de voltar e consertar as coisas mais tarde, algo que acontece muito os paradigmas da linguagem SQL comeam fazer com que os
raramente, quando acontecem. dados sejam cada vez menos encontrveis.
O fato que impossvel prever todas as necessidades que o Ento, normalizar os seus dados essencial para o bom desem-
projeto ter que cumprir e cada problema que provvelmente penho e facilidade de desenvolvimento, mas a pergunta sempre
surjir, mas importante que haja um planejamento cuidadoso vem tona: Quando a normalizao est suficientemente nor-
para mitigar possveis problemas, tanto quanto possvel. malizada? Se voc j leu algum livro sobre normalizao, ento
voc j deve ter ouvido muitas vezes que a 3 forma normal (3FN)
Ignorar a normalizao essencial, mas 4 e 5 formas normais (4FN e 5FN) so realmente
Normalizao (ver Nota DevMan 2) define um conjunto de m- teis e, uma vez que voc tem o domnio sobre elas, se torna muito
todos para quebrar tabelas em suas partes constituintes, at que fcil de acompanhar e chega-se concluso que valeu a pena o
cada tabela represente uma e somente uma coisa, e suas colunas tempo necessrio para implement-las.
servem para descrever completamente apenas essa coisa que Na realidade, porm, bastante comum que nem mesmo a 1.
a tabela representa. forma normal (1FN) seja implementada corretamente.
Sempre que vejo uma tabela com os nomes das colunas repetidos
e simplesmente com nmeros como sufixo, eu entro em pnico. E
Nota do DevMan 2 saiba que eu entro em pnico com bastante frequncia. Considere
a tabela Cliente, no exemplo da Figura 1.
Normalizao: Aplicaes em modelo de dados para um banco de dados relacional envolve a
necessidade de remoo de duplicidades e, para atingir este objetivo, usamos um processo chamado
de "normalizao". Este processo composto por um conjunto de regras conhecidas como "formas
normais" (ou simplesmente "FN").
A normalizao aplicada a um conjunto de dados ou tabelas em um banco de dados relacional,
enquanto as tabelas so utilizadas para armazenar diretamente os dados associados a ela. As tabelas
podem ser relacionadas ou ligadas entre si atravs de ndices identificadores. Este ndice identificador
usado para identificar a linha de dados da mesma forma que um ndice tradicional em um livro.Veja
que o ndice usado para encontrar uma determinada informao de interesse sem a necessidade
de leitura de todo o livro.
Basicamente, existem 5 nveis de normalizao conhecidos como 1, 2, 3, 4 e 5 formas normais
(ou 1FN, 2FN, 3FN, 4FN e 5FN) e cada uma das formas normais um refinamento da forma normal
anterior, ou seja, para dizermos que o modelo se encontra na 2 forma normal, entende-se que este
modelo tambm atende as regras da 1 forma normal.

O conceito de normalizao tem sido adotado a aproximada-


mente 30 anos e a base sobre a qual a linguagem SQL e bancos
de dados relacionais so implementados. Em outras palavras, a
linguagem SQL foi criada para trabalhar com as estruturas de
dados normalizadas. A normalizao no apenas alguma tc-
nica usada por programadores de banco de dados para irritar os Figura 1. Tabela Cliente totalmente desnormalizada
programadores de aplicativos (que apenas um efeito colateral).
A linguagem aditiva em sua natureza uma vez que, se voc H sempre 12 pagamentos? A ordem dos pagamentos real-
tem apenas pedaos de dados, fcil construir um conjunto mente relevante? Ser que um valor NULL para um pagamento
de valores ou resultados. Na clusula FROM, voc pega um significa DESCONHECIDO (no preenchido at o momento),
conjunto de dados (uma tabela) e adiciona a outra tabela atravs ou um pagamento perdido (inadimplencia)? E quando foi feito
de uma juno (JOIN). Voc pode adicionar (ou juntar) tantos o pagamento?

Edio 101 SQL Magazine 23


Os dez erros comuns em projetos de banco de dados Parte 1

Um pagamento no descreve um cliente e no deve ser armaze- fcil, compreendam como um componente do banco de dados foi
nado na tabela Cliente. Informaes sobre os pagamentos devem definido para ser utilizado, e quais os dados que ele armazena.
ser armazenados em uma tabela de pagamento, em que voc tam- Nenhum usurio futuro de seu projeto precisar percorrer um
bm pode registrar informaes adicionais sobre o pagamento, documento de 500 pginas para determinar o significado de
como quando o pagamento foi feito, e qual o motivo deste paga- algum nome maluco.
mento. Veja na Figura 2 como deve ser feita a normalizao. Considere, por exemplo, uma coluna chamada X304_DSCR.
Que diabos isso significa? Voc pode decidir, depois de coar
bastante a cabea, que significa Descrio X304. Provavelmente
isso acontece, mas talvez DSCR signifique Discriminador, ou
Discretizator?
A menos que voc tenha estabelecido DSCR como uma abrevia-
o padro corporativa para a descrio, ento X304_DESCRICAO
um nome muito melhor, e no deixa margens imaginao.
Figura 2. Tabela Cliente normalizada Isso far com que voc s precise descobrir o que a parte X304 do
nome significa. Na primeira olhada, para mim, soa muito mais
No projeto da Figura 2, cada coluna armazena uma nica uni- que X304 deva ser uma informao a ser armazenada na coluna do
dade de informao sobre uma coisa nica (pagamento), e cada que o nome da coluna propriamente dito. Se eu, posteriormente,
linha representa uma instncia especfica de um pagamento. descobrir que, na organizao, houve tambm um X305 e X306,
O projeto da Figura 2 vai exigir um pouco mais de cdigo no ento eu iria sinalizar que houve um problema com o projeto do
processo, mas muito mais provvel que voc seja capaz de des- banco de dados. Para maior flexibilidade, os dados so armaze-
cobrir o que est acontecendo no sistema. nados em colunas, e no em nomes de coluna.
Nessa mesma linha, muito importante resistir tentao de
Falta de padres de nomenclatura incluir metadados em nome de um objeto. Um nome como tbl-
E mais uma frase de efeito: Isso que ns chamamos de rosa, Cliente ou colVarcharEndereco pode parecer til a partir de
mesmo que chamado por qualquer outro nome teria um cheiro uma perspectiva de desenvolvimento, mas para o usurio final,
agradvel. apenas confuso. Como um desenvolvedor, voc deve confiar em
Esta citao de Romeu e Julieta, de William Shakespeare, ser capaz de determinar que um nome de tabela um nome de
parece muito boa, e verdade, por uma perspectiva. Se todos tabela pelo contexto no cdigo ou ferramenta, e apresentar para
concordarem que, a partir de agora, uma rosa deve ser chamada de os usurios definies de nomes claros e simples, como Cliente
esterco, ento ns poderamos superar isso e o cheiro continuaria e Endereo.
sendo bastante agradvel. O problema que, se ao construir um Uma prtica que eu recomendo fortemente a NO utilizao
banco de dados para uma florista, o arquiteto de dados chamar de espaos e identificadores entre aspas em nomes de objetos.
de esterco e o cliente chama de rosa, ento voc ter algumas Voc deve evitar os nomes das colunas como Nmero da pea
reunies que soam muito mais como um episdio de Abbott e ou, no estilo Microsoft, [Nmero da pea], exigindo, portanto
Costello (ver Nota DevMan 3) do que uma conversa sria sobre que os seus usurios (programadores) tenham que incluir esses
armazenar informaes sobre os produtos hortcolas. espaos e identificadores em seu cdigo. chato e simplesmente
desnecessrio.
Alternativas aceitveis seriam NumeroPeca, numero_peca ou
Nota do DevMan 3 numeroPeca. Mais uma vez, a consistncia a chave. Se voc
escolher NumeroPeca ento tudo bem - desde que a coluna que
Abbott e Costello: William Bud Abbott e Lou Costello (nascido Louis Francis Cristillo), eram uma
contm nmeros de fatura seja chamada de NumeroFatura, e no
dupla de comdiantes norte-americanos cujo trabalho no palco, rdio, cinema e televiso fez deles a uma das outras variaes possveis.
equipe de comdia mais popular durante os anos 1940 e 1950.
Falta de documentao
Sugeri na introduo que, em alguns casos, estou escrevendo
Nomes, enquanto uma escolha pessoal, so a primeira e mais im- para mim mesmo tanto quanto para voc. Este o tpico onde
portante linha de documentao para a sua aplicao. Eu no vou isso mais verdadeiro. Tomando o devido cuidado para nomear
entrar em todos os detalhes de qual a melhor maneira de definir seus objetos, colunas e assim por diante, voc pode tornar claro
nome s coisas neste artigo, um tema amplo e confuso. O que para qualquer um o que que seu banco de dados est modelando,
eu quero enfatizar neste artigo a necessidade de coerncia. Os ou seja, qual a realidade modelada em seu banco de dados. No
nomes escolhidos no so apenas para que voc possa identificar entanto, este apenas um passo na batalha pela criao de uma
a finalidade de um objeto, mas para permitir que todos os futuros documentao. A triste realidade , porm, que um passo
programadores, usurios, e assim por diante, de forma rpida e muitas vezes o nico passo.

24 SQL Magazine Edio 101


Voc no s ter um modelo de dados bem elaborado ao aderir a Pode ser armazenado no prprio banco de dados, utilizando as
um padro de nomeao slido, mas tambm ter definies sobre propriedades estendidas. Alternativamente, podem ser manti-
suas tabelas, colunas, relacionamentos e restries padro ou de dos nas ferramentas de modelagem de dados. Pode at mesmo
verificao (constraints ver Nota DevMan 4), de modo que ser ser armazenado em aplicativos separados, como o MS-Excel
claro para todos como estes objetos foram projetados para serem ou ainda em outro banco de dados relacional. Minha empresa
utilizados. Em muitos casos, voc pode querer incluir valores de mantm um banco de dados como repositrio de metadados, que
amostra, conforme uma necessidade que surgiu em um determi- desenvolvemos a fim de apresentar esses dados para usurios
nado objeto, ou qualquer outra coisa que voc possa querer saber finais em um formato pesquisvel. O formato e a usabilidade
sobre aquele objeto em um ano ou dois, quando voc do futuro so importantes, mas a batalha principal ter a informao dis-
tem que voltar e fazer alteraes no cdigo. ponvel e atualizada.
Seu objetivo deve ser o de fornecer informaes suficientes
para que quando voc efetivamente implemente o banco de
Nota do DevMan 4 dados, os programadores possam ser capazes de descobrir
seus pequenos erros e corrigi-los (sim, todos ns cometemos
Restries - Constraints: As restries de integridade (integrity constraints) so regras nomeadas erros em nosso cdigo). Eu sei que h uma velha piada que o
que restringem os valores para uma ou mais colunas em uma tabela. Essas regras evitam a entrada cdigo mal documentado um sinnimo de segurana do
de dados invlidos nas tabelas. Alm disso, as restries podem impedir a excluso de uma tabela emprego (o famoso job preservation, ou em bom portugus,
quando certas dependncias existam.
preservao do emprego). Embora haja uma pitada de verdade
Se uma restrio estiver habilitada, ento o banco de dados verifica os dados que so inseridos ou
atualizados. Os dados que no estejam em conformidade com a restrio so impedidos de serem
nisso, tambm uma forma de ser odiado por seus colegas de
inseridos. Se uma restrio estiver desabilitada, dados que no estejam em conformidade com as trabalho e nunca ter um aumento. E nenhum bom programa-
restries podem ser autorizados a serem inseridos no banco de dados. Veja o exemplo abaixo: dor que conheo quer voltar e refazer seus prprios cdigos
CREATE TABLE funcionario anos mais tarde. melhor se os erros no cdigo possam ser
(id_funcionario NUMBER(6), gerenciados por um programador jnior enquanto voc se de-
nome VARCHAR2(20), dica criao da prxima novidade. A segurana do emprego,
sobrenome VARCHAR2(25) juntamente com aumentos alcanada por ser a pessoa certa
CONSTRAINT func_sobrenome_nn NOT NULL, para novos desafios.
email VARCHAR2(25)
CONSTRAINT func_email_nn NOT NULL, Uma tabela para armazenar todos valores de domnio
telefone VARCHAR2(20), E mais uma frase de efeito: Um Anel para a todos governar e
admissao DATE, na escurido aprision-los.
CONSTRAINT func_admissao_nn NOT NULL, Isto muito bom quando estamos em terreno de fantasias, mas
id_funcao VARCHAR2(10) no to bom quando aplicada ao projeto de banco de dados, na
CONSTRAINT func_funcao_nn NOT NULL, forma de uma tabela de domnio. Bancos de dados relacionais
salario NUMBER(8,2), so baseados na ideia fundamental de que cada objeto representa
pct_comissao NUMBER(2,2), uma e somente uma coisa. Nunca deve haver qualquer dvida
id_gerente NUMBER(6), quanto ao que se refere determinada parte dos dados. Ao navegar
id_departamento NUMBER(4), atravs dos relacionamentos, de nome de coluna, para nome da
CONSTRAINT func_salario_min tabela, e tambm a chave primria, deve ser simples determinar
CHECK (salario > 0), os relacionamentos e entender exatamente o que uma frao dos
CONSTRAINT func_email_uk dados significa.
UNIQUE (email)); O grande mito perpetrado por arquitetos que realmente no
No exemplo acima, a instruo CREATE TABLE especifica restries NOT NULL para as colunas compreendem a arquitetura de banco de dados relacional (me
sobrenome, email, admisso e id_funcao. As clusulas de restrio identificam as colunas e as incluo, no incio da minha carreira) que quanto mais tabelas
condies de restrio. Estas restries garantem que as colunas especificadas no contenham valores existirem, mais complexo ser o projeto. Assim, ao contrrio, no
nulos. Por exemplo, uma tentativa de inserir um novo funcionrio sem identificao da funo gera
um erro. deveramos condensar vrias tabelas em uma nica tabela do tipo
Voc pode criar uma restrio durante ou depois da criao uma tabela. As restries podem ser
balaio para simplificar o projeto?
temporariamente desabilitadas, se necessrio. O banco de dados armazena as informaes sobre as Por exemplo, considere o seguinte modelo onde eu precisava de
restries no dicionrio de dados. valores de domnio para:
Status de crdito do cliente;
Tipo de cliente;
Algo a ser considerado que onde esta documentao ser arma- Status da fatura;
zenada , em grande parte, uma questo de padres corporativos Status da encomenda do item da fatura;
e/ou convenincia para os desenvolvedores e usurios finais. Envio do item da fatura via transportadora.

Edio 101 SQL Magazine 25


Os dez erros comuns em projetos de banco de dados Parte 1

Diante disso, que seriam cinco tabelas consultas SQL. Vamos imaginar que s vista, as tabelas de domnio so apenas
de domnio... mas por que no usar uma queremos os valores de domnio para a um conceito abstrato de um recipiente que
tabela de domnio genrico, como a apre- tabela Cliente, veja a consulta SQL ne- contm texto. E do ponto de vista da imple-
sentada na Figura 3? cessria para encontrar esta informao mentao isto bem verdade, mas no a
O modelo apresentado na Figura 3 na Listagem 1. maneira correta de construir um banco de
pode parecer uma forma muito limpa e Como voc pode ver, a soluo apresentada dados. Numa base de dados, o processo de
natural para criar uma tabela para todos, na Listagem 1 est longe de ser uma juno normalizao, no sentido de quebrar e isolar
mas o problema que esta tcnica no se natural. Tudo se resume ao problema de dados, assume cada tabela considerando que
mostra muito natural ao se trabalhar com misturar mas com laranjas. primeira cada linha representa uma coisa. E cada do-
mnio de valores uma coisa distintamente
diferente de todos os outros domnios (a
menos que ele no seja e, este o caso em
que uma nica tabela ser suficiente). Ento
o que voc faz, em essncia, normalizar
os dados para cada projeto, dividindo o
trabalho ao longo do tempo, ao invs de
fazer toda a tarefa de uma nica vez e ter
que recomear mais tarde.
Ento, ao invs da tabela nica para todos
os domnios, voc pode model-lo como
apresentado na Figura 4.
Parece mais difcil de fazer, certo? Bem,
inicialmente realmente . Francamente,
gastei mais tempo para completar as tabelas
de exemplo. Mas, no final das contas, h
ganhos enormes ao se adotar esta tcnica.
Vamos a eles:
Para incio de conversa, a consulta SQL
Figura 3. Modelo utilizando tabela de domnio necessria para encontrar a mesma infor-
mao da Listagem 1 muito mais fcil de
ser escrita, conforme mostra a Listagem 2;
Os dados podem ser validados utilizan-
do restries de chaves estrangeiras, muito
naturalmente, algo invivel para a soluo
da Figura 3, a no ser que voc implemente
intervalos de chaves para cada tabela -
uma confuso terrvel de gerenciar;
Se concluir que voc precisa armazenar
mais informaes sobre um EnvioTrans-
portadora alm de apenas o cdigo: UPS,
e sua descrio: United Parcel Service,
ento bastante simples apenas adicionar
uma coluna ou duas. Voc poderia ainda
expandir a tabela para ser uma representa-
o completa das empresas de transporte;
Todas as tabelas de domnio menores
iro caber em uma nica pgina de disco
(falando em armazenamento fsico). Isso
garante uma leitura nica (e provavelmen-
te uma nica pgina em cache ver Nota
DevMan 5). No outro caso (tabela nica
de domnio), voc pode ter sua tabela de
Figura 4. Modelo da Figura 3 normalizado domnio espalhada por muitas pginas de

26 SQL Magazine Edio 101


disco, a menos que se use a tcnica de clustering, que, por outro
lado, poderia custar mais para usar um ndice no-cluster se Nota do DevMan 5
voc tem muitos valores;
Voc ainda pode ter um editor para todas as linhas, como a Cache: Em cincia da computao, um cache um componente que armazena dados de forma
maioria das tabelas de domnio provavelmente ter o mesmo uso transparente para que as futuras solicitaes aos dados possam ser servidas mais rapidamente. Os
dados que so armazenados em um cache podem ser valores que foram calculados anteriormente
ou a mesma estrutura base. Mas, considerando que voc perderia a ou duplicatas de valores originais que so armazenados em outro lugar. Se os dados solicitados
capacidade de consultar todos os valores de domnio em uma con- esto contidos no cache (cache hit), este pedido pode ser servido pela simples leitura do cache, que
relativamente mais rpido. Caso contrrio (cache miss), os dados tem de ser recalculados ou obtidos a
sulta consulta SQL simples, por que voc faria isso? (Uma consulta
partir de seu local de armazenamento original, que relativamente mais lento. Assim, quanto maior o
utilizando JOIN e/ou UNION pode ser facilmente criada conforme nmero de solicitaes que podem ser servidos a partir do cache, mais rpido se torna o desempenho
necessrio, mas isso parece uma necessidade improvvel). geral do sistema.
Para ser eficiente e para permitir uma utilizao eficiente dos dados, caches so relativamente
pequenos. No entanto, caches se consolidaram em diversas reas da informtica, pois os padres de
acesso em tpicas aplicaes de computador tm sua localidade de referncia. Referncias exibem
Listagem 1. Consulta SQL para encontrar informaes atravs de tabela de domnio.
localidade temporal se os dados solicitados j foram recentemente solicitados. Referncias exibem
localidade espacial se os dados solicitados estiverem fisicamente armazenados prximo a dados que
SELECT *
foram solicitados recentemente.
FROM Cliente
JOIN DominioGenerico as TipoCliente O hardware implementa cache como um bloco de memria para armazenamento temporrio de
ON Cliente.idTipoCliente = TipoCliente.idDominioGenerico dados suscetveis de serem utilizados novamente. CPUs e unidades de disco rgido frequntemente
AND TipoCliente.Relativo_a_Tabela = Cliente usam um cache, como fazem navegadores e servidores web.
AND TipoCliente.Relativo_a_Coluna = idTipoCliente
JOIN DominioGenerico as StatusCredito Uma memria cache constituda por um conjunto de entradas. Cada entrada tem um dado - uma
ON Cliente.idStatusCredito = StatusCredito.idDominioGenerico cpia do mesmo dado em alguma unidade de armazenamento. Cada entrada tem tambm uma
AND StatusCredito.Relativo_a_Tabela = Cliente etiqueta, que especifica a identidade do ponto de referncia na unidade de armazenamento das
AND StatusCredito.Relativo_a_Coluna = idStatusCredito; quais a entrada uma cpia.
Quando o cliente de cache (CPU, navegador web, sistema operacional) precisa acessar um dado que
Listagem 2. Consulta SQL para encontrar informaes no modelo normalizado.
presumidamente exista na unidade de armazenamento, ele primeiro verifica o cache. Se uma entrada
pode ser encontrada com uma etiqueta correspondente ao do dado desejado, o dado da entrada
SELECT *
usado. Esta situao conhecida como cache hit. Assim, por exemplo, um navegador da Web pode
FROM Cliente
verificar a sua cache local no disco para ver se ele tem uma cpia local dos contedos de uma pgina
JOIN TipoCliente
web em uma determinada URL. Neste exemplo, a URL a etiqueta e o contedo da pgina web o
ON Cliente.idTipoCliente = TipoCliente.idTipoCliente
dado. A percentagem de acessos que resultam em cache hits conhecida como a taxa de acerto ou
JOIN StatusCredito
taxa de acerto do cache.
ON Cliente.idStatusCredito = StatusCredito.idStatusCredito;

Edio 101 SQL Magazine 27


Os dez erros comuns em projetos de banco de dados Parte 1

Eu provavelmente deveria refutar o pensamento que deve estar A ideia aqui no a de produzir um passo-a-passo do que se deve
em sua mente neste momento: E se eu precisar adicionar uma ou no fazer, mas apenas apontar alguns casos em que o ganho
nova coluna para todas as tabelas de domnio? Por exemplo, final substancial. A chave para o sucesso, neste caso, a profunda
voc esqueceu que o cliente quer ser capaz de fazer a classifi- anlise do que se vai fazer antes de efetivamente faz-lo.
cao personalizada em valores de domnio mas no colocou E, principalmente, deve-se colocar na balana o ganho instan-
nada nas tabelas para permitir isso. Esta uma pergunta justa, tneo X ganho futuro de uma determinada abordagem. Ser
especialmente se voc tem 1000 dessas tabelas em um banco de que o ganho de tempo que terei ao no fazer determinada coisa
dados muito grande. Primeiro, isso raramente acontece, e quando (ou fazer) ser um ganho de fato no futuro no momento de uma
isso acontecer vai ser uma grande mudana para o seu banco de manuteno de cdigo ou de objeto? Esta a reflexo que dese-
dados de qualquer forma. jamos com este artigo. At a prxima.
Segundo, mesmo que isso se torne uma tarefa necessria, a lin-
guagem SQL tem um conjunto completo de comandos que voc
pode usar para adicionar colunas a tabelas, e usar as tabelas do Ricardo Rezende
sistema uma tarefa bastante simples para criar um script para e-mail: ricardo@devmedia.com.br / ricarezende@gmail.com
adicionar a mesma coluna para centenas de tabelas de uma s Blog: http://www.devmedia.com.br/ricardorezende
Blog: http://purl.org/ricarezende/blog
vez. Isso no ser uma mudana to fcil, mas no vai ser muito
Twitter: http://twitter.com/ricarezende
difcil em relao aos grandes benefcios. DBA Oracle certificado pela Oracle University (DBA 9i track e DBA OCP
O ponto chave desta dica simplesmente que melhor fazer o 10g). IBM Certified Database Associate DB2 9. DBA Oracle na IBM do Brasil em projeto
trabalho adiantado, formando estruturas slidas e sustentveis, internacional administrando ambiente de produo de alta criticidade. Consultor indepen-
ao invs de tentar fazer o mnimo de trabalho ao comear um dente de Bancos de Dados. Editor tcnico da revista SQL Magazine. Mestrando em Cincia
projeto. Ao manter as tabelas o mais normalizado possvel para da Computao pelo Instituto de Computao da Universidade Estadual de Campinas - IC
representar uma coisa, significa que a maioria das eventuais UNICAMP. Docente no curso de Administrao de Banco de Dados na Dextra Systems.
mudanas s afetar uma tabela, e podemos concluir que haver
menos retrabalho para voc no futuro.
D seu feedback sobre esta edio! eu
Feedback

s
D
Concluso A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
voc, leitor, acha da revista!

s
ta
Vimos neste primeiro artigo os cinco erros mais comuns em
edio

projetos de banco de dados. Como citei acima, apenas uma frao D seu voto sobre este artigo, atravs do link:
do que nos deparamos no dia-a-dia e tambm tenho certeza que www.devmedia.com.br/sqlmagazine/feedback
continuarei encontrando.

28 SQL Magazine Edio 101


Edio 101 SQL Magazine 29
Validando documentos
Nesta seo
Banco de Dados/Persistncia XML atravs do XML Schema Definition
voc encontra artigos banco de dados, SQL ou persistncia

Validando documentos
XML atravs do XML
Schema Definition
Usando o XSD na prtica

N Resumo DevMan
o de hoje que a parceria entre empresas de um
mesmo segmento vem sendo usada como sada
para a preservao de uma carteira de clientes. De que se trata o artigo:
Digamos que sua empresa possui um sistema contbil de Apresentar para o leitor o XSD (XML Schema Definition), a linguagem
forte nome no mercado (sistema A) e um cliente que vocs de validao de documentos XML (eXtensible Markup Language) mais
pleiteiam j utiliza outro sistema que no to forte na utilizada, demonstrando suas principais funcionalidades e aplicabilidades.
rea contbil (sistema B) mas que os atendem nas opera- Depois que o leitor estiver familiarizado com as principais terminologias
es gerais; devido s grandes dificuldades que se apre- do assunto iremos aplic-las no Microsoft SQL Server.
sentam na implantao de um novo ERP (nota DevMan 1)
o cliente optou por no substituir o sistema em operao Em que situao o tema til:
(sistema B), mas sim fazer solicitaes de melhoria das Imagine que sua empresa acaba de fechar uma parceria com um ex-
suas funcionalidades. A software house que mantm o concorrente e voc foi incumbido de realizar a integrao dos softwares.
sistema B no tem interesse em realizar tais adequaes, Naturalmente voc optar por fazer a transferncia de informaes atravs
ou por falta de tempo, pessoal ou expertise. A soluo de documentos XML, o problema que o padro XML extremamente
mais plausvel seria uma integrao entre os softwares, flexvel, ocasionando problemas na integrao. A fim de evitar retrabalhos
onde o Sistema B enviaria as informaes necessrias para voc precisar definir uma estrutura engessada do documento para que
que o sistema A pudesse funcionar a contento. possa haver uma correta integrao entre os dados.

Validando documentos XML atravs do XML Schema Definition:


A integrao entre sistemas j uma realidade na rea de desenvolvi-
Nota do DevMan 1 mento de software, porm para que esta integrao possa ocorrer sem
maiores problemas faz-se necessrio o uso de tecnologias de padroni-
Riscos na implantao de um ERP: Sistemas Integrados de Gesto Empresarial
zao para o meio de comunicao entre as partes. Como, atualmente,
(SIGE ou SIG), em ingls Enterprise Resource Planning (ERP), so sistemas de
informao que integram todos os dados e processos de uma organizao em um o principal meio de transmisso de dados se d atravs de documentos
nico sistema. A integrao pode ser vista sob a perspectiva funcional (sistemas de: XML, torna-se obrigatria a compresso das principais formas de validao
finanas, contabilidade, recursos humanos, fabricao, marketing, vendas, compras,
etc) e sob a perspectiva sistmica (sistema de processamento de transaes, sistemas destes documentos. Hoje em dia, a principal forma de realizar tal validao
de informaes gerenciais, sistemas de apoio a deciso, etc). utilizando os recursos do XML Schema. Estes recursos sero abordados
Os ERPs, em termos gerais, so uma plataforma de software desenvolvida para no decorrer do artigo de uma forma prtica e de fcil entendimento.
integrar os diversos departamentos de uma empresa, possibilitando a automao e
armazenamento de todas as informaes de negcios.
Existem diversos fatores que podem ocasionar uma falha na implantao de um ERP, Aps algumas reunies foi definido que o transporte dos dados
podemos citar:
dever ser feito atravs de documentos XML (ler Nota DevMan 2).
- Erros de estimativa de custos de infraestrutura. At a nenhuma surpresa, o XML atualmente, com certeza, o
- Desmotivao pessoal. mais aceito e utilizado padro de transporte de dados, devido a
- Falta de capacitao dos usurios finais. sua simplicidade, segurana e confiabilidade. Como se sabe, o
padro XML possui uma altssima flexibilidade no que tange a

30 SQL Magazine Edio 101


construo de suas tags, por isso se diz que ele linguagem auto (string, data, inteiro) ou complexo. Neste ltimo caso, utilizamos
descritiva. Contudo, toda esta elasticidade culmina em problemas a marcao complexType para especificar como estruturado o
para validao dos documentos a serem transmitidos. Para que elemento em questo.
este problema fosse contornado criaram-se padres para validao
dos dados na camada de transporte.
Nota do DevMan 3
Nota do DevMan 2 XSLT: A XSLT (XML StyLesheeT) uma linguagem para definio de regras de transformao em
documentos XML. Estas regras so definidas em folhas de estilo (do ingls stylesheet) seguindo a
sintaxe da linguagem XML.
XML: O padro XML vem como um meio de garantir a interoperabilidade entre sistemas, atravs de
uma linguagem simples, fcil e confivel. Com ele os desenvolvedores podem focar na codificao de O termo folha de estilo utilizado pelo fato de que um dos principais papeis do XSLT adicionar
regras de negcio ou outras tarefas que demandem um nvel de conhecimento especfico, ao invs de informaes de apresentao a um documento XML atravs de sua transformao para uma
criarem lgicas complexas para validao dos arquivos na camada de transporte dos dados. linguagem orientada apresentao como HTML, XHTML (eXtensible HTML) ou SVG (Scalable Vector
Graphics). Estas transformaes so executadas por um processador XSLT cuja responsabilidade
aplicar as regras definidas na folha de estilos aos ns correspondentes de um documento XML.
Dentre as possveis transformaes, uma que vem ganhando importncia e no est relacionada com
formatao para apresentao so as de um documento XML para outro.
Neste contexto, apresentaremos neste artigo o XSD (XML Sche-
ma Definition), a linguagem de validao de documentos XML O princpio de funcionamento do XSLT segue os seguintes passos: (1) um documento XML enviado
para o processador XSLT; (2) o processador XSLT utiliza um documento XSLT no qual esto presentes as
mais utilizada, demonstrando suas principais funcionalidades e informaes sobre como dever ser feita a converso do documento; (3) a partir destas informaes,
aplicabilidades. Depois que o leitor estiver familiarizado com as um novo documento gerado pelo processador.
principais terminologias do assunto iremos aplic-las no Micro-
soft SQL Server
Documentos XML podem ser classificados em bem formados Assim, para o documento da Listagem 1 temos o seguinte
ou vlidos. Um documento considerado bem formado quando entendimento. Existe um elemento raiz (curriculo) do tipo com-
segue as regras definidas pela sintaxe da XML. Para ser vlido, plexo que deve ter como filho um elemento dadosPessoais. Este
alm de seguir a sintaxe da XML, necessrio que o documento por sua vez, tambm do tipo complexo e composto por uma
esteja de acordo com algum esquema previamente definido. O sequncia de filhos cujos nomes das marcaes so nome (do tipo
objetivo do XML Schema , justamente, definir os blocos legais string), dataNascimento (do tipo date), nacionalidade (do tipo
de construo de um documento XML. Neste esquema podem ser string) e endereco (de tipo complexo). Este ltimo pode ocorrer
definidos: os elementos presentes no documento, os atributos que vrias vezes (maxOccurs). Mais abaixo se encontra a definio do
podem aparecer, quais elementos so filhos de outros elementos, elemento endereco o qual possui o atributo tipo e uma sequncia
a sequncia em que os elementos filhos podem ser utilizados, a de elementos (rua, complemento, bairro, cidade, estado e pas) do
quantidade de elementos filhos, se um elemento pode ser vazio tipo string.
ou conter texto, os tipos de dados para os elementos e atributos e Existem vrios editores que facilitam a construo de documen-
valores padro para atributos dentre outros. tos XML Schema Definition (XSD). Neste artigo fizemos uso do
O XML Schema foi originalmente proposto pela Microsoft e , Microsoft Visual Studio. Fica a cargo do leitor escolher um editor
atualmente, uma recomendao do W3C. Alguns pontos que tm que mais se adeque s suas necessidades.
apoiado sua utilizao so:
suporte a tipo de dados facilitando descrever o contedo do Padres de Validao
documento; Existem diferentes possibilidades para definirmos a estrutura de
a utilizao da sintaxe da linguagem XML para definir o esquema. um documento XML. Para fins de conhecimento, descreveremos
Isto possibilita sua manipulao utilizando os mesmos princpios abaixo os padres existentes, porm, no so mais usados:
de um documento XML alm de permitir a aplicao de regras de DTD (Document Type Definition): Antecessor do XML Schema
transformao definidas em XSLT (ler Nota DevMan 3). Definition, foi o primeiro padro de validao de documentos
GML (Nota DevMan 4) e XML. Por se tratar de um padro limi-
A Listagem 1 apresenta um exemplo de definio de esquema tado caiu em desuso. Podemos citar como exemplo de limitaes a
para o documento XML da Listagem 2. Os conceitos bsicos que falta de suporte a namespaces, o tratamento de dados como texto,
devem ser entendidos so os de elemento (element) e tipo com- dentro outras;
plexo (complexType). A marcao element deve aparecer para XDR (Xml Data Reducted): Desenvolvido pela Microsoft com
cada elemento do documento XML. nela que so definidas as o objetivo de suprir as carncias apresentadas pelo padro DTD.
possveis propriedades de cada n de um documento XML como: Mesmo sendo lanado no mercado pouco tempo antes do XSD e
nome (name), tipo (type), atributos (attribute) e cardinalidade apresentando diversas semelhanas com o mesmo, no teve gran-
(minOccurs, maxOccurs e occurs). Tendo identificado os ele- de aceitao do mercado. Inclusive, a prpria Microsoft indica o
mentos, preciso definir seu tipo. Este pode ser um tipo simples uso do padro aberto XSD;

Edio 101 SQL Magazine 31


Validando documentos XML atravs do XML Schema Definition

XSD (Xml Schema Definition): Padro recomendado pela W3C


(World Wide Web Consortium), orgo responsvel por criar e man- Nota do DevMan 4
ter padronizaes na WEB. O XSD veio como forma de contornar
as limitaes do DTD e teve uma forte aceitao no mercado. Vrias GML: O GML, acrnimo de General Markup Language, foi uma soluo para armazenamento de
linguagens de programao desde ento vm incorporando funcio- informaes desenvolvido pela IBM em meados dos anos 70.
nalidades que suportam o XSD em seus produtos. A estrutura bsica
de um documento XSD apresentada na Listagem 3. Observe que
obrigatrio o uso do elemento schema como forma de declarar Listagem 3. Estrutura bsica XSD
que o documento em questo um XSD.
<?xml version=1.0 ?>
<schema>
Listagem 1. Exemplo de XML Schema <!Declaraes, Delementos, Atributos ETC.-->
</schema>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema
elementFormDefault=qualified>
<xs:element name=curriculo> Este artigo ser totalmente baseado no padro aberto XML
<xs:complexType>
<xs:sequence>
Schema Definition.
<xs:element ref=dadosPessoais/>
</xs:sequence>
</xs:complexType>
Alm da boa formao
</xs:element> Um arquivo de validao baseado no padro XML Schema Defi-
<xs:element name=dadosPessoais> nition em suma um arquivo XML. Portanto, a grande vantagem
<xs:complexType>
<xs:sequence> que no ser necessrio que o desenvolvedor despenda tempo
<xs:element name=nome type=xs:string/> para aprender uma nova linguagem de programao, pois os
<xs:element name=dataNascimento type=xs:date/>
<xs:element name=nacionalidade type=xs:string/>
documentos XSD sero desenvolvidos com a sintaxe XML.
<xs:element ref=endereco maxOccurs=unbounded/> Como se sabe, os documentos XML devem obedecer algumas re-
</xs:sequence> gras bsicas para serem considerados bem formados (ver Tabela 1),
</xs:complexType>
</xs:element> porm quando um documento XSD referenciado como agente
<xs:element name=endereco> validador da estrutura deste documento XML, ele ter de ser alm
<xs:complexType>
<xs:sequence> de bem formado, um documento tipado (typed XML), ou seja,
<xs:element name=rua type=xs:string/> ele dever obedecer a estrutura XSD que a ele foi referenciada.
<xs:element name=complemento type=xs:string/>
<xs:element name=bairro type=xs:string/>
Quando um documento no segue tais estruturas dito que este
<xs:element name=cidade type=xs:string/> um documento no tipado (untyped XML).
<xs:element name=estado type=xs:string/>
<xs:element name=pais type=xs:string/>
O documento XML deve comear com uma declarao XML:
</xs:sequence>
<xs:attribute name=tipo use=required type=xs:string/> <?xml version=1.0?>.
</xs:complexType> Existe diferenciao entre caracteres maisculos e minsculos (case-sensitive).
</xs:element> Todas as tags que foram abertas devem ser fechadas;
</xs:schema>
Elementos vazios podem ser especificados atravs de uma barra no final da
Listagem 2. Documento XML declarao da tag. Por exemplo: <Nome/>;
A hierarquia deve ser respeitada. Os elementos que foram abertos devem ser
<curriculo> fechados na ordem adequada.
<dadosPessoais>
Atributos devem ser envoltos com aspas duplas. Atributo = Texto.
<nome>Fabio Nascimento</nome>
<dataNascimento>22/07/1973</dataNascimento> Tabela 1. Regras dos documentos bem formados
<nacionalidade>Brasileira</nacionalidade>
<endereco tipo=residencial>
<rua>Candido Mendes </rua> Namespaces
<complemento7></complemento>
<bairro>Centro</bairro>
Namespaces so containers para utilizao de nomes. Como j
<cidade>So Paulo</cidade> se sabe, o XML um padro extremamente flexvel, sendo comum
<estado>SP</estado>
encontrarmos tags com o mesmo nome, mas que signifiquem
<pais>Brasil</pais>
</endereco> coisas diferentes e sejam formadas por tipos de dados diferentes.
<endereco tipo=profissional> Para solucionar este problema de conflito nos nomes das tags
<rua></rua>
<complemento></complemento> usamos os namespaces.
<bairro>Centro</bairro> Por recomendao da W3C os namespaces devem ser definidos
<cidade>So Paulo</cidade>
<estado>SP</estado>
atravs de uma URL. Esta declarao serve apenas como demons-
<pais>Brasil</pais> trao de unicidade do namespace, e no necessariamente deve
</endereco>
existir. Um exemplo de documento XSD com o uso de namespace
</dadosPessoais>
</curriculo> apresentando na Listagem 4.

32 SQL Magazine Edio 101


Para definir o nome do namespace que ser usado, declaramos o attribute. Ela tambm possui alguns atributos que podem ser
atributo xmlns. Como possvel declarar mais que namespace declarados em conjunto com a tag:
por documento XSD, comum fazermos o uso de prefixos, que name: nome do atributo;
atuam como alias do namespace, podendo apenas um namespace type: tipo de dados que o atributo ir armazenar;
no possuir esse alias declarado explicitamente, e a este damos o use: forma de utilizao do atributo. Ao declarar um atributo
nome de namespace default. Em todos os exemplos nosso prefixo ele poder ter seu uso obrigatrio (required), opcional (optional)
ser o xs. ou proibido;
No SQL Server fazemos uso de algumas views de sistema para
visualizar quais os namespaces existentes e quais os tipos fazem Um exemplo de declarao de atributo apresentado na
parte de seu escopo, bem como outras informas relativas ao Listagem 6.
XML Schema. A query necessria para obter estas informaes
apresentanda na Listagem 5. Elementos complexos
Comumente torna-se necessrio criar elementos compostos,
Declarando elementos ou seja, elementos declarados de forma hierrquica. Para que
Em um documento XML Schema a declarao de elementos esse tipo de declarao possa ser feita, faremos o uso da tag
feita atravs da tag element. Esta tag possui alguns atributos complexType, que determina que o elemento ser composto
que podem ser usados em conjunto com a tag. por outros. Para que este tipo de elemento seja declarado,
name: nome do elemento; tambm ser necessrio o uso de um dos indicadores de or-
type: tipo de dados que o elemento ir armazenar; dem. Um exemplo da estrutura bsica do documento usando
minOccurs/MaxOccurs: Nmero mnimo e mximo, respectiva- o complexType (Listagem 7).
mente, de vezes que ser permitida a declarao deste elemento.
Quando no houver um nmero mximo utilizaremos o parme- Indicadores de Ordem
tro unbounded. Indicadores de ordem so usados para explicitar de que maneira
Um exemplo de declarao de elemento apresentado na os elementos devero ser declarados no documento XML que ser
Listagem 6. validado. Para isto, contamos com trs conectores de ordem:
sequence: Todos os elementos envoltos por este conector devero
ser declarados exatamente na mesma ordem que foram criados
Listagem 4. Exemplo Namespace XSD no documento XSD;
<?xml version=1.0?> choice: Somente um dos elementos envolto por este conector
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> poder ser escolhido;
<!-- O link acima est atuando como namespace, de onde sero all: No importa a ordem que os elementos se encontrem no
usados os tipos de dados-->
</xs:schema> arquivo XML, contanto que todos os elementos envoltos por este
conector sejam declarados.
Listagem 5. Views de sistema para listar namespaces e tipos de dados

SELECT Um exemplo de cada uma destes conectores apresentado na


XSN.NAME AS NAMESPACE, Listagem 8. Perceba que inicialmente definimos que deveremos
XST.NAME AS DADP,
XST.DERIVATION_DESC AS DEVIVACAO,
escolher entre preencher CPF ou CNPJ. exatamente isso que
XST.KIND_DESC AS TIPO fazemos ao utilizar o choice neste exemplo. Em seguida, definimos
FROM SYS.XML_SCHEMA_NAMESPACES XSN que independente da ordem em que sejam definidos, os elemen-
INNER JOIN SYS.XML_SCHEMA_TYPES XST
ON XSN.XML_COLLECTION_ID = XST.XML_COLLECTION_ID AND tos rua e numero devero estar presentes no arquivo atravs do
XSN.XML_NAMESPACE_ID = XST.XML_NAMESPACE_ID conector all. Por fim, fazendo uso do conector sequence, definimos
WHERE XSN.NAME = http://www.w3.org/2001/XMLSchema que as informaes nome e sobrenome devero ser preenchidas, e
Listagem 6. Declarao de elementos e atributos preenchidas nesta sequncia.

<!--Declarao de elementos-->
<xs:element name=descricao type=xs:string minOccurs=1
Tipos de dados
maxOccurs=unbounded /> Como j sabemos, umas das grandes vantagens do xml schema
sobre seu antecessor a possibilidade de atribuir o tipo de dado
<!--Declarao de atributos-->
<xs:attribute name=descricao type=xs:string use=required />
que cada elemento/atributo dever receber. Basicamente, existem
dois tipos de dados que devemos conhecer:
P rimitivos (primitive datatypes): Os tipos de dados primitivos
Declarando atributos so aqueles que esto presentes na maior parte das linguagens
Em um documento XML tambm existe a possibilidade de de programao. Uma listagem dos principais tipos de dados
se trabalhar com atributos que so declarados atravs da tag primitivos mostrada na Tabela 2.

Edio 101 SQL Magazine 33


Validando documentos XML atravs do XML Schema Definition

Tipo Descrio
String Usado para representar uma cadeia de caracteres.
Boolean Usado para representar um valor booleano (Verdadeiro ou Falso)
Decimal Usado para representar um valor decimal.
Float Usado para representar um valor de ponto flutuante, usando 32 bits.
Double Usado para representar um valor de ponto flutuante, usando 64 bits.
Time Usado para representar um horrio especfico em um dia qualquer (HH:MM:SS). Poder usar o fuso horrio de forma opcional.
Date Usado para representar uma data no calendrio gregoriano. YYYY-MM-DD. Poder usar o fuso horrio de forma opcional.
Usado para representar um instante especfico no calendrio gregoriano. YYYY-MM-DDTHH:MM:SS, onde T atua como separador entre a data e o
dateTime
horrio. Poder usar o fuso horrio de forma opcional.
Tabela 2. Dados Primitivos

Faceta Descrio Derivados: Uma das caractersticas do XSD a possibilidade de


Length Comprimento de um dado. criar tipos de dados, ou seja, expandi-los para que atendam suas
minLength Nmero mnimo de caracteres aceito. necessidades. A esta categoria chamamos dados derivados. Abai-
maxLength Nmero mximo de caracteres aceito. xo temos uma explicao dos dois principais tipos de derivao:
Pattern Possibilita o uso de expresses regulares.
Restrio e Extenso, esse que por sua vez se divide em extenso
Enumeration Define uma lista de valores possveis a serem atribudos.
por lista e extenso por unio. Vejamos a seguir:
totalDigits Nmero mximo de dgitos aceitos, contando a parte decimal.
- Restrio: Uma srie de restries pode ser feitas nos tipos de
fractionDigits Nmero mximo de casas decimais permitidas.
dados primitivos, possibilitando assim, a criao de novos tipos
whiteSpace Espaos em branco.
minInclusive Valor mnimo aceito, considerando o valor explicitado.
que sero usados para fins especficos. As restries so feitas
minExclusive Valor mnimo aceito, desconsiderando o valor explicitado. atravs das chamadas facetas de restrio, que nada mais so que
maxInclusive Valor mximo aceito, considerando o valor explicitado. atributos pr-existentes que restringem de algum modo o valor que
maxExclusive Valor mximo aceito, desconsiderando o explicitado. ser considerado vlido no atributo/elemento. Para fazer uso das
facetas de restrio devemos especificar um dado do tipo primitivo
Tabela 3. Principais facetas de restrio
que servir como base para o novo dado. Para isso utilizaremos o
elemento restriction e o atributo base. Uma lista das principais
Listagem 7. Declarao bsica de um elemento complexo facetas de restrio apresentada na Tabela 3.
<xs:element name=dados>
<xs:complexType> Na Listagem 9 apresentado um exemplo do uso das principais
</xs:complexType> facetas de restrio. Nesta listagem trabalhamos com enumerao,
</xs:element>
tamanho mnimo e mximo de caracteres aceitos, formato de
Listagem 8. Uso dos indicadores de ordem nmero vlido, restrio de casas decimais e definio de valor
inteiro positivo.
<!-- Uso do conector CHOICE-->
<xs:element name=Documento> Perceba que inicialmente definimos que o tipo estado poder assu-
<xs:complexType> mir um dos seguintes valores: RJ, SP ou MG. Depois disto, indica-
<xs:choice>
mos os tamanhos mnimo (2) e mximo (10) que o tipo nome dever
<xs:element name=cpf type=xs:string />
<xs:element name=cnpj type=xs:string /> possuir. Dando prosseguimento, restringimos o formato do nmero
</xs:choice> de telefone vlido. Ainda nesta listagem, ainda definimos que o tipo
</xs:complexType>
</xs:element>
valor aceitar casas decimais sendo que os dgitos fracionais no
<!-- Uso do conector all--> podero exceder duas casas decimais. Por fim, definimos o tipo
<xs:element name=endereco> intPositivo que somente poder receber valores de 0 para cima.
<xs:complexType>
<xs:all> - Extenso por lista: Semelhante utilizao de um vetor em
<xs:element name=rua type=xs:string /> linguagens de programao, permite criar uma lista de variveis
<xs:element name=numero type=xs:string /> de um determinado tipo. Para isto, utilizaremos o elemento
</xs:all>
</xs:complexType> list e o atributo itemType. Um exemplo de seu uso apre-
</xs:element> sentado na Listagem 10. Nesta listagem definimos um vetor
<!-- Uso do conector sequence-->
de dados do tipo data.
<xs:element name=nome>
<xs:complexType> - Extenso por unio: Cria um novo tipo de dado, usando como
<xs:all> fator restritivo os valores aceitos por seu tipo base. Para isto, uti-
<xs:element name=nome type=xs:string />
lizaremos o elemento membersTypes e o atributo union. Um
<xs:element name=sobrenome type=xs:string />
</xs:all> exemplo apresentando na Listagem 11. Nele a tag produto
</xs:complexType> considera como vlido dados do tipo inteiro, que seria um cdigo do
</xs:element>
produto; ou do tipo string, que representando o nome do produto.

34 SQL Magazine Edio 101


Listagem 9. Exemplo extenso por restrio SQL Server - XML Schema Collection
Com o tempo o XML deixou de ser visto apenas como uma
<!-- Uso de facetas de Restrio-->
camada de transporte de informaes, mas tambm passou a
<!-- Enumeration -->
<xs:simpleType name=estados>
ser utilizado como uma camada de persistncia de dados, tanto
<xs:restriction base=xs:string> que os maiores players de bancos de dados como Oracle, IBM
<xs:enumeration value=SP /> e Microsoft logo passaram a fornecer suporte a este padro em
<xs:enumeration value=RJ /> suas ferramentas.
<xs:enumeration value=MG />
Para que possamos armazenar os dados no formato XML de
</xs:restriction>
</xs:simpleType> forma consistente, devemos utilizar um mecanismo de validao
<!-- Tamanho mnimo e mximo de caracteres aceitos--> que garanta tal solidez. O mecanismo em questo, tema deste
<xs:simpleType name=nome> artigo, j foi explicado e conceituado.
<xs:restriction base=xs:string>
Um XML Schema collection nada mais que o nome dado a um
<xs:minLength value=2 />
<xs:maxLength value=10/>
documento XML Schema armazenado diretamente em banco e
</xs:restriction> dados SQL Server, e disponvel para ser utilizado quando se precisa
</xs:simpleType> persistir documentos/fragmentes XML em tabelas ou variveis.
<!-- Formato do nmero de telefone valido--> Um exemplo de criao de um XML Schema Collection de-
<xs:simpleType name=fone>
monstrado na Listagem 12.
<xs:restriction base=xs:string>
<xs:pattern value=[0-9]{4}(-[0-9]{4})?/>
</xs:restriction>
</xs:simpleType> Listagem 12. Exemplo XML Schema Collection
<!--Restringir casas decimais-->
<xs:simpleType name=valor> CREATE XML SCHEMA COLLECTION A AS
<?xml version=1.0?>
<xs:restriction base=xs:decimal>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema >
<xs:minInclusive value=7 />
<xs:fractionDigits value=2 /> </xs:schema>
</xs:restriction>
</xs:simpleType>
<!-- Valor inteiro positivo-->
<xs:simpleType name=intPositivo>
<xs:restriction base=xs:integer>
<xs:minInclusive value=0 />
</xs:restriction>
</xs:simpleType>
Tutorial
Listagem 10. Exemplo extenso por lista

<?xml version=1.0 ?>


<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> Aplicando a teoria
<xs:simpleType name=datas> Para fixarmos melhor todos esses novos termos, siglas e funes
<xs:list itemType=xs:date/>
do universo XML Schema, vamos aplic-los para solucionar um
</xs:simpleType>
<xs:element name=lista type=datas /> problema real.
</xs:schema> Cenrio: Voc acaba de ser contratado para trabalhar na rea
<!--Exemplo de fragmento XML vlido-->
de integrao de uma conceituada software house. Esta uma
<lista>1989-01-01 1990-12-10 2012-04-23</lista>
rea nova na empresa e voc tem a oportunidade de mostrar suas
Listagem 11. Exemplo extenso por unio habilidades recm adquiridas. Como projeto piloto, a empresa
<?xml version=1.0 ?>
realizar uma integrao entre seu software de mala direta e um
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> software de comrcio eletrnico. A princpio, apenas as infor-
maes sobre os clientes sero integradas. As informaes sero
<xs:simpleType name=tipo_produto>
<xs:union memberTypes=xs:integer xs:string/> transmitidas atravs de documentos XML, e cabe a voc elaborar
</xs:simpleType> o XML Schema para que essa troca de informaes possa ser
realizada da maneira correta.
<xs:element name=produto type=tipo_produto />
Vamos definir alguns padres que o documentos com os dados
</xs:schema> dos clientes dever seguir:
1. O nome e sobrenome podero ter at 30 caracteres;
<!--Exemplo de fragmento XML vlido-->
<produto>10</produto> 2. O telefone devera estar no formato XXXX-XXXX;
<produto>Revista SQL Magazine</produto> 3. Somente poder ser declarado um tipo de documento, ou CPF
ou RG;

Edio 101 SQL Magazine 35


Validando documentos XML atravs do XML Schema Definition

4. No sero aceitas pessoas com data de nascimento inferior a presente na Listagem 13. Execute todo o script para o ambiente
01/01/1900; possa ser criado. Perceba no script que inicialmente criamos um
5. No obrigatrio fornecer e-mail; tipo de dados chamado nomeRestrito onde o nmero mximo
6. Pode-se ter N e-mails; de caracteres aceito trinta. Depois, criamos um tipo de dados
7. Todas as tags devem obedecer ordem de criao do XSD; telefone, que faz uso de expresses regulares para estabelecer
8. O valor gasto na ltima compra do cliente deve possuir duas o formato adequado que o nmero de telefone dever seguir, no
casas decimais depois da vrgula e ser maior que zero. caso XXXX-XXXX. Nosso prximo passo criar um tipo de dados
Para este exemplo utilizaremos o Microsoft SQL Server 2008 e dataNasc onde a data mnima aceita 01/01/1990. Dando se-
suas funes nativas para criao, validao e armazenamento quencia a nosso esquema, criamos um tipo de dados valorGasto.
dos documentos XML Schema. Nele so aceitos apenas valores maiores ou iguais a zero e com
duas casas decimais. Feito isto, criamos um elemento raiz do
XSD de validaao tipo complexo dadosCliente, e todos os elementos dentro dele
O XML Schema que valida todas as nossas regras de negcio est devem obedecer a sequencia na qual foram criados. Depois disto,

Listagem 13. Modelo de validao das regras de negcio

CREATE DATABASE XSD_SQL_MAGAZINE <xs:complexType>


GO <xs:sequence>
USE XSD_SQL_MAGAZINE
GO <!- Usa o tipo de dados nomeRestrito para restringir os possiveis valores
CREATE XML SCHEMA COLLECTION SQL_Magazine AS atribuidos ao elemento nome -->
<?xml version=1.0 encoding=utf-8?>
<xs:schema xmlns:xs=http://www.w3.org/2001/XMLSchema> <xs:element name=nome type=nomeRestrito />

<!Cria um tipo de dados chamado nomeRestrito onde o nmero mximo de <!- Usa o tipo de dados telefone para restringir o formato do valor atribuido
caracteres aceito trinta. --> ao elemento telefone -->

<xs:simpleType name=nomeRestrito> <xs:element name=telefone type=telefone />


<xs:restriction base=xs:string>
<xs:maxLength value=30 /> <!- Cria um elemento complexo chamado documento, que somente
</xs:restriction> aceitar um dos dos dois elementos envoltos pelas tags xs:choice. Neste
</xs:simpleType> caso apenas ser aceito que seja declarado o elemento CPF ou RG. Caso
ambos sejam declarados um erro ser gerado. Define tambm que
<!Cria um tipo de dados telefone, que faz uso de Expresses regulares para obrigatrio a declarao do Elemento (minOccurs e MaxOccurs) -->
estabelecer o formato adequado que o nmero de telefone dever seguir, no caso
XXXX-XXXX --> <xs:element name=documento minOccurs=1 maxOccurs=1>
<xs:complexType>
<xs:simpleType name=telefone> <xs:choice>
<xs:restriction base=xs:string> <xs:element name=cpf type=xs:string />
<xs:pattern value=[0-9]{4}(-[0-9]{4})?/> <xs:element name=rg type=xs:string />
</xs:restriction> </xs:choice>
</xs:simpleType> </xs:complexType>
</xs:element>
<!-- Cria um tipo de dados dataNasc onde a data mnima aceita 01/01/1990. -->
<!- Usa o tipo de dados dataNasc para restringir o a data que ser atribuida
<xs:simpleType name=dataNasc> ao elemento dataNascimento-->
<xs:restriction base=xs:date>
<xs:minInclusive value=1900-01-01/> <xs:element name =dataNascimento type=dataNasc />
</xs:restriction>
</xs:simpleType> <!- Permite que sejam declarado nenhum ou infinitos elementos do tipo
email (maxOccurs = unbounded) -->
<!-- Cria um tipo de dados valorGasto, nele so aceitos apenas valores maiores ou
iguais a zero e com duas casas decimais. --> <xs:element name=email type=xs:string minOccurs=0
maxOccurs=unbounded />
<xs:simpleType name=valorGasto>
<xs:restriction base=xs:decimal> <!- Usa o tipo de dados valorGasto que no permite que valores negativos
<xs:fractionDigits value=2 /> sejam atribuidos ao elemento e que o valor deva possuir duas casas decimais-->
<xs:minInclusive value=0 />
</xs:restriction> <xs:element name=ultimaCompra type=valorGasto />
</xs:simpleType> </xs:sequence>
</xs:complexType>
<!-- Cria um elemento raiz do tipo complexo dadosCliente, e todos os elementos </xs:element>
dentro dele devem obedecer a sequencia na qual foram criados -->
</xs:schema>
<xs:element name=dadoscliente>

36 SQL Magazine Edio 101


usamos o tipo de dados nomeRestrito para restringir os possveis dado do tipo valorGasto que dentre outras restries aceita
valores atribudos ao elemento nome e usamos o tipo de dados zero como sendo seu mnimo. Por existir violao das restries
telefone para restringir o formato do valor atribudo ao elemento do dado um erro gerado.
telefone. A segunda varivel declarada (@xml_Telefone) no respeita o
Ainda neste esquema, criamos um elemento complexo chama- padro imposto pela expresso regular atribuda ao tipo de dados
do documento, que somente aceitar um dos dois elementos telefone, em que o nmero do telefone deve seguir o formato
envoltos pelas tags xs:choice. Neste caso, apenas ser aceito XXXX-XXXX. Portanto, um erro gerado.
que seja declarado o elemento CPF ou RG. Caso ambos sejam
declarados um erro ser gerado. Este trecho define tambm
Listagem 15. Forando Erros
que obrigatria a declarao do Elemento (minOccurs e
MaxOccurs). <!-- Valor negativo no elemento ultimaCompra -->
Por fim, usamos o tipo de dados dataNasc para restringir o a declare @xml xml(SQL_Magazine)=
<dadoscliente>
data que ser atribuda ao elemento dataNascimento. Alm disso,
<nome>Dhiego Piroto</nome>
definimos que ser permitido que sejam declarados nenhum ou <telefone>9876-5432</telefone>
infinitos elementos do tipo email (maxOccurs = unbounded) e, <documento>
usamos o tipo de dados valorGasto que no permite que valores <rg>12345678</rg>
</documento>
negativos sejam atribudos ao elemento e que o valor deva possuir
<dataNascimento>1989-01-11</dataNascimento>
duas casas decimais. <email>email1@email.com</email>
<email>email2@web.com.br</email>
Referenciando o XSD no XML <ultimaCompra>-1000.01</ultimaCompra>
No SQL Server possumos um tipo de dados nativo para </dadoscliente>

trabalhar com documentos XML. Vamos fazer uso deste tipo


<!-- Nmero de telefone no formato incorreto -->
de dado para nos ajudar com a validao dos documentos declare @xml xml(SQL_Magazine)=
XML. Na Listagem 14 criada uma varivel do tipo XML <dadoscliente>
que ir receber o contedo de um documento e o validar. A <nome>Dhiego Piroto</nome>
validao se dar atravs da explicitao do nome do XML <telefone>(11)9876-5432</telefone>
<documento>
Schema Collection aps a declarao do tipo de dados XML <rg>12345678</rg>
e entre parnteses. </documento>
O documento XML que inserido na varivel segue os padres <dataNascimento>1989-01-11</dataNascimento>
do XSD, portanto, vlido. <email>email1@email.com</email>
<email>email2@web.com.br</email>
<ultimaCompra>1000.01</ultimaCompra>
</dadoscliente>
Listagem 14. Declarao do tipo de dados XML

declare @xml xml(SQL_Magazine)= <!-- Declarando dois tipos de documentos -->


<dadoscliente> declare @xml xml(SQL_Magazine)=
<nome>Dhiego Piroto</nome> <dadoscliente>
<telefone>9876-5432</telefone> <nome>Dhiego Piroto</nome>
<documento> <telefone>9876-5432</telefone>
<rg>12345678</rg> <documento>
</documento> <rg>12345678</rg>
<dataNascimento>1989-01-11</dataNascimento>
<cpf>987654567</cpf>
<email>email1@email.com</email>
</documento>
<email>email2@web.com.br</email>
<ultimaCompra>1000.01</ultimaCompra> <dataNascimento>1989-01-11</dataNascimento>
</dadoscliente> <email>email1@email.com</email>
<email>email2@web.com.br</email>
<ultimaCompra>1000.01</ultimaCompra>

Forando erros </dadoscliente>

At aqui tudo bem, estamos pressupondo que o mundo


perfeito e que nunca o cliente ir enviar o XML no formato
incorreto. Para nos habituarmos com possveis mensagens de
erro, a Listagem 15 declarara alguns elementos que violam as
regras contidas no Xml Schema.
A primeira varivel declarada (@xml_Negativo) recebe um
documento XML que atribui ao elemento ultimaCompra um
valor negativo. Vale lembrar que a este elemento atribudo um Figura 1. Mensagens de erro de validao

Edio 101 SQL Magazine 37


Validando documentos XML atravs do XML Schema Definition

A terceira varivel (@xml_Documentos) viola o indicador de Dhiego Piroto


ordem choice, que exige que apenas um nico tipo de docu- e-mail: dhiegopiroto@gmail.com
mento seja declarado (CPF ou RG). Como ambos elementos so twitter: @dhiegopiroto
declarados um erro gerado. Graduando em Sistemas de Informao pela Universidade Paulista
Os erros gerados so apresentados na Figura 1. - Tatuap. Atua h quatro anos na rea de TI, apoiado na tecnologia de
banco de dados SQL Server 2005,2008 e 2008 R2. Possui o ttulo de MCP
e MCTS Microsoft SQL Server e membro ativo da comunidade MSDN SQL Server.
Concluso
Neste artigo foram abordadas as principais funcionalidades do
XML schema, suas aplicabilidades e vantagens. Ainda existem Rodrigo Oliveira Spnola
muitas outras caractersticas que no puderam ser abordadas, rodrigo.devmedia@gmail.com
como por exemplo: herana, constraints (unique, primary key, Editor Chefe SQL Magazine | WebMobile | Engenharia de
foreign key) dentre outras que nos permitiro construir meca- Software Magazine
nismos de validao de documentos XML altamente complexos
e poderosos.
Por se tratar de uma tecnologia altamente utilizada no mercado,
torna-se obrigatrio, por parte do profissional de banco de dados, W3C: Site oficial do World Wide Web Consortium
um conhecimento mnimo acerca dos recursos fornecidos pelo
http://www.w3.org/standards/xml/
XML schema. PlugMaster
Para quem se interessar em saber mais sobre este importantssi- http://www.plugmasters.com.br/sys/colunistas/145/Gustavo-Maia-Aguiar
mo recurso de validao de arquivos, sugiro que faa uma leitura
XML Editora: Novatec ISBN: 8585184868
no contedo disponibilizado atravs dos links de referncia.
XML Schema
D seu feedback sobre esta edio! eu
Feedback http://www.w3.org/XML/Schema
s
D

A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que XML Schema
sobre e

voc, leitor, acha da revista! http://www.w3schools.com/schema/schema_intro.asp


s

ta
edio

D seu voto sobre este artigo, atravs do link: Riscos - Engenharia de Software: Um framework para gesto de riscos
www.devmedia.com.br/sqlmagazine/feedback em projetos de software ISBN: 9788573937855 Marcelo Nogueira

38 SQL Magazine Edio 101


Edio 101 SQL Magazine 39
Banco de Dados/Persistncia Nesta seo voc encontra artigos banco de dados, SQL ou persistncia

Obtendo melhor
desempenho no
servidor SQL Server
Melhores prticas na configurao de servidores
de bancos de dados usando SQL Server

U Resumo DevMan
ma das situaes mais corriqueiras na vida de
um DBA a absoro de um novo servidor para
seu ambiente de administrao. Este momento De que se trata o artigo:
pode ocorrer quando o profissional inicia um novo tra- O artigo aborda as melhores prticas aplicadas s configuraes do
balho em uma nova empresa, onde ele precisa conhecer sistema operacional Windows Server para que este fornea o melhor
e absorver a responsabilidade sobre todo o ambiente da desempenho possvel a uma plataforma de banco de dados implantada
organizao e entender quais as atividades realizadas atravs do SQL Server.
dentro dele (atividades de negcio ou mesmo tarefas
administrativas). Outro momento em que esta situao Em que situao o tema til:
pode ocorrer durante uma expanso do parque tecno- Este artigo til aos profissionais, sejam eles responsveis pelos bancos
lgico de servidores da empresa, causada por aquisies de dados ou mesmo pelos sistemas operacionais, que lidam com a confi-
ou implantaes de novas mquinas. gurao e implantao de ambientes de banco de dados nas plataformas
Os novos servidores podem ser entregues para que o Windows Server e SQL Server.
prprio DBA os ajuste conforme suas necessidades ou
j venham previamente configurados pelo fornecedor, Obtendo melhor desempenho no servidor SQL Server:
deixando assim a cargo do DBA a tarefa de verificao O artigo apresentar algumas das melhores prticas a serem aplicadas
das configuraes j existentes, visando evitar qualquer nas configuraes de processador, memria, redes e disco junto ao sis-
ajuste indevido, que possa degradar o desempenho, a tema operacional para que este possa fornecer camada de banco de
segurana ou a disponibilidade do seu ambiente. dados todos os recursos presentes no ambiente de forma que atinjam o
Em ambas as situaes o profissional precisa manter mais alto desempenho.
seu enfoque na explorao do ambiente ou daquele ser- Estes ajustes so focados nas configuraes do sistema operacional Win-
vidor em especfico em busca da identificao de pontos dows Server, responsvel por suportar a plataforma de banco de dados
de melhoria e, principalmente, na descoberta de quais SQL Server, deixando-o apto a disponibilizar toda a condio para que o
melhores prticas so passveis de aplicao naquele ambiente atenda s necessidades de negcio da organizao.
cenrio. O DBA ainda precisa se atentar a questes do
sistema operacional, pois mesmo com o SQL Server
possuindo um sistema de gerenciamento independente,
como o SQLOS, ainda sofre influncia dos ajustes reali- entre si e influenciam no desempenho um do outro, fazendo com
zados no Windows. que cada elemento tenha sua prpria importncia. Este complexo
Um ambiente de banco de dados um sistema com- sistema composto pelo ambiente de banco de dados, pelos Jobs
plexo, composto por quatro elementos que interagem de manuteno das bases de dados, pela aplicao cliente que as

40 SQL Magazine Edio 101


acessa e pelas prprias bases de dados. Cada um destes compo- MER). Uma modelagem adequada e bem constituda, respeitando
nentes possui suas caractersticas e melhores prticas relaciona- as normas e melhores prticas, pode ser a chave principal para o
das, sendo possvel aplicar inmeras tcnicas para aperfeioar o bom funcionamento de uma aplicao de banco de dados, assim
desempenho do sistema. Podemos ilustrar a dependncia entre como uma modelagem inadequada pode prejudicar todo o ciclo
estes elementos por meio da Figura 1. de vida daquele sistema.
O SQL Server traz consigo diversos recursos que podem influen-
ciar tanto positivamente quanto negativamente no ambiente como
um todo. Tecnologias como particionamento de tabelas, disponvel
a partir da verso 2005, e os ndices filtrados, que chegaram com
a verso 2008, podem ajudar no desempenho do banco de dados
se forem bem empregados.
Alm dos recursos da prpria plataforma, algumas tcnicas
como a diviso dos dados e ndices em diferentes filegroups po-
dem ser muito teis caso sejam implantadas em paralelo com a
separao dos discos e com suas respectivas melhores prticas.
Neste artigo, analisaremos algumas das melhores prticas junto
ao primeiro componente deste complexo sistema: o ambiente de
banco de dados. Iremos abordar as melhores prticas relacionadas
configurao de um servidor de banco de dados, apresentando
alguns conceitos do sistema operacional e do prprio SQL Server,
explicando algumas configuraes a serem realizadas visando
melhor desempenho.

Figura 1. Os quatro elementos de um sistema de banco de dados

O ambiente de banco de dados refere-se ao sistema operacional,


ao sistema gerenciador de banco de dados e aos recursos de Tutorial
hardware presentes no ambiente, tal como dispositivos de ar-
mazenamento, configurao dos discos, quantidade e tipo de
processadores, quantidade e velocidade da memria, entre outras Configurando o ambiente
caractersticas que do suporte ao funcionamento de toda a pla- Assim que um ambiente concebido ou absorvido, o DBA deve
taforma de banco de dados. realizar um breve check-up de algumas configuraes impor-
Os Jobs de manuteno so processos executados ou agenda- tantes que afetam o desempenho do SQL Server. Parte destas
dos pelo DBA com o objetivo de manter o desempenho do banco configuraes, presentes no sistema operacional, alteram alguns
de dados em um nvel compatvel com as exigncias de negcio comportamentos do ambiente como um todo e assim como qual-
da organizao. Visam tambm garantir que as bases de dados quer configurao possvel dentro de um sistema, possuem suas
estejam sempre em funcionamento adequado e operando em um melhores prticas, as quais sero abordadas aqui.
estado ntegro, ou seja, que no estejam apresentando falhas nos Antes de passarmos por estas configuraes, devemos sempre
nveis lgicos e fsicos da plataforma de banco de dados. nos atentar s consideraes de disponibilidade do ambiente,
A influncia das aplicaes cliente ocorre por meio dos cdigos pois alguns dos ajustes aqui apresentados exigem uma reini-
utilizados nelas para conexo e manipulao dos dados provindos cializao do sistema operacional para que sejam efetivamente
das bases de dados. A qualidade empregada no desenvolvimento aplicados.
e a aplicao das melhores tcnicas e prticas dentro destes c-
digos pode fazer a diferena no desempenho final do processo Discos rgidos
realizado pelo usurio, quando o dado exibido em formato de De todos os elementos de hardware envolvidos em um ambiente
informao. de banco de dados, no segredo algum que os discos rgidos
Quando abordamos as bases de dados propriamente ditas, fala- sejam, normalmente, os mais lentos e responsveis pela maioria
mos sobre as estruturas das tabelas, ndices e recursos adicionais dos gargalos existentes dentro de um sistema computacional. De-
da plataforma de banco de dados (em nosso caso, o SQL Server) vido a isso, existem diversas estratgias de configurao e prticas
para a criao e organizao interna dos dados. Qualquer base de recomendadas para que se possa obter o mximo de desempenho
dados possui seu desempenho diretamente ligado ao seu design, do subsistema de disco, evitando que haja qualquer prejuzo ao
ou seja, sua modelagem entidade-relacionamento (a famosa desempenho do ambiente como um todo.

Edio 101 SQL Magazine 41


Obtendo melhor desempenho no servidor SQL Server

To grande a quantidade de equipamentos envolvidos junto ao O SQL Server opera internamente em leituras e escritas base-
subsistema de disco (HBA, Switches, Bandas de rede, Cache das adas em blocos de tamanho igual a 64KB, o que significa que
controladoras e dos discos, etc.) e tal o tamanho da importncia quando a unidade de disco utiliza o cluster size com o tamanho
e responsabilidade sobre uma configurao otimizada em um diferente deste, o SQL Server pode enviar uma solicitao de
ambiente de banco de dados, que para muitos, realizar esta ativi- escrita de 64KB e o sistema operacional pode no encontrar a
dade de configurao adequadamente pode ser considerada uma quantidade necessria de blocos sequenciais para fazer a ope-
cincia, ou mesmo uma arte. rao, o que resultaria na diviso do bloco lgico enviado pelo
Com a utilizao de Redes de rea de Armazenamento, o fa- SQL Server em diversos blocos fsicos espalhados pela LUN,
moso Storage (tambm conhecido como SAN, sigla para Storage causando assim a fragmentao do disco.
Area Network), os discos ganharam maior flexibilidade de con- Para evitar este problema, recomendado que a LUN seja
figurao e, consequentemente, mais possibilidades de aumento formatada usando o cluster size igual a 64KB. Desta forma, o
de desempenho. SQL Server e o sistema operacional trabalharo com o mesmo
Uma das principais tecnologias para se obter aumento de se- tamanho de bloco lgico, evitando que um bloco seja grava-
gurana e desempenho nos discos rgidos o RAID, o qual se do em diversas reas do disco, o que causaria fragmentao
baseia na configurao de discos para funcionarem em paralelo, naquela unidade, aumentando o esforo do subsistema de
dividindo assim a carga de escrita e leitura entre eles. disco em recuperar dados quando estes forem requisitados
Alm das recomendaes de RAID, as quais no fazem parte pelo SQL Server.
do escopo deste artigo, podemos citar duas configuraes im- Se o ambiente j estiver em produo e possuir suas unidades
portantes que muitas vezes passam despercebidas nos ambientes lgicas j configuradas com o Cluster Size padro de 4KB, a
de bancos de dados: cluster size e alinhamento das parties nica forma de realizar a correo com a formatao destas
de disco. unidades, o que nem sempre possvel devido mobilizao e
Uma configurao equivocada relacionada aos discos rgidos indisponibilidade que isso causa junto ao servidor.
pode causar sensvel perda de desempenho, e mesmo um admi- Existem diversas formas de se verificar o Cluster Size de
nistrador experiente pode dar menos importncia do que deveria uma unidade lgica. Para simplificar, podemos utilizar a ma-
a estas opes. frequentemente comentado que o ajuste delas neira mais simples e prtica delas: atravs de uma consulta s
mais importante para servidores que executam o Microsoft propriedades de um arquivo qualquer gravado no disco a ser
Exchange, mas a realidade que o fino ajuste dos discos rgidos, avaliado.
indiferentemente da configurao a ser aplicada, essencial a Para verificar o tamanho do cluster size utilizando este mtodo,
qualquer ambiente que exija alto desempenho. basta criar um arquivo qualquer (neste exemplo, usaremos um
txt) no disco em questo, preench-lo com a quantidade mnima
Cluster Size (Partio de dados) de informao (uma letra ou palavra qualquer) e salv-lo nova-
O Cluster Size, ou Unidade de Alocao de Arquivo, o tamanho mente. Agora voc pode verificar o tamanho consumido em disco
do bloco de escrita e leitura lgica que uma determinada unidade por aquele arquivo consultando suas propriedades. A Figura 2
de disco ir gerenciar. Por padro, quando criamos uma LUN exemplifica uma unidade lgica que est configurada com o
(ver Nota DevMan 1), definido que as parties de dados da cluster size igual a 4KB.
unidade possuiro tamanho equivalente a 4KB, o que para uma
LUN dedicada ao armazenamento de arquivos uma boa opo,
porm, para servidores de bancos de dados que utilizam o SQL
Server como SGBD, pode ser um problema.

Nota do DevMan 1
Logical Unit Number: Logical Unit Number, ou nmero lgico de unidade, o acrnimo para um
grupo de n discos fsicos configurados para serem apresentados como uma nica unidade lgica ao
sistema operacional.

Utilizar um Cluster Size de 4KB para os arquivos de dados de


um banco de dados pode aumentar a probabilidade de seu dis-
co sofrer com problemas de fragmentao, o que far com que
seu desempenho seja reduzido gradativamente ao longo de sua
utilizao. Figura 2. Verificando a configurao do Cluster Size de uma unidade lgica

42 SQL Magazine Edio 101


Reparem na propriedade Tamanho em disco. O valor apresen- Alinhamento das Parties de Disco
tado para o arquivo de 4KB, significando que o cluster size Uma importante configurao no subsistema de disco o
deste disco est configurado com este valor. Agora observemos alinhamento das parties. Internamente, cada disco rgido
atravs da Figura 3 outra unidade lgica, j formatada adequa- dividido em alguns componentes, tais como: pratos, trilhas,
damente com o Cluster Size igual a 64KB. clusters e setores. A Figura 5 exibe uma viso simplificada
Note que o arquivo gerado possui 64KB de espao em disco, dessa estrutura.
o que significa que ele ocupa um bloco inteiro de informao Adicionalmente aos quatro componentes de um disco rgido
dentro daquela unidade lgica. Esta informao indica que o presentes neste escopo, possumos as faixas de dados, que cor-
cluster size est configurado adequadamente, ou seja, equiva- respondem quantidade de dados destinada a cada disco dentro
lente a 64KB, para abrigar os arquivos de dados de um banco uma configurao RAID.
de dados SQL Server. Cada disco rgido traz consigo uma reserva inicial de 63 setores
que no podem ser sobrescritos. Estes setores so usados para o
armazenamento de dados referentes inicializao do prprio
equipamento e so lidos todas as vezes que o sistema operacional
estiver reconhecendo o prprio disco rgido, o que pode ocorrer
quando ligamos ou reiniciamos o servidor.

Figura 3. Verificando a configurao do Cluster Size de uma unidade lgica

Para fazer esta modificao, devemos primeiro assegurar que


no h dados gravados nesta unidade de disco, pois se houver
eles sero perdidos com a formatao da unidade.
Podemos realizar esta alterao atravs da interface de geren- Figura 5. Composio de um disco rgido
ciamento de discos, que pode ser acessada clicando com o boto
direito em Meu Computador, em seguida escolhendo a opo Devido a esta reserva, quando iniciamos o armazenamento
Gerenciar e finalmente abrir a aba Gerenciamento de Discos, assim de nossos dados dentro um disco novo, estamos localizando-os
como a Figura 4 indica. a partir do primeiro setor disponvel e subsequente a reserva
dos 63 setores. Ao armazenar uma determinada quantidade de
dados, suficiente para completar uma faixa de dados, iniciamos
a utilizao da segunda faixa disponvel dentro daquele disco, e
assim sucessivamente at completarmos o disco.
Quando inserimos uma quantidade de dados em uma faixa,
possvel que estes no completem inteiramente a faixa de dados
onde esto sendo inseridos, deixando espaos livres para outras
operaes de escrita. Ao permitir que isso acontea, podemos criar
situaes em que os dados que completaro aquela faixa no sejam
do tamanho exato para o espao que ficou disponvel, fazendo
com que o sistema operacional inicie sua gravao naquela faixa
e termine em outro espao do disco.
Com os dados divididos entre duas faixas, o sistema
operacional e o subsistema de disco sero forados a realizar
Figura 4. Interface de gerenciamento de discos duas operaes de escrita ou leitura cada vez que aquela infor-

Edio 101 SQL Magazine 43


Obtendo melhor desempenho no servidor SQL Server

mao for solicitada, duplicando assim o esforo do ambiente Configuraes de Rede


para manipular tais dados. Dentre as configuraes do Windows, podemos encontrar di-
Para solucionar este problema, podemos alinhar as parties versos ajustes relacionados s interfaces de rede, porm, alguns
de disco ao iniciar o uso de um novo dispositivo. Fazendo este deles se sobressaem quando consideramos um servidor destinado
ajuste, configuramos o sistema operacional para reservar uma a armazenar bancos de dados, pois possuem maior impacto na
quantidade adicional, mltipla de dois, aos dados de inicializao transmisso de dados.
do disco rgido. Desta forma, ao invs de reservar 63 setores do Com esta seo, iremos apresentar as melhores prticas e os
disco, podemos solicitar que reserve um bloco inteiro, contendo 64 cuidados necessrios para se manipular estas configuraes no
setores, o que ir corrigir a gravao de um mesmo bloco de dados Windows, visando o mximo de desempenho em um ambiente
em duas faixas diferentes. de banco de dados.
A Figura 6 ilustra como o armazenamento de dados feito em
uma partio. A primeira linha (azul) ilustra a unidade de aloca- Configuraes de velocidade e fluxo das interfaces de rede
o, equivalente a 64KB, enquanto as outras duas linhas exibem Deve-se, sempre que possvel, configurar manualmente a veloci-
uma comparao entre uma partio no alinhada e uma partio dade das placas de rede do ambiente. Grande parte das interfaces
alinhada, respectivamente. de rede possui uma configurao padro associada a elas, o que
nem sempre adequado a um ambiente de banco de dados.
Para um melhor aproveitamento dos recursos, deve-se verificar
as configuraes das interfaces de rede e fazer os ajustes necess-
rios conforme a velocidade da rede em que elas esto conectadas,
levando-se em considerao os demais dispositivos (switch, HBAs,
Figura 6. Diferena entre discos alinhados e no-alinhados Roteadores, etc.). Este ajuste realizado visando a garantia de
que o equipamento funcione exatamente na banda de dados que
Repare que na segunda linha, os primeiros 63 setores, marca- suportada entre os dispositivos que fazem a comunicao entre
dos em amarelo, so utilizados pelo prprio disco, e o primeiro a rede da empresa e o servidor de bancos de dados.
setor a ser usado pelos dados da aplicao inicia-se no 64 setor, Para realizar este ajuste necessrio conhecimento a respeito da
o que faz com que o sistema operacional divida os demais clus- capacidade de transmisso dos componentes da rede, para que
ters de uma forma que no fiquem alinhados com os blocos de assim seja possvel ajustar a interface de rede com o valor mximo
leitura do SQL Server, causando uma leitura duplicada, pois para aqueles componentes como um todo, e no apenas para a
para um mesmo cluster (quadrado em verde) necessrio dois interface de rede como um nico equipamento da estrutura.
blocos de leitura, ou seja, duas operaes de I/O. Em paralelo configurao da velocidade de transmisso dos
J na terceira linha, indicamos ao gerenciador de disco que dados, recomendvel a configurao do fluxo de informaes
devemos iniciar o novo cluster no 65 cluster, deixando um que passam por aquela interface, deixando-a pronta para o fun-
inutilizado (quadrado em cinza), assim forando-o a alinhar os cionamento em ambos os sentidos e ajustando-a para que use
clusters junto aos blocos de leitura do SQL Server, evitando a toda sua capacidade conforme a demanda.
necessidade de operaes adicionais de I/O para a manipulao Desta forma, se houver maior fluxo de entrada de informao, a
do mesmo grupo de dados. interface de rede pode usar livremente sua capacidade para este
Para realizar esta configurao podemos empregar a ferra- recebimento, e caso haja maior fluxo de sada, ela pode aprovei-
menta diskpart.exe, que faz a manipulao e a configurao dos tar de todos os seus recursos para dar vazo a este envio, assim
discos dentro de um ambiente na plataforma Windows. Este utilizando de forma flexvel o equipamento. A Figura 7 ilustra a
utilitrio pode ser usado para desde a criao de uma nova par- configurao adequada.
tio, sua formatao, at a associao dela a uma determinada Repare que existem as opes Half Duplex e Full Duplex. Para
letra para ser exibida no sistema operacional. que seja utilizada toda a capacidade da interface de rede em
Atravs do comando create partition primary align = VALOR_ ambos os sentidos, necessrio que seja configurada a opo
EM_KB, que executado dentro do programa diskpart.exe, Full, evitando assim que a interface de rede limite o trfego de
possvel ajustar corretamente o alinhamento das parties, informao entre os dados que so enviados pela placa e aqueles
deixando-as na medida para evitar operaes duplicadas de que so recebidos por ela.
escrita e leitura. Referente velocidade, observe que na imagem so ilustradas duas
Esta operao duplicada pode prejudicar todo o subsistema configuraes possveis: 10Mbps e 100Mbps. Para qualquer am-
de disco do ambiente e, consequentemente, todo o ambiente biente produtivo, preciso que sejam observadas as especificaes
computacional, visto que para cada leitura requisitada pelo tcnicas dos demais equipamentos da rede, tais como switches, hubs
SQL Server, o disco pode ter de manipular dois setores, mes- e roteadores. Com base em seus requisitos, podemos identificar
mo que o SQL Server tenha pedido informaes equivalentes qual a capacidade mxima comum entre estes dispositivos e assim
a apenas um setor. configur-los para que usem uma banda de rede uniforme.

44 SQL Magazine Edio 101


Figura 7. Configurao de velocidade e fluxo das placas de rede

Gerenciamento de energia das interfaces de rede


Figura 8. Gerenciamento de energia da interface de rede
Uma importante configurao relacionada a uma interface de
rede presente em um servidor, no se limitando a mquinas
dedicadas a hospedagem de bancos de dados, o gerenciamento servidor. Atravs destes ajustes, podemos regular a prioridade de
de energia do equipamento. concesso de memria entre os programas aplicativos e o sistema
altamente indicado que seja verificada a configurao de operacional, assim como possvel ajustar o espao disponvel
economia de energia de todos os componentes de um servidor, para alocar aqueles dados que estavam em memria e no esto
especialmente as interfaces de rede, que possuem configuraes sendo mais acessados.
padres diferenciadas, podendo estar ajustadas de forma que o Atravs das prximas sesses, iremos apresentar duas confi-
sistema operacional as desligue em momentos de inatividade. guraes relacionadas memria que podem ser ajustadas com
Caso seja permitido o servidor desligar a placa de rede quando o objetivo de maximizar o desempenho do ambiente de banco
no houver uso dela, a interface ficar indisponvel para as primei- de dados.
ras requisies que forem feitas aps um perodo de inutilizao
do servidor. Estas primeiras solicitaes serviro para alertar o Configurao de privilgio no uso de memria
dispositivo que seu funcionamento est sendo requisitado. Esta configurao no est mais presente no Windows Server
Ao detectar a necessidade de utilizao da placa de rede, o 2008, mas como ainda grande a utilizao da verso 2003 do
Windows inicializa-o para que possa receber e enviar dados no- Windows Server, ainda deve ser mencionada. Esta opo alte-
vamente. Este restabelecimento pode demorar alguns instantes, ra o privilgio na utilizao da memria presente no sistema
pois o sistema operacional precisa verificar se os drivers ainda operacional, concedendo maior preferncia entre os elementos
esto carregados e se caso no estiverem, precisa providenciar da prpria plataforma e os programas de usurio, sejam estes de
isso em memria, visando deixar tudo em pleno funcionamento execuo em modo background ou front-end.
antes de liberar as conexes. O ajuste desta configurao realizado atravs de uma opo
A Figura 8 mostra a configurao adequada. Esta pode ser en- no prprio Windows e exige um restart do servidor para que seja
contrada nas propriedades da interface de rede. aplicada. Existem duas opes disponveis para o ajuste: Progra-
Observem na figura que esta opo j se encontra desabilitada, mas e Cache de Sistema.
ou seja, corretamente configurada para um servidor de banco de A primeira delas, Programas, prioriza a utilizao de memria
dados. recomendado que sejam verificadas todas as placas de por parte dos programas instalados (entre eles, o SQL Server) e
rede do servidor, visando evitar que no apenas o banco de dados d ao SGBD maior direito sobre o consumo de memria fsica
enfrente algum problema, mas sim o ambiente como um todo. do servidor.
A segunda configurao, Cache de Sistema, faz com que o pr-
Memria prio Windows tenha privilgio sobre a utilizao de memria,
Algumas configuraes do Windows influenciam na forma do podendo consumir maior quantidade e adquirir memria mais
sistema operacional trabalhar com a memria fsica presente no rapidamente do que as demais aplicaes.

Edio 101 SQL Magazine 45


Obtendo melhor desempenho no servidor SQL Server

Embora configurar esta opo como Programas possa parecer possvel, deve ser evitado. No entanto, mesmo com seu prejuzo
um risco, visto que ir aumentar a prioridade do SQL Server (in- referente performance do ambiente, mesmo que o servidor pos-
cluso nos programas de usurio) e reduzir este poder por parte sua quantidade de memria RAM suficiente para suportar a carga
do sistema operacional, ela no oferta riscos sade do sistema submetida a ele, o recomendado que seja configurado o arquivo de
do servidor, pois o Windows Server possui funcionalidades para paginao objetivando a preveno de qualquer possvel problema
gerenciar de forma eficiente este ajuste, visando no prejudicar as relacionado memria do servidor, tal como o estouro da memria
alocaes internas e essenciais ao seu funcionamento. (tambm conhecido pelo erro de out of memory).
A opo de prioridade de utilizao de memria pode ser veri- Um arquivo de paginao pequeno pode no ser suficiente para
ficada dando um clique com o boto direito no Meu Computador e prevenir sobrecargas de utilizao da memria, assim como um
depois um clique com o boto esquerdo em Propriedades. Quando arquivo muito extenso pode consumir grande espao em disco
a janela aparecer, deve-se procurar a aba Avanado, onde ter um e mascarar gargalos de memria no servidor. Para melhor confi-
boto chamado Configuraes, sob a rea intitulada de Desempe- gurao, existem duas boas prticas relacionadas ao arquivo de
nho. Clicando neste boto, uma nova janela aparecer, onde voc paginao: a primeira relacionada localizao do arquivo; e a
poder acessar a segunda aba, chamada Avanado. Ao acessar o segunda relacionada ao seu tamanho.
contedo desta aba, observe a segunda rea de opes, chamada A localizao do arquivo de paginao deve ser cuidadosamen-
de Uso da Memria. Nela haver duas caixas de marcao que te analisada, pois este arquivo, por padro, criado na mesma
definiro o ajuste desta configurao. A Figura 9 ilustra como unidade onde o sistema operacional est instalado (normalmente,
devemos proceder. na unidade C).
Esta configurao padro infringe as boas prticas relacionadas
ao armazenamento dos binrios do sistema operacional e demais
aplicativos, pois aumenta a movimentao dos dados dentro do
conjunto de discos que abriga o Windows, acarretando em maior
risco de falha no equipamento fsico, o que causaria a indisponi-
bilidade do sistema operacional.
A recomendao em torno de sua localizao aponta para
que seu armazenamento seja feito em um disco, de prefern-
cia, dedicado exclusivamente ao arquivo de paginao. Alm
de possibilitar a reduo de riscos no ambiente, colocar este
arquivo em um disco exclusivo pode mitigar suas limitaes
de desempenho, pois toda aquela unidade de disco estar
destinada apenas a gerenciar as operaes de escrita e leitura
do arquivo de paginao.
Quanto ao tamanho do arquivo de paginao, que por padro,
vem ajustado para ser flexvel conforme as necessidades do sis-
tema operacional, deve ser configurado manualmente. Deixar
que o tamanho deste arquivo seja manuseado unicamente pelo
Windows pode causar problemas de espao em disco. Para evitar
este problema, deve-se configurar o arquivo de paginao com
valores iniciais e monitor-lo por um breve perodo de tempo
para que seja avaliada uma possvel necessidade de aumento de
Figura 9. Configurao de prioridade do uso de memria seu tamanho ou mesmo de uma reduo.
Como configurao inicial, existem duas recomendaes. Am-
Arquivo de paginao bas baseadas na quantidade de memria RAM que o servidor
O arquivo de paginao uma ferramenta do Windows para possui.
preveno de problemas relacionados memria fsica e uma Se a mquina possuir menos de 8GB de memria RAM, reco-
forma de aliviar a utilizao dela quando necessrio. usado mendada a configurao do arquivo de paginao com o dobro
pelo sistema operacional para descarregar dados que esto em da quantidade de memria presente no servidor. A Figura 10
memria e coloc-los no disco rgido para que o prprio SO ou ilustra a configurao do Page File para um servidor que possui
demais aplicativos possam reutilizar aquele espao na memria 4GB de memria RAM.
fsica para alocao de outros dados. Caso a mquina possua mais de 8GB de memria RAM, o
A utilizao do arquivo de paginao pelo sistema operacional, recomendado que o arquivo de paginao seja ajustado com o
mesmo que para alvio da memria RAM, no um comporta- tamanho mximo de apenas 8GB; valor suficiente para possveis
mento desejado quando considerado o desempenho e, sempre que necessidades iniciais do ambiente.

46 SQL Magazine Edio 101


ciclo do processador. O quantum de um processador a quantidade
de microciclos que ele entrega sequencialmente a uma determinada
requisio antes de esta ser novamente colocada na fila de processa-
mento, liberando assim espao para outra thread ser processada.
Seguindo o mesmo caminho feito na configurao da prioridade
de utilizao da memria, podemos encontrar o local onde altera-
mos a configurao de agendamento do processador. Assim, na
mesma tela de configurao de memria, sob a rea Agendamento
do Processador, encontramos duas opes: Programas e Servios
em Segundo Plano.
A primeira delas configura a unidade lgica de processamento para
funcionar com um quantum de 4 microciclos, e a segunda opo ajus-
ta os processadores para funcionar com base em vinte microciclos.
A Figura 11 ilustra onde a configurao pode ser ajustada.

Figura 10. Configurao de Paging File.

Para um ambiente j existente, o recomendado que seja mo- Figura 11. Configurao de agendamento de processadores
nitorado o arquivo de paginao antes que seja feita qualquer
alterao no tamanho e localizao do mesmo. Se aps o acom- Ajustar os processadores com a primeira opo far com que eles
panhamento do ambiente for determinada a necessidade de uma fiquem ocupados com uma mesma thread por 4 unidades de tempo.
mudana, no podemos nos esquecer de tomar todos os cuidados Esta opo recomendada para mquinas de usurios por estas
necessrios, tais como procedimentos de backup, planos de retor- possurem diversos programas em execuo de forma simultnea.
no caso aconteam imprevistos e, claro, a obteno e utilizao Com este ajuste o processador pode trabalhar de forma mais din-
de uma janela de indisponibilidade adequada para a realizao mica, atendendo a pequenas requisies de forma mais eficiente.
desta mudana. Configurando esta opo para Background Services, indicamos
ao sistema operacional para trabalhar com um quantum de
Processamento 20 microciclos para os processadores, o que far com que um
Assim como as configuraes de memria, o sistema operacional mesmo processo seja executado mais rapidamente, porm, as
tambm possui alguns ajustes relacionados aos processadores, demais threads ficaro mais tempo aguardando. Esta configu-
onde podemos aplicar mudanas que trazem impactos ao desem- rao recomendada para servidores de bancos de dados, pois
penho do servidor. Estes ajustes definem pequenas alteraes na permite que o SQL Server utilize o poder de processamento do
operao interna do sistema operacional, pois alteram algumas servidor de uma forma mais eficiente.
particularidades de como os ncleos de processamento sero Esta configurao tambm reduz a quantidade de trocas de
utilizados pelas requisies enviadas a eles. contexto feita pelos processadores. Uma troca de contexto
Com esta seo, apresentaremos a principal opo relacionada a a ao executada por um processador quando ele necessita
processamento presente no sistema operacional Windows Server. descarregar uma thread de seu ncleo e alocar outra para
Esta configurao causa impacto no modo de funcionamento process-la. Este processo exige o carregamento de dados e
do ambiente como um todo, pois altera como sero alocados os instrues dentro dos registradores do CPU e consomem o
processos de usurio e de sistema dentro dos ncleos das CPUs. tempo de execuo deste.

Configurao de Agendamento do Processador Concluso


Similar opo de prioridade de memria, tambm existe uma Ter a devida considerao com cada elemento de hardware
opo do sistema operacional que ajusta o tamanho do quantum do presente no ambiente e sua respectiva configurao atravs do

Edio 101 SQL Magazine 47


Obtendo melhor desempenho no servidor SQL Server

sistema operacional traz ao administrador, seja dos bancos de Felipe de Assis


dados ou do prprio servidor, a responsabilidade de verificar fdassis@live.com
todos os possveis pontos de melhoria dentro daquele ambiente Felipe de Assis consultor e instrutor SQL Server em uma empresa
e ajustar cada um deles com a melhor configurao possvel. Para especializada em solues Microsoft, atua exclusivamente com SQL
isso, o profissional necessita do conhecimento terico, tcnico e Server h mais de trs anos e possui a certificao MCITP na administrao
prtico para entender, avaliar, justificar e aplicar as mudanas das verses 2005 e 2008, alm de ser MCTS no desenvolvimento de solu-
es de banco de dados usando a verso 2008. Blog: http://felipedba.wordpress.com.
necessrias a uma determinada situao e para cada configurao
na qual ele pretende interferir.
Tendo como base as melhores prticas divulgadas pelos for- Livro: SQL Server 2008: The Bible, Editora: Wiley; 1 edition.
necedores de software e hardware, pode-se iniciar uma confi- Professional Microsoft SQL Server 2008 Administration, Editora:
gurao personalizada junto ao ambiente, preparando-o para Wrox; 1 edition
hospedar o funcionamento da plataforma de banco de dados,
neste caso, o SQL Server. Disk Partition Alignment Best Practices for SQL Server
Com as orientaes aqui apresentadas, torna-se possvel o ajuste http://msdn.microsoft.com/en-us/library/dd758814(v=sql.100).aspx
das opes do sistema operacional referentes a processadores,
memria, disco e rede de uma forma condizente com as recomen- D seu feedback sobre esta edio! eu
Feedback

s
daes da Microsoft, possibilitando que o SQL Server e todos os

D
A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
demais elementos da plataforma de dados usem todos os recursos
voc, leitor, acha da revista!

s
ta
edio
do ambiente Windows e de hardware da melhor forma possvel.
D seu voto sobre este artigo, atravs do link:
www.devmedia.com.br/sqlmagazine/feedback

48 SQL Magazine Edio 101


Banco de Dados/Persistncia Nesta seo voc encontra artigos banco de dados, SQL ou persistncia

Novidades para
desenvolvedores no
Oracle 11g Parte 2
Novidades da PL/SQL voltadas para
desenvolvedores de Software

Este artigo faz parte de um curso Resumo DevMan


De que se trata o artigo:
Este artigo a segunda e ltima parte de nossa srie que demons-
tra de forma resumida as principais novidades das linguagens SQL
e PL/SQL que surgiram na verso 11g do banco de dados voltadas

P
L/SQL uma extenso da linguagem padro SQL principalmente para desenvolvedores, administradores ou opera-
para o SGBD Oracle da Oracle Corporation. uma dores de dados que necessitam utilizar de forma eficiente os novos
linguagem procedural da Oracle que estende a recursos do Oracle.
linguagem SQL.
A PL/SQL permite que a manipulao de dados seja Em que situao o tema til:
includa em unidades de programas. Blocos de PL/SQL Conhecer as novidades introduzidas na verso 11g do principal
so passados e processados por uma PL/SQL Engine banco de dados do mercado torna-se um diferencial a profissionais
que pode estar dentro de uma ferramenta Oracle ou que desejam destaque e oportunidades no mercado de trabalho,
do Server. A PL/SQL Engine filtra os comandos SQL alm de uma reciclagem na preparao para provas de certificao
e manda individualmente o comando SQL para o SQL na nova plataforma.
Statement Executor no Oracle Server, que processa o PL/
SQL com os dados retornados do Server. Novidades para desenvolvedores no Oracle 11g Parte 2:
A unidade bsica em PL/SQL um bloco. Todos os O artigo destaca as novidades da linguagem SQL do Oracle 11g.
programas em PL/SQL so compostos por blocos, Nesta segunda parte focamos em mais algumas novidades da PL/
que podem estar localizados uns dentro dos outros. SQL. As novidades ficam por conta dos novos tipos de dados, novas
Geralmente, cada bloco efetua uma ao lgica no packages, triggers compostas, facilidades na linguagem, ordenar a
programa. execuo de triggers e a evoluo do compilador.
Desde seu lanamento comercial em 1979, a cada nova
verso do banco de dados Oracle, comunidades de DBAs
e desenvolvedores do mundo todo ficam antenados para Neste contexto, neste artigo iremos analisar as principais novi-
conhecer os novos recursos que facilitam as tarefas de dades da linguagem PL/SQL introduzidas nas verses 11g e 11gR2
planejar e manter aplicaes em ambientes complexos do banco de dados Oracle, voltadas principalmente para desenvol-
com necessidades crescentes de performance, escala e vedores e operadores que necessitam dominar os novos recursos
segurana. visando alcanar solues eficientes, flexveis e seguras.

Edio 101 SQL Magazine 49


Novidades para desenvolvedores no Oracle 11g Parte 2

DBMS_SQL Listagem 2. Armazenando resultado de funes em cache.


A package dbms_sql ganhou novos recursos na verso 11g, aumen-
tando as opes para se criar comandos SQL em tempo de execu- SQL> CREATE OR REPLACE FUNCTION f_qt_linhas
2 return number
o. Dentre as melhorias, podemos destacar o suporte a todos os 3 RESULT_CACHE
data types tratados na instruo execute immediate e a possibilidade 4 is
5 v_Result number;
de utilizar comandos SQL de at 32kb como argumento no proce-
6 begin
dimento dbms_sql.parse(). Alm disso, as novas funes dbms_sql. 7 select sum(count(*))
to_refcursor() e dbms_sql.to_cursor() podem ser empregadas para 8 into v_result
9 from TESTE_2M_TAB
converso entre o data type ref_cursor e cursores da dbms_sql, como
10 group by col1;
demonstrado na Listagem 1. No exemplo, um cursor definido na 11
dbms_sql foi convertido para o data type sys_refcursor, possibilitando 12 return(v_Result);
13 end;
o uso do tradicional fetch em um loop PL/SQL. 14 /

Funo criada.
Listagem 1. Exemplo das funes to_refcursor() e to_cursor_number(). SQL> --PRIMEIRA EXECUO PROCESSA SQL E ARMAZENA RESULTADO EM CACHE
SQL> SET AUTOTRACE ON STATISTICS
SQL> SET SERVEROUTPUT ON SQL> SET TIMING ON
SQL> SQL> SELECT f_qt_linhas FROM DUAL;
SQL> DECLARE
2 v_ref_cursor sys_refcursor; F_QT_LINHAS
3 v_cursor number; ----------------------------------------------------------
4 v_SQL clob := SELECT * FROM EMPREGADO ORDER BY 1; 2000000
5 v_ret number;
6 v_reg_emp empregado%rowtype; Decorrido: 00:00:01.47
7 BEGIN
8 v_cursor := DBMS_SQL.open_cursor; Estatsticas
9 ----------------------------------------------------------
10 DBMS_SQL.parse(v_cursor,v_SQL, DBMS_SQL.native); 19 recursive calls
11 0 db block gets
12 v_ret := DBMS_SQL.execute(v_cursor); 8890 consistent gets
13 80 physical reads
14 v_ref_cursor := DBMS_SQL.to_refcursor(v_cursor); 0 redo size
15 433 bytes sent via SQL*Net to client
16 loop 416 bytes received via SQL*Net from client
17 fetch v_ref_cursor into v_reg_emp; 2 SQL*Net roundtrips to/from client
18 exit when v_ref_cursor%NOTFOUND; 1 sorts (memory)
19 dbms_output.put_line(v_reg_emp.codigo|| ||v_reg_emp.nome|| 0 sorts (disk)
||v_reg_emp.cargo); 1 rows processed
20 end loop;
21 close v_ref_cursor; SQL> --SEGUNDA EXECUO IR UTILIZAR O RESULTADO J EM CACHE
22 END; SQL> SELECT f_qt_linhas FROM DUAL;
23 /
2 FORD ANALYST F_QT_LINHAS
11 JAMES CLERK ----------------------------------------------------------
21 WARD SALESMAN 2000000
34 MILLER CLERK
39 KING PRESIDENT Decorrido: 00:00:00.01

Procedimento PL/SQL concludo com sucesso.

Compound DML Triggers


PL/SQL Function Result Cache Compound DML Triggers uma novidade que permite a criao
A verso 11g do Oracle permite agora uma clusula na criao de triggers compostas. Uma trigger composta pode conter cdigo
de funes que instrui o banco de dados a armazenar em cache o executvel para todos os eventos possveis de DML em um nico
valor de retorno da funo, evitando assim sua execuo nas cha- programa, permitindo tambm o uso de variveis globais, visveis
madas subsequentes. Essa nova funcionalidade promove grande por todo o corpo da trigger. A Listagem 3 demonstra uma trigger
ganho no desempenho de aplicaes PL/SQL, como demonstrado composta, onde reutilizamos um procedimento local para todos
na Listagem 2. Observe que fazemos uso do result cache e que os eventos de dml na tabela cliente.
por conta disso, o resultado da segunda execuo do comando
SQL acaba sendo muito mais rpido. Observe que o tempo utili- Execution Order of Triggers
zada nas duas execues foi de 00:00:01.47 na primeira execuo Antes da verso 11g no havia recurso possibilitando controlar a
e 00:00:00.01 na segunda. ordem de execuo de triggers pertencentes a um mesmo evento de

50 SQL Magazine Edio 101


disparo. Agora podemos definir a ordem de execuo de dml trig- Creating Disabled Triggers
gers atravs da clusula FOLLOWS, como ilustrado na Listagem 4. Este mais um diferencial na sintaxe de criao de triggers no
Este cdigo demonstra o controle na ordem de execuo entre duas Oracle 11g, possibilitando a criao de triggers que permanecero
triggers before update de uma tabela. Perceba que ao definirmos a desativadas at a sua alterao com o comando alter trigger <name>
trigger TG_BU_CLIENTE_2 colocamos explicitamente que ela enable. Esta tcnica pode ser utilizada para minimizar o impacto
ser executada depois da execuo da trigger TG_BU_CLIENTE_1 nas aplicaes em funcionamento, visto que a trigger no ser
conforme podemos observar na linha 4 da segunda trigger. executada at sua ativao. A Listagem 5 demonstra a criao de
triggers desativadas. Observe que inicialmente definimos a trigger
TG_BU_CLIENTE como sendo disable (linha 4). Na sequncia,
Listagem 3. Exemplo de trigger composta.
executamos alguns comandos SQL e percebemos que ela de fato
SQL> SET SERVEROUTPUT ON no foi considerada. Feito isto, ativamos a trigger utilizando o
SQL> comando ALTER TRIGGER TG_BU_CLIENTE ENABLE. Perceba
SQL> CREATE OR REPLACE TRIGGER TG_COMPOSTA_CLIENTE
que ao executarmos mais alguns comandos SQL, perceberemos
2 FOR UPDATE ON CLIENTE
3 COMPOUND TRIGGER tambm que a trigger ser executada.
4
5 v_global_msg varchar2(100); Automatic Subprogram Inlining
6
O compilador do Oracle 11g pode automaticamente realizar oti-
7 procedure ShowMsg
8 is mizao em seu cdigo PL/SQL utilizando a tcnica de subprogram
9 begin inlining, que consiste na substituio da chamada a subprogramas
10 DBMS_OUTPUT.PUT_LINE(v_Global_Msg); pela cpia de seu prprio cdigo. Apesar de melhorar o desem-
11 end ShowMsg;
12 ---------------------------------------------------------
penho da rotina, substituir chamadas de subprogramas por seu
13 BEFORE STATEMENT cdigo vai contra a tcnica de programao modular, que torna o
14 IS cdigo mais limpo e compreensvel. Assim, atravs de uma instru-
15 BEGIN
o para o compilador, o Oracle 11g faz isso de forma transparente,
16 v_Global_Msg := BEFORE STATEMENT...;
17 ShowMsg(); alterando apenas o cdigo compilado, sem que haja necessidade de
18 END BEFORE STATEMENT; alterar o fonte de seus procedimentos. Na Listagem 6 invocamos a
19 --------------------------------------------------------- otimizao por subprogram inlining de duas formas, visando ganho
20 BEFORE EACH ROW
de desempenho no programa.
21 IS
22 BEGIN
23 v_Global_Msg := BEFORE EACH ROW...;
Listagem 4. Controlando a ordem de execuo de triggers na verso 11g.
24 ShowMsg();
25 END BEFORE EACH ROW;
SQL> CREATE OR REPLACE TRIGGER TG_BU_CLIENTE_1
26 --------------------------------------------------------- 2 BEFORE UPDATE ON CLIENTE
27 AFTER EACH ROW 3 FOR EACH ROW
28 IS 4
29 BEGIN 5 BEGIN
30 v_Global_Msg := AFTER EACH ROW...; 6 DBMS_OUTPUT.PUT_LINE(PRIMEIRO BEFORE UPDATE);
31 ShowMsg(); 7 END;
32 END AFTER EACH ROW; 8 /
33 ---------------------------------------------------------
34 AFTER STATEMENT Gatilho criado.
35 IS
SQL> CREATE OR REPLACE TRIGGER TG_BU_CLIENTE_2
36 BEGIN
2 BEFORE UPDATE ON CLIENTE
37 v_Global_Msg := AFTER STATEMENT...; 3 FOR EACH ROW
38 ShowMsg(); 4 FOLLOWS TG_BU_CLIENTE_1
39 END AFTER STATEMENT; 5 BEGIN
40 6 DBMS_OUTPUT.PUT_LINE(SEGUNDO BEFORE UPDATE);
41 END TG_COMPOSTA_CLIENTE; 7 END;
42 / 8
9 /
Gatilho criado.
Gatilho criado.
SQL> UPDATE cliente SET nome=Arlindo Vieira WHERE codigo = 10;
SQL> SET SERVEROUTPUT ON
BEFORE STATEMENT...
SQL>
BEFORE EACH ROW... SQL> UPDATE cliente SET nome = Carolline Medeiros WHERE codigo=10;
AFTER EACH ROW... PRIMEIRO BEFORE UPDATE
AFTER STATEMENT... SEGUNDO BEFORE UPDATE

1 linha atualizada. 1 linha atualizada.

Edio 101 SQL Magazine 51


Novidades para desenvolvedores no Oracle 11g Parte 2

Listagem 5. Uso da clusula disable na criao de triggers

SQL> CREATE OR REPLACE TRIGGER TG_BU_CLIENTE SQL> rollback;


2 BEFORE UPDATE ON CLIENTE
3 FOR EACH ROW Rollback concludo.
4 DISABLE
5 BEGIN SQL> ALTER TRIGGER TG_BU_CLIENTE ENABLE;
6 DBMS_OUTPUT.PUT_LINE(ESTOU ATIVO!);
7 END; Gatilho alterado.
8 /
SQL> UPDATE cliente SET estado =MT WHERE codigo=10;
Gatilho criado. ESTOU ATIVO!

SQL> SET SERVEROUTPUT ON 1 linha atualizada.


SQL> UPDATE cliente SET estado =MT WHERE codigo=10;
SQL> commit;
1 linha atualizada.
Commit concludo.

Listagem 6. Exemplo de subprogram inlining.

SQL> SET TIMING ON 12 PRAGMA INLINE(soma,YES); --invocar otimizao de forma explcita


SQL> DECLARE 13 v_num := soma(v_num, i);
2 v_num PLS_INTEGER; 14 end loop;
3 15 END;
4 function soma(p1 number, p2 number) return number 16 /
5 is Procedimento PL/SQL concludo com sucesso.
6 begin
7 return(p1+p2); Decorrido: 00:00:01.13
8 end; SQL> --ALTERAR O COMPORTAMENTO PADRO DO COMPILADOR:
9 SQL> ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL=3;
10 BEGIN Sesso alterada.
11 for i in 1..10000000 loop
12 v_num := soma(v_num, i); --no otimizado SQL> DECLARE
13 end loop; 2 v_num PLS_INTEGER;
14 END; 3
15 / 4 function soma(p1 number, p2 number) return number
Procedimento PL/SQL concludo com sucesso. 5 is
6 begin
Decorrido: 00:00:02.55 7 return(p1+p2);
8 end;
SQL> DECLARE 9
2 v_num PLS_INTEGER; 10 BEGIN
3 11 for i in 1..10000000 loop
4 function soma(p1 number, p2 number) return number 12 v_num := soma(v_num, i);
5 is 13 end loop;
6 begin 14 END;
7 return(p1+p2); 15 /
8 end; Procedimento PL/SQL concludo com sucesso.
9
10 BEGIN Decorrido: 00:00:01.13
11 for i in 1..10000000 loop

PL/Scope PL/SQL Compile Warnings


Esta mais uma ferramenta do compilador PL/SQL que organiza Na verso 11g, uma nova advertncia para o compilador PL/SQL
dados sobre os identificadores utilizados nos programas PL/SQL foi introduzida visando alertar os desenvolvedores quanto ao uso
no ato da compilao, disponibilizando acesso para consulta das clusulas when others, que no propagam o erro aps o trata-
atravs da view USER_IDENTIFIERS, conforme o exemplo na mento da exceo e podem ocultar problemas ou bugs no programa.
Listagem 7. Este recurso permite a desenvolvedores PL/SQL maior Vale lembrar que as advertncias de compilao no so erros que
produtividade ao minimizar o tempo de reconhecimento do cdi- impedem a execuo do procedimento e podem ser ativadas atravs
go fonte em programas armazenados no banco de dados. do parmetro plsql_warnings, exemplificado na Listagem 8.

52 SQL Magazine Edio 101


Concluso
Listagem 7. Listar identificadores de programas PL/SQL.
Com isso finalizamos nossa srie de dois artigos que apre-
SQL> ALTER SESSION SET PLSCOPE_SETTINGS=IDENTIFIERS:ALL; sentou algumas importantes melhorias trazidas pelo Oracle
na verso 11gr2. Os recursos aqui apresentados so teis para
Sesso alterada.
tirarmos melhor proveito da nova verso do banco de dados
SQL> CREATE OR REPLACE PROCEDURE PROC1(param1 varchar2, param2 number) que considerado um dos mais robustos do mercado.
2 IS
3 v_minha_var date;
4 BEGIN
Thyago Bernuci
5 IF param1 =TESTE AND param2 > 0 THEN
6 v_minha_var := sysdate + param2; thyago@unimedcuiaba.com.br
7 END IF; @thyagobernuci | br.linkedin.com/in/thyagobernuci
8 END; Atua no ramo de desenvolvimento de sistemas h 18 anos, e em
9 /
Administrao de banco de dados Oracle h 13 anos. Bacharel em Ci-
SQL> SELECT LPAD( , level*2, ) || name AS name, type, usage_id, line ncia da Computao com Especializao em Anlise de Sistemas e MBA
2 FROM user_identifiers em Governana de TI. Possui os certificados Oracle OCP 8i, 9i, 10g, 11g, Oracle RAC 11gR2
3 START WITH usage_context_id = 0 and Grid Infrastructure Administration Expert, Oracle on Linux Expert, Oracle SQL Expert,
4 CONNECT BY PRIOR usage_id = usage_context_id;
Oracle 11g Implementation Specialist, PMI CAPM, RUP, COBIT e ITIL FOUNDATION.
NAME TYPE USAGE_ID LINE
-------------------- ------------------------------ --------------- ----------
PROC1 PROCEDURE 1 1 Whats New in the SQL Language Reference
PROC1 PROCEDURE 2 1
PARAM1 FORMAL IN 3 1
http://docs.oracle.com/cd/E11882_01/server.112/e26088/wnsql.htm#sthref3
VARCHAR2 CHARACTER DATATYPE 4 1
PARAM2 FORMAL IN 5 1
Whats New in PL/SQL Language Reference
NUMBER NUMBER DATATYPE 6 1 http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/whatsnew.
V_MINHA_VAR VARIABLE 7 3 htm#CJAEGHHH

PL/SQL New Features and Enhancements in Oracle Database 11g


Listagem 8. Exemplo do parmetro plsql_warnings.
http://www.oracle-base.com/articles/11g/PlsqlNewFeaturesAndEnhancements
SQL> ALTER SESSION SET PLSQL_WARNINGS = enable:all; _11gR1.php
Sesso alterada. Oracle Technology Network Developer License Terms
SQL> CREATE OR REPLACE PROCEDURE PROC_TATA_ERRO
http://www.oracle.com/technetwork/testcontent/standard-license-088383.html
2 IS
3 BEGIN
Oracle 11g Product Editions & Features
4 RAISE_APPLICATION_ERROR(-20001, TESTE EXCEO);
5 EXCEPTION http://www.oracle.com/us/products/database/product-editions-066501.html
6 WHEN OTHERS THEN
7 NULL;
8 END PROC_TATA_ERRO;
9 /
D seu feedback sobre esta edio! eu
Feedback

s
D
A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
SP2-0804: Procedimento criado com advertncias de compilao
voc, leitor, acha da revista!

s
ta
edio
SQL> SHOW ERRORS
Erros para PROCEDURE PROC_TATA_ERRO:
D seu voto sobre este artigo, atravs do link:
LINE/COL ERROR www.devmedia.com.br/sqlmagazine/feedback
-------- -----------------------------------------------------------------
6/9 PLW-06009: o handler OTHERS do procedimento PROC_TATA_ERRO no
termina com RAISE ou RAISE_APPLICATION_ERROR

Edio 101 SQL Magazine 53


Banco de Dados/Persistncia Nesta seo voc encontra artigos banco de dados, SQL ou persistncia

Questes de banco de
dados do concurso da
PRODAM (2012)
Veja neste artigo a correo das questes sobre
banco de dados do concurso pblico para a
PRODAM realizado em 2012

E Resumo DevMan
m dezembro de 2011 a Empresa de Tecnologia
da Informao e Comunicao do municpio de
So Paulo (PRODAM/SP) abriu um concurso De que se trata o artigo:
pblico para preencher vagas de reserva para diver- Apresentar a correo das questes com contedo de banco de
sos cargos. Esta prova selecionou candidatos para dados do concurso pblico da Prodam/SP para a carreira de Analista
os cargos de Analista de TIC II (Tecnologia da Infor- de TIC II com especialidade em suporte a banco de dados.
mao e Comunicao) para suprir a necessidade de
suporte a banco de dados e outros cargos envolvendo Em que situao o tema til:
tecnologias como Java, .NET, sistemas de Mainframe A resoluo das questes apresentadas neste artigo til para o
e administrao de dados. candidato que almeja seguir a carreira de servidor pblico em um
O salrio inicial para o cargo de Analista de TIC II dos diversos cargos relacionados rea de tecnologia da informao,
com especialidade em suporte de banco de dados de mais especificamente para aqueles que precisam estudar o contedo
R$ 5.330,90 e, como um dos pr-requisitos para o cargo, de banco de dados.
os candidatos devem ter diploma de graduao na rea
de Tecnologia da Informao, devidamente reconhe- Questes de banco de dados do concurso da PRODAM (2012) :
cido, ou diploma de graduao em outro curso supe- Este artigo apresentou a correo das questes de banco de da-
rior, acompanhado do diploma/certificado do curso dos cobradas na prova que selecionou candidatos para o cargo de
de ps-graduao ou extenso na rea de Tecnologia Analista de TIC II (Tecnologia da Informao e Comunicao) com
da Informao. Tambm necessrio trs anos como foco no suporte a banco de dados para a empresa PRODAM. O artigo
tempo mnimo de formao e experincia comprovada contm a correo das questes de mltipla escolha e tambm os
de seis meses em suporte a banco de dados. comentrios sobre as questes dissertativas, orientando o candidato
De acordo com o edital, a primeira fase da prova que est estudando para concursos pblicos para vagas na rea de
foi dividida entre questes com quatro alternativas tecnologia da informao.
com contedo de portugus, lgica e duas sries de
conhecimentos especficos. O exame foi composto de
15 questes de portugus e lgica e 25 questes tcni-
cas incluindo banco de dados, sistemas operacionais de dados. O tempo total de durao foi de quatro horas para
e redes. Alm disso, a segunda fase da prova apre- as duas fases.
sentou cinco questes dissertativas que abordaram O edital diz tambm que o contedo da prova envolve os prin-
um estudo de caso e cenrios que envolviam banco cipais conceitos de bancos de dados e tambm como instalar,

54 SQL Magazine Edio 101


administrar, configurar e resolver problemas relacionados conhecimento a respeito da normalizao. Apenas para lem-
aos bancos de dados MySQL e SQL Server, sem o detalhamen- brar, o conceito da terceira forma normal o seguinte:
to de uma verso especfica destes Sistemas Gerenciadores Uma estrutura de dados encontra-se na terceira forma nor-
de Bancos de Dados Relacionais. mal (3FN) se j estiver na segunda forma normal (2FN) e se
Neste artigo ser apresentada a correo das questes re- no existir a anomalia da dependncia transitiva ou indireta
lacionadas ao contedo de banco de dados para o cargo de entre um atributo e a chave primria. Portanto, uma estrutura
Analista de TIC II com especialidade em suporte de banco de dados estar na terceira formal normal (3FN) se todos os
de dados. As questes sero apresentadas, corrigidas e co- seus atributos dependerem funcionalmente apenas da chave
mentadas junto com o gabarito oficial. primria e de nenhum outro atributo.
Como se pode notar, o enunciado da terceira forma normal
Questes objetivas de conhecimento especfico utiliza o conceito de dependncia transitiva. Para compreender
16. Considerando uma relao R, uma _____________________, melhor o enunciado da questo, vamos considerar o seguinte
indicada por X?Y, entre dois conjuntos de atributos X e Y que exemplo: em um cadastro de clientes temos um identificador
so subconjuntos de R, especifica uma restrio sobre poss- numrico (chave primria), o nome do cliente e a sua cor pre-
veis tuplas que podem formar um estado de relao r de R. A ferida. Suponha que a cor preferida seja relacionada ao nome
restrio que, para quaisquer duas tuplas t1 e t2 em r que do cliente e no ao seu identificador que a chave primria.
tenham t1[X] = t2[X], elas tambm devem ter t1[Y] = t2[Y]. Este exemplo simples mostra como a estrutura no estaria na
forma normal, pois a cor preferida depende funcionalmente
A) relao de chave secundria. (dependncia transitiva) do nome do cliente que no a chave
B) dependncia funcional. primria da tabela. Sendo assim, o candidato deve marcar a
C) relao de chave estrangeira. alternativa C como correta para a questo 17.
D) vinculao transitiva.
18. Considere as seguintes afirmaes:
Gabarito: Alternativa B. I - Um esquema de relao R est na terceira forma normal
Comentrio: A primeira questo de banco de dados da prova se cada atributo no principal A em R no for parcialmente
indica que necessrio conhecer aspectos tericos de banco dependente de qualquer chave K de R. A chave K de R deve
de dados. De acordo com o enunciado, preciso indicar o ser obrigatoriamente uma chave candidata multivalorada
nome do conceito a partir da explicao de uma restrio (no-atmica) da relao R.
entre tuplas. Para responder esta questo o candidato deve II - A primeira forma normal afirma que o domnio de um
se concentrar na ltima frase da mesma, onde dito que para atributo deve incluir apenas valores atmicos (simples, in-
quaisquer tuplas t1 e t2 que tenham t1[X] = t2[X], ento estas divisveis) e que o valor de qualquer atributo em uma tupla
tuplas tambm devem ter t1[Y] = t2[Y]. deve ser um nico valor do domnio desse atributo.
Esta definio quer dizer que se o conjunto de atributos
de X em t1 for o mesmo em t2, ento o conjunto de atributos Pode-se afirmar que:
de Y em t1 tambm deve ser o mesmo em t2. Isso fica claro A) apenas a afirmao II est correta.
quando pensamos em uma relao de chave primria e chave B) apenas a afirmao I est correta.
estrangeira, pois tal relao exige que os atributos da chave C) todas as afirmaes esto corretas.
primria correspondam com os atributos da chave estran- D) todas as afirmaes esto incorretas.
geira. Se o candidato conseguir fazer esta associao entre o
enunciado e a restrio imposta por chaves primrias e chaves Gabarito: Alternativa A.
estrangeiras, fica fcil identificar que estamos falando do Comentrio: Esta questo foca no conhecimento e entendi-
conceito de dependncia funcional apresentado na definio mento das trs formas normais atravs da avaliao de duas
da segunda forma normal. Sendo assim, o candidato deve afirmaes. A afirmao I se concentra na terceira forma
marcar a opo B para a questo 16. normal, cuja definio a seguinte: uma estrutura de dados
encontra-se na terceira forma normal (3FN) se j estiver na
17. A terceira forma normal baseada no conceito de: segunda forma normal (2FN) e se no existir a anomalia
A) relao de chave secundria. da dependncia transitiva ou indireta entre um atributo e
B) relao de chave estrangeira. a chave primria. Portanto, uma estrutura de dados estar
C) dependncia transitiva. na terceira formal normal (3FN) se todos os seus atributos
D) atributo no-atmico. dependerem funcionalmente apenas da chave primria e de
nenhum outro atributo.
Gabarito: Alternativa C. A primeira frase da afirmao I est correta, pois os atributos
Comentrio: Esta uma questo que cobra do candidato o no principais, ou seja, que no fazem parte da chave primria,

Edio 101 SQL Magazine 55


Questes de banco de dados do concurso da PRODAM (2012)

no devem ser parcialmente dependentes de qualquer chave K tabela, ento no h colunas da tabela que dependem apenas
de R. J a segunda frase da afirmao I diz que a chave K de R de A ou de B. O candidato deve lembrar que na definio da
deve ser obrigatoriamente uma chave candidata multivalorada segunda forma normal o importante que a tabela j esteja
(no-atmica) da relao R. Uma chave multivalorada aquela na primeira forma normal e que no exista a anomalia da
que composta por mais de um atributo como, por exemplo, dependncia transitiva ou indireta entre um atributo e a
uma entidade cuja chave comporta de um identificador do chave primria. Estes dois conceitos esto presentes nesta
pedido e um identificador do produto. Contudo, a definio da afirmao I, tornando-a correta.
terceira forma normal no faz referncia em nenhum momento A segunda afirmao pode ser traduzida da seguinte manei-
a chaves multivaloradas e, por isso, a afirmao I incorreta. ra: A primeira forma normal (1FN) significa que a tabela no
A afirmao II remete definio da primeira forma nor- possui atributos multivalorados ou compostos. (Um atributo
mal, que a seguinte: uma estrutura de dados encontra-se na composto contm outros atributos e pode ser dividido em
primeira forma normal (1FN) se todas as suas colunas no partes menores).
apresentarem atributos multivalorados, ou seja, atributos que Esta segunda afirmao apresenta o principal requisito da
podem conter mais de um valor para uma mesma instncia da primeira forma normal: a ausncia de colunas multivaloradas.
entidade como, por exemplo, o telefone (comercial, residencial J a segunda frase desta afirmao foca na definio de uma
e celular). Em suma, a definio apresentada na afirmao II tabela relacional, dizendo que toda tabela relacional j est
equivalente definio da primeira forma normal, tornando-a na primeira forma normal, argumentando que o valor de
verdadeira. Sendo assim, o candidato deve marcar a alternativa qualquer linha precisa ser atmico. Esta afirmao impor-
A para esta questo, uma vez que apenas a afirmao II est tante, pois trata do conceito de tabela relacional que no
correta. citado diretamente pelas formas normais. Aqui o candidato
deve lembrar que os termos tabela e entidade so cita-
19. Considere as afirmaes abaixo. dos na definio das formas normais, e tabela relacional
I - A table is in second normal form (2NF) if it is in 1NF and algo especfico de um banco de dados relacional como, por
there is no nonkey column dependent on a partial primary key exemplo, o SQL Server ou o Oracle.
of that table. This means if (A,B) is a combination of two table Do ponto de vista terico, se uma tabela est em um banco
columns building the key, then there is no column of the table de dados relacional, ela j est de acordo com a primeira
depending either on only A or only B. forma normal. J do ponto de vista prtico, possvel criar
II - First normal form (1NF) means that a table has no multiva- uma tabela com atributos multivalorados e sem nenhuma
lued attributes or composite attributes. (A composite attribute chave em um banco de dados relacional. Como o foco desta
contains other attributes and can therefore be divided into questo voltado para as definies tericas, o mais adequa-
smaller parts.) All relational tables are by definition in 1NF, do considerar que o termo tabela relacional se refere a
because the value of any column in a row must be atomicthat uma tabela que j est na primeira forma normal, tornando
is, single valued. a afirmao II correta.
III - A table is in third normal form (3NF) if it is in 2NF and there A traduo da afirmao III a seguinte: uma tabela est
are no functional dependencies between nonkey columns. na terceira forma normal (3FN) se est na 2FN e no h
dependncias funcionais entre as colunas no chave. Esta
Pode-se afirmar que: definio est correta e equivalente definio da terceira
A) apenas a afirmao III est incorreta. forma normal, que cita o conceito de dependncia funcional.
B) apenas a afirmao II est incorreta. Portanto, a afirmao III est correta.
C) apenas a afirmao I est incorreta. Como as afirmaes I, II e III esto corretas, o candidato
D) todas as afirmaes esto corretas. deve marcar a alternativa D para a questo 19.

Gabarito: Alternativa D. 23. Considere as afirmaes abaixo.


Comentrio: Mais uma vez, esta questo cobra o conhecimento I - No modelo de dados relacional, a restrio de integridade
a respeito das definies das trs formas normais. As afir- referencial especificada entre duas relaes e usada para
maes apresentadas no enunciado esto em ingls e podem manter a consistncia entre tuplas nas duas relaes. Infor-
confundir o candidato que no est acostumado a compreender malmente, a restrio de integridade referencial afirma que
definies nesta lngua. uma tupla em uma relao que referencia outra relao precisa
Uma possvel traduo para a afirmao I a seguinte: uma se referir a uma tupla existente nessa relao.
tabela est na segunda forma normal (2FN) se ela j estiver II - Replicao o processo de criar uma cpia exata dos
na 1FN e no h colunas que dependam apenas de parte da dados. Gerar uma ou mais rplicas dos dados de produo
chave primria desta tabela. Isto significa que se (A,B) for uma uma das formas de se fornecer BC (Business Continuity,
combinao de duas colunas que compem a chave primria da continuidade de negcios). Essas rplicas podem ser usadas

56 SQL Magazine Edio 101


para operaes de recuperao e reinicializao em caso de examinador deseja cobrar conhecimentos a respeito de uma
perda de dados. destas duas opes. Nota-se tambm que o enunciado no diz
se o backup de dados focado no tipo de backup fornecido por
Pode-se afirmar que: um sistema operacional ou por um banco de dados.
A) todas as afirmaes esto incorretas. De acordo com a documentao oficial do SQL Server, os ti-
B) apenas a afirmao II est correta. pos backups nativos possveis (que podem ser realizados pelo
C) todas as afirmaes esto corretas. prprio SQL Server e no por ferramentas externas) so os
D) apenas a afirmao I est correta. backups Full, differential e transaction log backup. A traduo
usual utilizada pela comunidade de usurios e adotada pelo
Gabarito: Alternativa C. prprio fabricante (Microsoft) backup completo, diferencial
Comentrio: Esta questo cobra do candidato dois conceitos e backup de transaction log.
distintos de banco de dados: a restrio imposta pela integri- J o MySQL utiliza o conceito de backups fsicos (raw) e
dade referencial e o propsito de replicao. lgicos em sua documentao. Os backups fsicos (raw) so
A primeira afirmao est correta e apresenta o conceito de cpias dos arquivos feitas utilizando as ferramentas do sistema
integridade referencial entre duas relaes focando na consis- operacional, e os backups lgicos so gerados por ferramentas
tncia que este recurso proporciona. Tambm est correta a do MySQL que armazenam a estrutura lgica do banco de da-
afirmao sobre a integridade referencial no que diz respeito dos atravs de instrues SQL (CREATE, INSERT e outras). A
presena de tuplas correspondentes em relaes distintas. ferramenta mysqldump utilizada para a gerao de backups
Nos SGBDRs a integridade referencial representada como lgicos no MySQL.
um relacionamento entre as chaves primrias e as chaves Todas as alternativas apresentam nomes de backups que no
estrangeiras. so utilizados nem pelo MySQL e nem pelo SQL Server. O
A segunda afirmao define o que o processo de replicao gabarito indica que a alternativa correta a C, supondo que
e tambm est correta. Contudo, esta afirmao cita o conceito o candidato deve associar a parte do enunciado que fala (...)
de BC (Business Continuity), cuja definio formal a seguinte: copia os dados que foram alterados desde o ltimo backup com-
Business Continuity a atividade executada por uma orga- pleto com a definio da palavra cumulativo. Contudo, como
nizao para garantir que funes crticas do negcio sero nenhuma das alternativas apresenta um tipo de backup vlido
disponveis para clientes, fornecedores, regulamentadores e para os bancos de dados citados no edital. Sendo assim, de
outras entidades que precisam ter acesso a estas funes. minha opinio que a questo deve ser anulada por apresentar
Em geral, o termo Business Continuity no usual quando se um enunciado incompleto e alternativas inadequadas.
fala em banco de dados e deve-se dar preferncia expresso
alta disponibilidade (ou HA de High Availability) para indicar 33. O MySQL pode ler as opes de inicializao no arquivo:
que o servio de banco de dados deve estar sempre disponvel. A) mysql.init
De qualquer maneira, a replicao pode ser utilizada para B) my.cnf
implementar alta disponibilidade de banco de dados por meio C) config.csf
de rplicas envolvidas em situaes de recuperao e reinicia- D) start.cfg
lizao quando h perda de dados.
Como as afirmaes I e II so corretas, o candidato deve mar- Gabarito: Alternativa B.
car a alternativa C para responder corretamente questo 23. Comentrio: O MySQL, assim como outros bancos de dados,
utiliza diversos parmetros de inicializao que so lidos quan-
27. Backup ______________ copia os dados que foram alterados do o servidor de banco de dados iniciado. Estes parmetros
desde o ltimo backup completo. controlam configuraes de replicao, valores numricos re-
A) incremental ferentes a limites, caminhos de arquivos do servidor de banco
B) sinttico de dados e outras configuraes.
C) cumulativo O armazenamento destes parmetros deve ser feito de forma
D) esttico externa ao banco de dados, uma vez que estes valores devem
ser acessados no exato momento em que o banco de dados
Gabarito: Alternativa C. est sendo inicializado e as tabelas e objetos ainda no so
Comentrio: Esta questo cobra do candidato o conhecimen- acessveis. Para tanto, os bancos de dados recorrem a arquivos
to dos tipos de backup. No enunciado no feita nenhuma texto do sistema operacional que armazenam os valores e os
referncia ao tipo de backup de um Sistema Gerenciador de nomes dos parmetros e configuraes. H uma tendncia em
Banco de Dados Relacional (SGBDR) especfico. No entanto, colocar estes valores em arquivos XML, mas este no o caso
como as demais questes e o edital da prova fazem referncia do MySQL, que armazena seus parmetros de configuraes
aos SGBDRs MySQL e SQL Server, razovel assumir que o de inicializao no arquivo my.cnf, indicado na alternativa B.

Edio 101 SQL Magazine 57


Questes de banco de dados do concurso da PRODAM (2012)

Os demais arquivos presentes nas outras alternativas no Para responder rapidamente questo basta recordar que os
so utilizados para o armazenamento de configuraes de comandos DDL so iniciados por CREATE, ALTER ou DROP,
inicializao do MySQL. para criar, alterar e remover objetos do banco de dados, in-
clusive usurios. Desta maneira, a alternativa C apresenta o
34. O sistema de privilgios do MySQL garante que to- comando correto para a remoo de um usurio no MySQL.
dos usurios possam fazer exatamente as operaes que As demais alternativas no so comandos padronizados
lhes so permitidas. O controle de acesso do MySQL pelo conjunto de instrues DDL da linguagem SQL e no
composto por dois estgios. O servidor utiliza as tabelas removem um usurio do MySQL.
_________________________ no banco de dados mysql em
ambos estgios do controle de acesso. 36. No MySQL, o backup em um banco de dados pode ser
A) privilege, access e root feito por intermdio do programa:
B) passwd, secure e data A) mysqldump.
C) control, pwd e oper B) mybackup.
D) user, db e host C) sqlcopy.
D) sqlback.
Gabarito: Alternativa D.
Comentrio: Esta questo cobra do candidato o conhecimento Gabarito: Alternativa A.
sobre os metadados do MySQL, ou seja, o nome das tabelas Comentrio: Esta questo segue a linha de cobrana do
de sistema utilizadas para checagem de permisses e con- conhecimento de tarefas administrativas no MySQL, sendo
trole de acesso. Estas tabelas de sistema so armazenadas que o backup uma das principais atividades realizadas
no banco de dados de sistema chamado mysql, que criado por quem trabalha com banco de dados. O MySQL possui
durante a instalao. apenas uma ferramenta nativa de backup que transforma
A questo faz uma rpida meno aos estgios utilizados todo o contedo de um banco de dados em instrues SQL
no controle de acesso. Apesar de no haver nenhum deta- para posterior recriao do banco de dados. Esta ferramenta
lhamento destes estgios, podemos assumir que so os dois de linha de comando se chama mysqldump, e assume a for-
principais estgios envolvidos em qualquer processo de ma de um arquivo binrio que recebe alguns parmetros e
controle de acesso: a autenticao, onde o usurio garante retorna um arquivo texto contendo todas as instrues SQL
que ele quem diz ser; e a autorizao, onde so conferidas necessrias para criar o banco de dados, seus objetos e seus
as permisses de acesso aos objetos do banco de dados para dados. Sendo assim, o candidato deve marcar a alternativa
o usurio. A para esta questo. As demais alternativas no apresentam
No MySQL estas informaes so armazenadas nas tabelas nomes corretos de programas para a realizao de backups
de metadados, tambm conhecidas como catlogo do sistema no MySQL.
ou tabelas de dicionrio do MySQL. Estas tabelas so a user,
responsvel pelo armazenamento dos usurios cadastrados; 37. No MySQL, utiliza-se o comando _____________ quando
a db, responsvel pelos bancos de dados utilizados no My se deseja limpar algum dos caches internos que o MySQL
SQL; e a host, que faz a associao de clientes (por endereo usa. Para executar este comando, deve-se ter o privilgio
IP ou por outra forma de identificao) que podem ou no _______________.
acessar o servidor MySQL. Assim, a alternativa D apresenta A) CLEAN/CONTROL
corretamente o nome das tabelas de sistema associadas com o B) REORG/FILE
processo de controle de acesso do MySQL. As demais tabelas C) HOUSEK/DIRECT
indicadas nas outras alternativas no existem no MySQL. D) FLUSH/RELOAD

35. A deleo de um usurio no MySQL pode ser feita pelo Gabarito: Alternativa D.
comando: Comentrio: O objetivo do examinador ao criar esta ques-
A) DLT -u nome_usuario to cobrar do candidato o conhecimento a respeito da
B) REMOVE -u nome_usuario importante tarefa de limpeza de caches internos do MySQL,
C) DROP USER nome_usuario geralmente empregada quando necessrio realizar testes
D) CANCEL -a nome_usuario de desempenho que devem eliminar o fator de cache. Alm
de perguntar sobre o comando que limpa o cache interno do
Gabarito: Alternativa C. MySQL na primeira lacuna do enunciado, o candidato deve
Comentrio: Esta questo solicita que o candidato marque indicar o privilgio utilizado para que um usurio do MySQL
a alternativa que contm o comando DDL (Data Definition possa enviar o comando. Vale a pena lembrar aqui que todos
Language) utilizado para remover um usurio no MySQL. os comandos do MySQL requerem permisses que podem

58 SQL Magazine Edio 101


ser atribudas individualmente ou atravs de grupos. E estas A) master, model, tempdb and msdb.
permisses tm nomes especficos. B) control, testdb, mstemp and relative.
Para limparmos o cache interno do MySQL utilizamos o co- C) user, proc, exec and persist.
mando FLUSH. Um detalhe: utilizar apenas o comando FLUSH D) primary, hash, relate and login.
limpa todos os logs internos do MySQL, porm possvel lim-
par logs individuais com os comandos FLUSH LOGS, FLUSH Gabarito: Alternativa A.
MASTER, FLUSH SLAVE, FLUSH TABLES WITH READ LOCK, Comentrio: Esta questo cobra do candidato o conhecimento
dentre outros. dos bancos de dados de sistema que so criados no momento
J a permisso para a realizao deste comando pode ser da instalao do SQL Server 2008. A traduo para portugus
atribuda individualmente a um usurio por meio do comando do enunciado a seguinte: No MS SQL Server 2008, durante
GRANT, indicando a permisso RELOAD, ou pela insero do a instalao do Database Engine, os seguintes bancos de dados
usurio dentro de um grupo que tenha o privilgio RELOAD. de sistema so gerados:.
Desta maneira, o candidato deve marcar a alternativa D como O SQL Server 2008 possui quatro bancos de dados de sistema
correta e notar que nenhuma das outras opes apresentam em uma instncia recm-instalada: Master, Model, TempDB e
comandos vlidos no MySQL. MSDB.
O Master o principal banco de dados de sistema e contm me-
38. O mecanismo de ____________ um importante mecanis- tadados sobre todos os demais bancos, alm de tabelas, views,
mo de autorizao discricionrio por si s. Por exemplo, se o stored procedures e funes de sistema. Os logins do servidor
proprietrio A de uma relao R quiser que outra conta B seja e as permisses destes logins tambm so armazenadas no
capaz de recuperar apenas alguns campos de R, ento A pode Master, junto com as configuraes gerais do servidor.
criar uma viso V de R que inclua apenas os atributos e depois O Model um banco de dados utilizado como modelo. Toda
conceda SELECT em V para B. vez que um usurio cria um novo banco de dados, uma cpia
A) trigger do Model realizada. Internamente este banco de dados contm
B) view tabelas, usurios e alguns objetos de sistema indispensveis
C) stored procedure para qualquer banco de dados SQL Server 2008.
D) control O tempdb um banco de dados que armazena objetos tem-
porrios, como tabelas, stored procedures e outros objetos que
Gabarito: Alternativa B. so utilizados por todos os bancos de dados. Toda vez que o
Comentrio: Esta questo apresenta o enunciado um tanto SQL Server 2008 reiniciado o tempdb automaticamente
quanto confuso e pode atrapalhar candidatos que no estejam reconstrudo. Por este motivo no se recomenda utilizar este
adequadamente preparados. O objetivo verificar se o candi- banco de dados para a criao de objetos e o armazenamento
dato sabe qual o objeto de banco de dados que corresponde de dados.
ao que descrito no enunciado. O msdb armazena toda a estrutura necessria para a execuo
Alguns candidatos podem se confundir com a palavra dis- de tarefas agendadas, como jobs, schedules, operadores e alertas,
cricionrio utilizada no enunciado para descrever uma das ca- e o histrico de execuo dos jobs e notificaes.
ractersticas do mecanismo que deve ser preenchido na lacuna. Alm dos bancos de dados de sistema Master, Model, tem-
De acordo com o dicionrio, discricionrio significa deixado pdb e msdb, uma instncia do SQL Server 2008 recm-criada
discrio, livre de condies, no limitado. Esta palavra geral- que utiliza replicao faz uso do banco de dados de sistema
mente utilizada por juristas e profissionais da rea de Direito distribution no servidor que assume o papel de Distribuidor
quando empregam a expresso poder discricionrio. (Distributor). O banco de dados distribution contm tabelas
Se o candidato analisar o exemplo que fornecido na segunda e stored procedures de sistema necessrias para a replicao.
sentena do enunciado, ele pode rapidamente notar que a ma- Desta maneira, o candidato deve marcar a alternativa A como
neira utilizada nos bancos de dados para acessar os dados da correta para esta questo.
relao R com as caractersticas de acesso dos usurios A e B
representada por uma view. Apesar de o enunciado classificar a 40. In MS SQL Server 2008, utilities are components that pro-
view como um mecanismo, algo incomum, pois consenso que vide different features such as data reliability, data definition,
uma view um objeto de banco de dados, possvel pensar em and statistics maintenance functions. The program _________
views como objetos para facilitar o acesso de usurios a certas is a useful utility that copies database data to/from a data
colunas de uma relao. Sendo assim, o candidato deve marcar file.
como correta a alternativa B para esta questo. A) copydb
B) utilmove
39. In MS SQL Server 2008, during the installation of Database C) bcp
Engine, the following system databases are generated: D) cdbtf

Edio 101 SQL Magazine 59


Questes de banco de dados do concurso da PRODAM (2012)

Gabarito: Alternativa C. Verificar as polticas de segurana das senhas para logins do


Comentrio: Esta questo cobra do candidato o conhecimento SQL Server.
a respeito das ferramentas administrativas. A traduo para
portugus do enunciado fica assim: No MS SQL Server 2008, 2. Os bancos de dados relacionais utilizam a normalizao de
os utilitrios so componentes que proporcionam diferentes dados para evitar redundncias e possibilitar um maior desem-
funcionalidades tais como confiana nos dados, definio de penho nas consultas ao banco de dados. Explique quando uma
dados e funes para manuteno das estatsticas. O programa relao est na primeira, segunda ou terceira forma normal.
____________ um utilitrio prtico que copia os dados de um Exemplifique.
banco de dados de/para um arquivo de dados.
A questo cobra do candidato o conhecimento do nome do uti- Resposta: A normalizao uma tcnica utilizada para orga-
litrio que melhor preenche a lacuna. Dentre as opes, a nica nizar as entidades de dados e evitar anomalias, redundncias
que se enquadra na descrio a ferramenta de linha de comando e gerar ganho de desempenho.
chamada bcp.exe, que apresentada na alternativa C. Uma estrutura de dados encontra-se na primeira forma
normal (1FN) se todas as suas colunas no apresentarem atri-
Questes dissertativas e estudo de caso butos multivalorados, ou seja, atributos podem conter diversos
1. Descreva, de modo sucinto, quais procedimentos voc ado- valores para uma mesma linha da tabela como, por exemplo, o
taria para monitorar a performance e a segurana dos bancos telefone (comercial, residencial e celular).
de dados MySQL e MS SQL Server. Uma estrutura de dados encontra-se na segunda forma nor-
mal (2FN) se j estiver na primeira forma normal (1FN) e se
Resposta: Para a monitoria de performance e segurana do todas as suas colunas que no so chave primria no apresen-
MySQL podemos utilizar: tarem a anomalia da dependncia funcional parcial em relao
C aptura das consultas mais utilizadas pela utilizao de chave primria. A anomalia da dependncia funcional parcial
general query log habilitado na inicializao do daemon mysql ocorre quando a chave primria composta por dois ou mais
ou mysqld; atributos (colunas), e outros atributos no chave dependem de
Anlise do plano de execuo das instrues SQL com o parte dessa chave primria.
comando EXPLAIN; Como o enunciado da questo solicita um exemplo, vamos
Anlise das tabelas de metadados para identificao dos supor que temos um modelo que represente uma nota fiscal.
ndices nas tabelas; Este modelo contm uma entidade necessria para relacionar os
Visualizao das tabelas de sistema user, db e host do banco detalhes da nota fiscal (data de emisso, cliente, transportadora,
MySQL para identificao do controle de acesso; etc.) com os produtos realmente comprados. Esta entidade deve
Criao de um plug-in de auditoria. Para o leitor que deseja mais possuir uma chave primria composta pelo nmero da nota
informaes sobre a criao de plug-ins de auditoria no MySQL, fiscal e pelo identificador dos produtos. Se colocarmos uma
recomendo o seguinte link para a documentao do MySQL: coluna preo do produto nesta entidade, devemos garantir que
http://dev.mysql.com/doc/refman/5.5/en/writing-audit-plugins.html; o preo est se referindo ao preo do produto apenas nesta nota
Verificar as regras de criao de senhas visando garantir que fiscal, e no ao preo fixo do produto para todas as demais no-
elas possuam atributos de segurana tais como tamanho, data tas fiscais, pois se o preo estivesse relacionado apenas a uma
de expirao e uso de caracteres especiais. parte da chave (no caso, apenas ao identificador do produto),
teramos uma dependncia parcial em relao chave primria
Para a monitoria de performance e segurana do MS SQL e violaramos a segunda forma normal.
Server podemos utilizar: Uma estrutura de dados encontra-se na terceira forma normal
U so da ferramenta SQL Profiler para captura das instrues (3FN) se j estiver na segunda forma normal (2FN) e se no exis-
SQL enviadas para o servidor; tir a anomalia da dependncia transitiva ou indireta entre um
Anlise do plano de execuo, estatsticas de acesso, I/O e ou- atributo e a chave primria. Portanto, uma estrutura de dados
tras caractersticas envolvidas na execuo de instrues SQL; estar na terceira formal normal (3FN) se todos os seus atributos
A nlise das tabelas e views de metadados (DMV Data Mana- dependerem funcionalmente apenas da chave primria e de
gement Views) para identificao das caractersticas e detalhes nenhum outro atributo. Exemplo: em um cadastro de clientes
de uso dos ndices nas tabelas; temos um identificador numrico (chave primria), o nome do
H abilitar a funcionalidade CDC (Change Data Capture) para cliente e a sua cor preferida. Suponha que a cor preferida seja
monitorar o acesso a certos objetos do banco de dados; relacionada ao nome do cliente e no ao seu identificador que
H abilitar a auditoria de logins do SQL Server; a chave primria. Este exemplo simples mostra como a estru-
Monitorar a quantidade de acessos realizados por meio de tura no estaria na terceira forma normal, pois a cor preferida
um performance counter no performance monitor do Windows, depende funcionalmente (dependncia transitiva) do nome do
exclusivo para o SQL Server; cliente que no a chave primria da tabela.

60 SQL Magazine Edio 101


3. Uma empresa usa fitas como sua mdia principal de armaze- dos demais tipos e facilitar a administrao. E cada jogo de trs
namento de backup em toda a organizao. Backups completos fitas pode ser separado por grupo de servidores, evitando-se
so executados de segunda a sbado. O ambiente contm muitos confundir os backups de diferentes aplicaes.
servidores de backup, fazendo backup de diferentes grupos
de servidores. 4. O departamento de TI de um banco promete acesso dos
Os aplicativos de e-mail e banco de dados tm de ser fechados clientes tabela de taxas de converso monetria entre 10h00
durante o processo de backup. Devido ao ambiente de backup e 16h00 de segunda a sexta-feira. A atualizao da tabela
descentralizado, a capacidade de recuperao muitas vezes feita todos os dias s 09h00. O processo de atualizao leva 35
comprometida. H fitas demais que precisam ser montadas para minutos para terminar. Na quarta-feira, devido a um banco
executar uma recuperao completa no caso de falha total. O de dados corrompido, a tabela de taxas no pde ser atuali-
tempo necessrio para recuperao longo demais. zada. s 10h05 foi constatado que a tabela continha erros. A
A empresa quer implantar um ambiente de backup fcil de ser verificao foi executada por 15 minutos e a tabela de taxas foi
gerenciado. Ela precisa reduzir o tempo em que os aplicativos disponibilizada para as agncias. Qual foi a disponibilidade
de e-mail e banco de dados ficam indisponveis e diminuir o da tabela de taxas na semana em que este incidente ocorreu,
nmero de fitas necessrias para recuperar completamente um supondo-se que no houve outros problemas?
servidor em caso de falha.
Proponha uma soluo de backup e recuperao considerando Resposta: Considerando que a disponibilidade total do servio
as necessidades da empresa. Justifique explicando como sua em um dia de 6 horas, ou 360 minutos (6 x 60), temos que
soluo assegura que os requisitos sero atendidos. a disponibilidade total em uma semana de 1.800 minutos
(5 x 360).
Resposta: Neste cenrio h a necessidade de atender os se- Na fatdica quarta-feira um problema foi detectado s 10h05
guintes requisitos: e, supondo que o processo de verificao de 15 minutos foi
Backups dirios (segunda a sbado); iniciado nesta hora, temos que o servio foi iniciado s 10h20.
Backups de diferentes grupos de servidores com aplicativos Neste dia a disponibilidade foi de 340 minutos (360 - 20), ou de
de e-mail e banco de dados; 94,444%. J a disponibilidade nesta semana foi de 1.780 minutos
Tempo de recuperao curto; (1.800-20), ou de 98,888%.
Backup fcil de ser gerenciado;
Diminuir o nmero de fitas para recuperao em caso de 5. Uma organizao est planejando uma migrao no data
falha. center. Ela s pode tolerar um mximo de duas horas fora do
ar para completar a migrao. Explique como a tecnologia
A primeira sugesto a utilizao de um servidor de backup de replicao pode ser usada para satisfazer os requisitos de
centralizado. Desta maneira fica mais fcil gerenciar o processo. tempo fora do ar.
Para atender os demais requisitos possvel mesclar diferentes
tipos de backup tais como o completo, diferencial e do log do Resposta: A tecnologia de replicao pode ser utilizada neste
banco de dados. cenrio para que os dados sejam disponibilizados em mais de
Para montar uma estratgia de backup detalhada e atender um local. No exemplo possvel montar uma replicao entre o
plenamente os requisitos preciso conhecer detalhes inter- local onde os dados esto atualmente (um servidor localizado
nos do banco de dados e tambm seu volume, frequncia de fisicamente na organizao) e o servidor localizado no data
atualizao, estilo de aplicao (OLAP x OLTP) e outras carac- center. Esta replicao pode ser configurada de modo que haja
tersticas. Contudo, para o cenrio em questo, recomenda-se uma transferncia inicial dos objetos e estruturas do banco de
a utilizao de um backup completo por semana, intercalado dados (snapshot) atual origem para o banco de dados no servidor
por um backup diferencial por dia e um backup de log a cada do data center, sem que o banco de dados fique fora do ar. Em
hora. Desta maneira o tempo de indisponibilidade reduzido, seguida os dados vo sendo copiados pelo processo de replicao
pois os backups de log e diferencial no precisam fechar as unidirecional enquanto todas as aplicaes cliente (web sites,
aplicaes para serem realizados. sistemas ERP, etc.) acessam apenas o servidor de origem.
Esta abordagem tambm diminui o tempo de restaurao, pois Uma vez que ambos os ambiente estejam completamente sin-
preciso apenas restaurar o ltimo backup completo, mais o l- cronizados, preciso habilitar o banco de dados do ambiente
timo backup diferencial e o ltimo backup de log, dependendo de destino (datacenter) para que ele aceite as conexes das apli-
do ponto no qual se deseja restaurar o banco de dados. Como caes que, por sua vez, devem ser configuradas para acessar o
os backups diferenciais e de log ocupam menos espao que o novo servidor no datacenter. Deste modo o tempo de duas horas
backup completo, menos fitas sero necessrias e o tempo de fora do ar ser apenas para mudar as configuraes do banco
restaurao tambm ser diminudo. A propsito, recomenda- de dados de destino e para redirecionar todas as aplicaes
se utilizar trs jogos de fitas para separar os backups completos para se conectarem nesta nova fonte dados.

Edio 101 SQL Magazine 61


Questes de banco de dados do concurso da PRODAM (2012)

Concluso Mauro Pichiliani (@pichiliani)


As questes da prova cobraram diversos assuntos fundamen- pichiliani@uol.com.br
tais para quem vai trabalhar com banco de dados, incluindo bacharel em Cincia da Computao, mestre e doutorando pelo
conceitos tericos de banco de dados e aspectos relacionados ITA (Instituto Tecnolgico de Aeronutica) e MCP, MCDBA e MCTS.
modelagem. A dificuldade das questes desta prova con- Trabalha h mais de 10 anos utilizando diversos bancos de dados, como
o SQL Server, Oracle e MySQL. colunista de SQL Server do web site
dizente com um profissional de nvel jnior ou pleno que
iMasters (http://www.imasters.com.br) e mantenedor do DatabaseCast (@database-
tenham tido uma slida formao em banco de dados e em cast), o podcast brasileiro sobre banco de dados.
desenvolvimento de sistemas em geral.
A prova apresentou alguns pontos peculiares que no so
muito comuns em concursos pblicos. Um destes pontos Download do edital, gabarito e resultados
a falta de imagens para serem analisadas nas questes de http://www.caipimes.com.br/prodam012011/editais.asp
modelagem, pois comum encontrar pequenos modelos com
imagens ou mesmo telas das aplicaes neste tipo de prova. De
forma semelhante, no houve nenhuma questo que cobrasse
conhecimentos da linguagem SQL, a principal ferramenta de D seu feedback sobre esta edio! eu
Feedback

s
D
trabalho para quem utiliza banco de dados. A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que

sobre e
Uma crtica em relao prova vai para a questo que cobrou voc, leitor, acha da revista!

s
ta
edio

conhecimentos do tipo de backup. Como citado na correo, o D seu voto sobre este artigo, atravs do link:
enunciado desta questo ambguo e d margem para a anu- www.devmedia.com.br/sqlmagazine/feedback
lao da mesma. Alm disso, destacam-se alguns conceitos que
raramente so utilizados na prtica e termos no usuais.
Um ponto positivo a ser destacado a abordagem utilizada
para as questes dissertativas, pois elas cobram do candidato
a habilidade para explicar conceitos, analisar cenrios, sugerir
alternativas e realizar clculos de alta disponibilidade. Todas
estas habilidades so muito teis no dia a dia e devem ser co-
nhecidas por quem deseja trabalhar com banco de dados.

62 SQL Magazine Edio 101


Banco de Dados/Persistncia Nesta seo voc encontra artigos banco de dados, SQL ou persistncia

Trabalhando com
listas dinmicas
Compreendendo a utilidade de organizar dados
dinamicamente

N Resumo DevMan
aturalmente, os bancos de dados nos oferecem
acesso a dados e tal acesso pode acontecer
concorrentemente por muitos usurios. Nes- De que se trata o artigo:
tes casos, o acesso deve ser feito de forma prudente. O Este artigo apresenta os conceitos de alocao dinmica e esttica de
acesso simultneo exige uma anlise da quantidade de memria. A alocao da memria ocorre em tempo de execuo, poden-
usurios, velocidade da rede, configurao do servidor e do ser esttica, quando os elementos estiverem ordenados (como em
muitas outras variveis. No geral, uma boa prtica rea- variveis globais e/ou arrays), ou dinmica, quando os dados estiverem
lizar o acesso ao banco de forma prudente, minimizando desordenados. Sero descritas as vantagens e desvantagens de cada
o fluxo de dados entre servidor e cliente. A realizao tipo de alocao.
de muitos acessos simultneos pode demandar um
fluxo de dados alto, resultando em lentido no sistema, Em que situao o tema til:
excesso de processamento no servidor e processamento O presente artigo til na implementao de rotinas para organizao
desnecessrio de consultas. de informaes originadas ou destinadas a bancos de dados. Em alguns
Uma vez feita uma consulta que ser utilizada di- casos, a alocao esttica de memria mais eficiente, ao passo que, em
versas vezes, prudente alocar o resultado da mesma outros casos, a organizao deve ser feita de forma dinmica.
em memria do computador cliente. Para alocao de
memria em diferentes linguagens de programao, Trabalhando com listas dinmicas:
temos diversas possibilidades. Neste ponto, se torna im- Neste artigo sero apresentados os benefcios da organizao de
portante conhecer conceitos discutidos fortemente em dados em estruturas dinmicas e estticas, indicando as vantagens de
disciplinas de linguagens de programao e estruturas cada uma delas. Frequentemente os resultados de consultas feitas em
de dados: listas, pilhas, filas e arvores. Conheceremos bancos de dados so utilizadas para realizao de operaes onde
um pouco mais sobre estas estruturas mais adiante necessrio identificar cada elemento isoladamente. Neste tipo de oca-
neste artigo. sio necessrio criar elementos de memria para armazenamento dos
O utra situao em que a organizao de dados em dados de forma dinmica. Para tais operaes deve ser implementada
memria importante quando o usurio realiza uma a alocao adequada.
sequncia de operaes que geram dados em muitas
tabelas. Para evitar o envio de dados para o banco
muitas vezes, mais aconselhado organizar os dados
em memria e enviar para o banco de dados de tempos Nos casos mais genricos, os bancos de dados so acessados por
em tempos ou quando a operao for finalizada. Esta computadores com hardware que oferecem memria em quantida-
organizao mais trivial do que quando estamos or- des superiores a 1GB. Nestes tipos de ocasio, o programador pode
ganizando dados no caminho inverso, isto , obtendo alocar memria dinamicamente no computador cliente, de forma
dados do servidor para uma possvel manipulao e a no utilizar recursos do servidor, tendo em vista que o mesmo
posterior envio. Tal operao exige manter a integri- ser acessado por muitos usurios. Mesmo que o limite de 1GB
dade dos dados, tais como relacionamentos anteriores, seja ultrapassado, ainda mais prudente alocar memria virtual
chaves primrias etc. do que aumentar o fluxo de dados entre servidor e cliente.

Edio 101 SQL Magazine 63


Trabalhando com listas dinmicas

Listas dinmicas As listas dinmicas, independente da como endereo para prximo o valor
ma lista dinmica (ver Nota DevMan 1)
U linguagem adotada, oferecem a possibili- zero (Null ou GND). Diante disso, sabemos
se assemelha a um array, que j larga- dade de organizar os dados na memria, que tal elemento o ultimo elemento.
mente utilizado nas linguagens de pro- ocupando apenas o espao necessrio. Continuando nossa anlise, a Figura 2
gramao. No entanto, existe uma grande Ao criar uma lista, temos um dado ou apresenta uma ilustrao de uma operao
diferena entre uma lista dinmica e um conjunto de dados ocupando o espao na de remoo em uma lista simplesmente
array. O array definido com um ta- memria e alm dos dados em si, temos encadeada. Perceba que uma remoo ape-
manho fixo durante o desenvolvimento do o endereo do prximo dado ou conjunto nas implica na modificao do endereo
programa e no muda. J a lista dinmica de dados. Em seguida, sero apresentadas para prximo no conjunto precedente ao
apresenta tamanho indeterminado, ou algumas figuras com a representao e conjunto a ser removido.
seja, seu tamanho vai sendo modificado operaes (remoo e insero) em listas J a Figura 3 apresenta uma operao
conforme o programa utilizado pelo simplesmente encadeadas. de insero em uma lista simplesmente
usurio. Neste caso, o sistema ir alocar Veja na Figura 1 um exemplo ilustrativo encadeada.
apenas a quantidade de memria neces- de uma lista dinmica simplesmente en- Perceba que uma insero implica na
sria. importante destacar que o progra- cadeada ou lista ligada. modificao de endereo para prximo
mador pode determinar limites a fim de Neste tipo de lista cada elemento no conjunto precedente ao conjunto a
no deixar o sistema lento. Isso quer dizer, constitudo de um dado ou conjunto de ser inserido, sendo que o conjunto a ser
alocar memria dinamicamente mas com dados seguido do endereo de memria inserido deve conter o endereo de seu
um limite pr-determinado. do prximo dado. O ltimo elemento tem conjunto sucessor.
Alm da lista dinmica simplesmente
encadeada, temos tambm as listas cir-
culares e listas duplamente encadeadas.
Estas por sua vez implicam em mais con-
trole. A Figura 4 apresenta um exemplo
de uma lista circular.
A vantagem da lista circular que esta
possibilita a busca a partir de qualquer ponto
dela, pois o ltimo elemento tem o endereo
Figura 1. Modelo de lista simplesmente encadeada. do primeiro, ou seja, no necessrio se po-
sicionar no incio dela para percorr-la com-
pletamente. Ao identificar que o endereo
para prximo chegou ao endereo inicial,
a lista foi completamente percorrida.
J a Figura 5 ilustra uma lista duplamente
encadeada. Conforme visto, uma lista enca-
deada consiste em um conjunto de dados/
endereo. Tal conjunto definido por uma
estrutura que armazena um dado, ou con-
Figura 2. Operao de remoo em uma lista simplesmente encadeada junto de dados e, principalmente, o endereo

Nota do DevMan 1
Listas Dinmicas
Para uma exemplificao de listas dinmicas, podemos
imaginar um conjunto de dados que desejamos armazenar
informaes relativas a clientes de uma loja. Tal conjunto pode
ser muito varivel, neste caso fica impossvel criar um conjunto
de variveis, pois no sabemos ao certo qual a quantidade de
clientes. Outro exemplo para uma lista dinmica: podemos
indicar um cupom fiscal de uma loja qualquer, podemos
imaginar a criao de 100 espaos, mas se algum comprar
101? Neste caso, melhor criar 1000 espaos, mas isso seria
desperdcio, levando-se em conta que a quantidade de itens
nem sempre ser to alta.
Figura 3. Operao de insero em uma lista simplesmente encadeada.

64 SQL Magazine Edio 101


para o prximo (ou endereo para anterior e
prximo no caso de listas duplamente enca-
deadas). O ltimo conjunto (dado/endereo)
tem o endereo nulo (zero). A insero de
valores neste tipo de estrutura pode ser feita
no incio, no fim ou em uma posio central,
no entanto, uma posio central demanda
mais modificaes.
Visto o conceito sobre listas, percebemos
que uma desvantagem surge: manter e
Figura 4. Ilustrao de uma lista circular
controlar o endereo para o prximo, ou
no caso de listas duplamente encadeadas,
manter e controlar o endereo para o
prximo e endereo para o anterior.
Realmente esta uma desvantagem deste
tipo de organizao.
Q uando se trata de uma quantidade
pequena de dados, uma alocao esttica
pode ser a melhor soluo.
Figura 5. Ilustrao de uma lista duplamente encadeada
Pilhas e Filas
Alm de listas temos tambm as pilhas e Listagem 1. Criando um vetor com tamanho indefinido
filas, que so estruturas semelhantes a lis-
vector<int> idades; //cria um vetor de inteiros de tamanho indefinido
tas, porm com algumas limitaes. Pilhas int valor;
podem apenas receber conjuntos novos char op;
no topo e a retirada de conjuntos pode ser do{
cout<<digite uma idade;
feita apenas no topo. Este tipo de estrutura cin>>valor;
tambm chamado de FILO (first in, last idades.push_back(valor); //insere o valor no fim do vetor
out primeiro a entrar, ltimo a sair). fflush(stdin);
cout<<deseja digitar uma idade? (s/n);
J as filas obedecem organizao de cin>>op;
permitir a sada apenas na ordem que os }while (op==s);
conjuntos foram inseridos. Estas estruturas cout<<Foram digitadas <<sizeof(idades)<< idades; //imprime na tela quantas idade foram digitadas

tambm so chamadas de FIFO (first in, first Listagem 2. Criando um array


out primeiro a entrar, primeiro a sair).
int valores[]= new int[12];

Alocao dinmica e a linguagem C ++


Em C++ temos o new que cria objetos
(array pode ser criado com new) e delete armazenamento de valores na memria. dados, adicionar elementos a essas colees,
que deleta objetos criados por new. Apesar Na Listagem 1 temos um exemplo de alo- remover, alterar, procurar por elementos,
do C++ aceitar malloc e new, no devemos cao dinmica de memria em C++. Per- ordenar uma sequncia qualquer, etc.
misturar os dois estilos. O espao alocado ceba que inicialmente criamos um vetor
por malloc no pode ser liberado por delete; de inteiros chamado idades. Na sequncia, Alocao dinmica e a linguagem Java
os objetos criados por new no podem ser inserimos um conjunto de valores nele e, Em Java temos recursos para manipula-
deletados por free. por fim, imprimimos na tela as idades que o de dados, tais como Vector e Hastable. A
A linguagem C++ prev que muitos foram cadastradas no vetor. partir do Java 1.2 o framework Collections
programadores utilizem programas de- Na linguagem C++ existem os trs tipos oferece ArrayList e HashMap. No Java 1.4
senvolvidos em C, por isso malloc e free de alocao de memria que foram cita- temos o List, LinkedList, LinkedHashMap,
podem ser utilizados, no entanto, duas dos anteriormente: listas, pilhas, filas e, LinkedHashSet. No Java 5 vieram as classes
outras funes so oferecidas para o uso tambm, rvores. Todos eles exigem que o EnumSet, EnumMap, Queue e blocking-
de memria: calloc e realloc. programador libere a memria aps o uso. Queue.
Neste contexto, a classe Vector do C++ Alm disso, temos tambm recursos de Analisando o array no Java, vemos que
pode colaborar muito, pois permite aloca- manipulao de dados, que possibilitam basta indicar o tipo e tamanho do mesmo,
o dinmica de posies de memria para tarefas comuns, tais como: criar colees de conforme mostra a Listagem 2.

Edio 101 SQL Magazine 65


Trabalhando com listas dinmicas

O array valores proposto na Listagem 2 permite o armazena- Por fim, importante estar atento ao fato de que a alocao
mento de 12 inteiros. Desta forma, temos um conjunto de dados de memria ocorre reservando rea de memria que no con-
onde cada um deles tem um endereo identificado por um nmero, tnua (um ao lado do outro), isto , cada elemento do conjunto
de forma bem simples. Com relao quantidade de memria no fica sequencialmente na memria, o que implica em um
ocupada pelo array, temos que um inteiro em Java ocupa 4 bytes processamento diferente caso estivessem dispostos de forma
(em C e C++ isso ocorre da mesma forma, 4 bytes para inteiros, contgua na memria. Como citato anteriormente, a alocao
indicando que cada inteiro ocupa 4 x 8(bits) = de 32 bits, o que dinmica de memria feita nas partes livres da memria, que
significa valores de -2147483648 at 2147483647), portanto o array nem sempre esto dispostas sequencialmente, o que pode gerar
valores ocupa 12 x 4 bytes = 48 bytes. o fragmentao de memria.
Caso desejssemos acessar o primeiro valor do conjunto valores,
deveramos nos referenciar assim: valores[0], j o ltimo elemento Concluses
seria valores[11]. A organizao dos resultados de consultas feitas em bancos de
Vemos que este tipo de estrutura no deve ser utilizada para dados, ou mesmo em arquivos texto, xml, pdf etc muitas vezes
armazenar dados cuja quantidade de elementos um valor des- exige alocao de memria do sistema em quantidades desco-
conhecido, pois obrigatrio indicar o tamanho da estrutura na nhecidas. Nestes casos, devemos alocar memria dinamicamen-
sua criao e no pode ser modificado no decorrer do programa, te. Esta tcnica permite utilizar recursos de hardware de forma
nem mesmo durante sua utilizao. organizada e prudente, evitando utilizao desnecessria.
Para armazenamento de valores de tabelas possvel utilizar Porm, em casos onde se saiba previamente que a quantidade
arrays bidimensionais, mas isso tambm no uma boa prtica. de memria no vai variar muito nem precisa de valores altos,
A partir do Java J2SE 5.0 podemos contar com listas de argumentos deve ser adota a alocao esttica mesmo, pois est oferece
de comprimento variado. Este recurso permite criar um mtodo maior velocidade de acesso e ordenao, j que cada elemento
que receba uma quantidade de valores indefinida e armazene-os acessado diretamente e os mesmos esto em reas sequenciais
na ordem desejada. Tal recurso pode auxiliar no armazenamento na memria.
temporrio de resultados de consultas. Como vimos, a vantagem de alocao dinmica consiste em
Outro recurso que pode ser utilizado para armazenar dados o poder aumentar e reduzir o tamanho ocupado de memria na
List. List uma coleo (da classe Collection) que oferece recursos media em que o programa for utilizado. Isto est diretamente
de acessar e manipular elementos, no nosso caso resultados do associado a sua principal vantagem que impedir o desperd-
banco ou dados que sero levados para o banco. List consiste de cio de memria alocada desnecessariamente. A desvantagem,
ArrayList, Linkedlist e Vector. O uso de ArrayList ou Vector, atende por outro lado, est no fato de que os dados nas organizaes
necessidade de cuidado com memria, pois tais elementos con- dinmicas no se encontram armazenados sequencialmente
sistem de conjuntos redimensionveis. ArrayList mais rpido na memria, ao contrrio dos dados armazenados em array
do que Vector pois no sincroniza seus estados entre as vrias de tamanho fixo (esttico).
threads. Entretanto, o mais adequado mesmo utilizar a estrutura
linkedList.
J na utilizao de Vector importante definir corretamente seus Marcelo Josu Telles
parmetros, pois por padro este aumenta de tamanho pelo seu marcelojtelles@gmail.com
dobro quando precisar de mais espao de armazenamento. O valor Graduado em Licenciatura da Computao pela Universidade
em dobro pode significar um aumento muito grande quando se Feevale, no ano de 2007 e Especialista em informtica
trata de uma estrutura com muitos dados. na Educao pela UFRGS. Cursou disciplinas do Programa de Ps
Graduao em Computao na UFRGS (PPGC-UFRGS), como aluno
especial. Atua como professor desde 2008. Atualmente leciona na Escola de Educa-
Vantagens e desvantagens
o Profissional Olmpio, Escola de Educao Bsica Feevale Escola de Aplicao e
Deixar a cargo do usurio a responsabilidade de liberar memria
no Colgio Sinodal. Leciona as disciplinas de lgica de programao, linguagens de
quando ele terminar de utilizar pode ocasionar erros como, por programao, eletrnica para computao, sistemas operacionais, bancos de dados
exemplo, liberar um local de memria antes que tenha realmente e robtica. Trabalha com desenvolvimento de software nas linguagens PHP, Java e
finalizado a utilizao do mesmo. Acessar um local de memria Visual Basic.
que foi deletado ou liberado ir causar um erro de execuo ou
violao de memria ou, ainda ser acessado um local que est
sendo usado para um propsito completamente distinto. D seu feedback sobre esta edio! eu
Feedback
s
D

O problema tambm ocorre se um espao no for liberado por A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que
sobre e

esquecimento. Caso isso ocorra, o usurio do programa ser preju- voc, leitor, acha da revista!
s

ta
edio

dicado, pois alguns benefcios da alocao dinmica sero perdidos.


D seu voto sobre este artigo, atravs do link:
Em algumas circunstncias, por exemplo, em casos de acesso a
www.devmedia.com.br/sqlmagazine/feedback
memria virtual, isso pode ocasionar lentido no sistema.

66 SQL Magazine Edio 101


Edio 101 SQL Magazine 67
Trabalhando com listas dinmicas

68 SQL Magazine Edio 101

Вам также может понравиться