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
54 Questes de banco de dados do concurso da PRODAM (2012)
[ Mauro Pichiliani ]
Boa Ideia
63 Trabalhando com listas dinmicas
[ Marcelo Josu Telles ]
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.
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.
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.
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
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
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.
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
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
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
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
Introduo a projeto de
banco de dados Parte 1
Tipos de dados e chaves
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.
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
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
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
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.
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
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.
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.
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
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.
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.
<!--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.
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
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,
<!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 -->
A SQL Magazine tem que ser feita ao seu gosto. Para isso, precisamos saber o que XML Schema
sobre e
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
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
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.
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.
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.
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
Novidades para
desenvolvedores no
Oracle 11g Parte 2
Novidades da PL/SQL voltadas para
desenvolvedores de Software
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.
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
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
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,
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.
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
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.
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.
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.
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