Escolar Documentos
Profissional Documentos
Cultura Documentos
ISBN xxxxxxxxxxxxx
CDD – 00000
*Todos os gráficos, tabelas e esquemas são creditados à autoria, salvo quando indicada a referência. Informamos
que é de inteira responsabilidade da autoria a emissão de conceitos.
Nenhuma parte desta publicação poderá ser reproduzida por qualquer meio ou forma sem autorização. A
violação dos direitos autorais é crime estabelecido pela Lei n.º 9.610/98 e punido pelo artigo 184 do Código Penal.
Bons estudos!
Preparei este material apoiado na ideia de que sem um software para controlar suas
funcionalidades, um hardware acaba se tornando apenas um dispositivo
eletromecânico, praticamente sem nenhuma automatização e, assim, não existiria a
necessidade de programação como ocorre em máquinas de operação manual.
Vamos começar com uma breve introdução à teoria do banco de dados, as principais
linguagens de programação, processos e muito mais.
Bons estudos!
6
01
Introdução à Teoria
de Banco de Dados
7
Alunos, os dados, como é comum se ouvir, são a base para a existência e para o uso
do banco de dados – que funciona como repositório para variadas quantidades de
dados, com propósitos igualmente variados.
8
Diversos setores se bene ciaram com o uso de sistemas que trabalham com banco
de dados, tais como nanças, transporte, educação, comunicações, compra e venda,
indústria e entretenimento, por exemplo. De tempos em tempos, inovações
tecnológicas geram novas possibilidades de uso desses sistemas, como vem
ocorrendo com o uso cada vez maior e mais bem ltrado de dados para os setores de
marketing, serviços e produção.
Com estas inovações mais recentes aplicadas aos Sistemas SGBD, é possível adquirir
novos dados obtidos a partir de dados já existentes, decisões podem ser tomadas de
forma mais con ável e sistemas se tornam autônomos e inteligentes – o que é capaz
de reduzir a interação humana em muitas atividades.
9
Com as evoluções tecnológicas ocorridas nas últimas décadas, a própria forma como
o mercado utiliza os dados e como os gerencia sofreu mudanças em função não
apenas das evoluções, mas de novas formas de oferta de serviços que permitiram ao
mercado trabalhar de forma diferente os Sistemas Gerenciadores de Banco de
Dados.
10
Pontos de atenção em Sistemas de
Gerenciamento de Banco de Dados
Sistemas do tipo SGBD possuem certas características comuns neste tipo de sistema
que se tornou a base das atividades do mercado de indústria, comércio e serviços,
além de muito do que está relacionado à sociedade. Silberschatz (2020) cita algumas
situações importantes que devem ser observadas em um SGBD e, na sequência,
estes pontos são trabalhados de forma a oferecerem uma maior compreensão de
como funcionam os sistemas de gerenciamento de banco de dados.
Uma das características relevantes em sistemas desse tipo se relaciona com a forma
como os dados são gerados e o controle sobre eles, pois é comum que dados
pessoais, por exemplo, sejam inseridos em diversos sistemas separados de empresas
distintas, mas possam também estar inseridos em bases de dados distintas numa
mesma empresa, com formatos diferentes e sem que uma base enxergue a outra.
Desta forma, ocorre a chamada redundância em dados que remetem à ideia de que
existam dados repetidos, mas não desnecessários, por estarem em bases distintas de
sistemas que não se comunicam, mas que em certos casos, poderiam ser otimizados
em sistemas que podem se comunicar.
Outro aspecto relevante é que um SGBD deve ser implementado como qualquer
outro software, seja ele desenvolvido por uma equipe própria da empresa, por uma
empresa terceira, ou comprado como software de prateleira, como são chamados
os softwares prontos comprados no mercado – como sistemas operacionais, por
exemplo. É que eles devem atender às demandas relacionadas ao cotidiano de
trabalho com os dados, mas solicitações pontuais podem não ser contempladas.
Fica a critério de uma avaliação para se optar pela melhor solução nesse caso, pois
entram pontos a serem levados em consideração como a frequência com que este
relatório pode ser utilizado e os custos envolvidos em termos de tempo e valores
para as duas opções de solução para a demanda.
11
Outro ponto de atenção no desenvolvimento de um SGBD é que à medida que
aumenta de tamanho e complexidade, podem ser que dados de bancos diferentes
sob um mesmo sistema e armazenados em estruturas e formatos diferentes façam
com que atualizações no sistema que necessitem uni car esses dados sejam mais
complexos em sua implementação.
12
Existem sistemas que permitem que diversos usuários ou processos
acessem a mesma base de dados de forma simultânea, e isto também
pode ocasionar problemas com dados, pois processos ocorrendo em
paralelo podem estar tentando acessar ou alterar um mesmo dado e
situações como a leitura de um dado desatualizado ou falha por
requisições que ocorrem exatamente no mesmo instante de forma
concorrente podem ser problemáticas também.
Conceitos Fundamentais
Os dados são uma representação virtual da realidade podendo se referir às
características de coisas reais como nomes, cores, valores, etc. e objetos podem ser
identi cados por um determinado conjunto de dados que o diferencie de outros
objetos.
Uma importante característica de um SGBD é que ele deve fornecer visões dos
dados, ou seja, meios para que esses dados sejam visualizados e modi cados dentro
da proposta do sistema.
Silberschatz (2020) cita que a chamada abstração de dados é utilizada para que
aquilo que é relevante do modelo real seja utilizado como base para os dados do
SGBD, e esta abstração envolve aspectos ligados ao nível físico e ao nível lógico do
problema, em que os dispositivos e métodos de armazenamento se referem à parte
física, e a organização dos dados e as relações entre eles estão no nível lógico, um
pouco mais elevado e perceptível do sistema.
13
Um terceiro nível, mais alto e visível, é o nível de visão no qual aquilo que é
necessário do SGBD é exibido em determinado momento, de forma ltrada e
adequada aos propósitos do sistema para os usuários.
O termo esquema se aplica aos três níveis citados: físico, lógico e de visão, sendo que
no nível de visão é comum o uso do termo subesquema em função de poder existir
diferentes visões com base nos dados.
Outra parte importante do estudo de banco de dados são os modelos utilizados para
descrever dados e relações entre eles, de forma a permitir a de nição teórica dos
três níveis citados anteriormente, sejam físico, lógico ou de visão:
14
A manipulação de sistemas de gerenciamento de banco de dados pode
ser feita por meio de uma linguagem especí ca para esta nalidade, como
é o caso da linguagem SQL. Pode-se dividir a linguagem em uma parte
para de nição de dados ou DDL (Data De nition Language) e outra parte
com comandos para a manipulação de dados ou DML (Data Manipulation
Language).
15
02
Projeto de Banco
de Dados
16
Olá novamente!
17
Processo do Projeto
Partindo dos requisitos de nidos como necessidades que um SGBD deve atender,
esta representa a primeira e não menos importante fase do projeto de um sistema
gerenciador, sendo que a de nição dos requisitos de cada sistema são obtidos a
partir de entrevistas e outros meios que permitam que se descubram todas as
informações necessárias para se de nir um esquema para um banco de dados e o
mesmo represente, de forma adequada, as estruturas de dados que sejam
compatíveis com o que se espera do sistema.
Pensando no modelo relacional, por exemplo, dentre outras ações, é preciso abstrair
do problema real, os dados e suas características a serem utilizadas para a
estruturação de tabelas, lembrando que nesta etapa de projeto inicial, não há nada
implementado ainda, e os custos de mudanças são insigni cantes em relação a
mudar tabelas em sistemas prontos e em uso.
18
Modelo Entidade Relacionamento
(ER)
Dentro da modelagem, o uso de diagramas entidade relacionamento pode se
constituir em um excelente material para auxiliar na modelagem de forma intuitiva e
de fácil compreensão, inclusive para clientes leigos que precisem compreender o que
está sendo desenvolvido para atender às suas demandas.
Esse modelo permite especi car, de forma conceitual, problemas reais por meio da
estruturação de entidades e relações que possam existir entre estas dentro da
proposta das regras de negócio que devem ser respeitadas no desenvolvimento de
um SGBD.
19
Um termo utilizado na modelagem ER é o papel da entidade, dado a uma entidade
que participe de um relacionamento, sendo o termo utilizado para identi car
entidades que estejam em um mesmo conjunto de entidades, mas que em
determinadas situações, assume diferentes situações, como no caso de pessoas em
um cadastro de colaboradores em que cada uma tem uma função especí ca dentro
da hierarquia da empresa (vendedor, gerente, nanceiro, etc.).
20
pessoa curso
1 João Aluno 1 TI M
3 Marta Aluno
disciplina
1 Matemática 10
2 Português 10
Fonte: O autor.
Na imagem anterior, são exempli cados três conjuntos de entidades que podem se
relacionar devido à geração de alunos matriculados em turmas com professores
vinculados e, assim, gerar um relacionamento entre entidades que poderiam ser
exempli cadas, com o aluno João matriculado na turma A, do turno da manhã, do
curso de Letras, com o professor Pedro, por exemplo, mas observando os dados, é
preciso que seja gerado um relacionamento que contenha algum meio de unir estas
entidades diferentes do modelo e, então, pode-se pensar em atributos descritivos
para identi car as turmas com alunos matriculados.
21
Com isto, poderia ser gerada uma turma 1 a partir do relacionamento das entidades,
e o aluno 1 da chamada poderia ser João (código_p = 1) e o aluno 2, Marta (código_p =
3), ambos inscritos na disciplina de Matemática (código_d = 1), no curso de TI, no
período da manhã (código_c = 1).
Os atributos podem ser chave de uma entidade ou não, sendo que os atributos chave
não podem, de forma alguma, receberem dados repetidos, pois ocorreria perda de
integridade do banco de dados.
Pode acontecer de a chave ser formada por mais de um atributo e, neste caso, um ou
outro dos atributos que compõem a chave chamada composta pode receber dados
iguais, mas o conjunto de atributos da chave composta de uma entidade nunca pode
ser igual ao de outra entidade.
Atributos podem conter um valor único como é o caso da maioria dos atributos
de nidos em relações, mas podem ocorrer casos em que atributos podem conter
valores múltiplos, como no caso de uma pessoa poder possuir um ou mais números
de telefone, veículos ou endereços, por exemplo.
22
a primeira é chamada um-para-um e ocorre quando uma entidade
de um conjunto de entidades A se relaciona com apenas uma
entidade de outro conjunto de entidades B, por exemplo.
a segunda é chamada de um-para-muitos e ocorre no caso em que
uma entidade do conjunto A se relaciona com mais de uma
entidade do conjunto B.
a terceira forma de cardinalidade é a muitos-para-um, que ocorre
da forma inversa da anterior, na qual várias entidades do conjunto
A podem se relacionar com apenas uma entidade do conjunto B.
a quarta é a muitos-para-muitos, pois permite que haja
relacionamento entre várias entidades do conjunto A com várias do
conjunto B e vice-versa, ilustrando casos em que é comum a não
exclusividade das relações entre entidades como em locações de
veículos onde pessoas alugam carros, sendo que um carro pode ser
locado por várias pessoas e uma pessoa pode locar diferentes
carros.
23
Diagrama Entidade Relacionamento
A construção do modelo ER não é apenas textual ou baseado em tabelas, mas pode
conter diagramas estruturados de maneira que as diferentes formas utilizáveis na
construção de diagramas sejam todas úteis e bem diferenciadas em suas funções.
Imagem 4
nome_cli
cod prod
cod cli prod desc
Quantidade
Fonte: O autor.
24
“quantidade”.
Imagem 5
nome_cli
cod prod
cod cli prod desc
Telefone Quantidade
Idade
data_nasc
Fonte: O autor.
25
Para compreender como são estruturados os diagramas ER, é
interessante pesquisar diagramas prontos a m de identi car os
diferentes símbolos, interpretá-los e entender por que foram escolhidos
na elaboração do diagrama. Outra forma de aprender melhor o uso dos
diagramas é imaginar modelagens diversas e tentar criar diagramas
utilizando os símbolos que julgar adequados e, no nal da criação,
observar se o diagrama é compreensível em sua proposta e se os
símbolos parecem adequadamente utilizados.
26
03
Banco de Dados
Relacionais
27
Olá, alunos!
Com base no modelo relacional, o banco de dados relacionais trabalha com base em
estruturas organizadas em tabelas que de nem quais dados e características (ou
atributos) devem ser aceitos e como devem ser inseridos.
Dois pontos importantes a serem considerados são que a linguagem SQL costuma
ser a linguagem base para uso em um SGBD e que se baseia em comandos dos
tipos DDL e DML para a de nição dos dados e sua manipulação, respectivamente.
Tendo como base o uso de tabelas que são formadas por linhas e colunas numa
estrutura bidimensional, cada coluna de uma tabela representa um tipo de dado
de nido por certas características, sendo que o conjunto das colunas é a
representação de uma ocorrência do que está sendo representado pela tabela, seja
um cadastro de pessoas, veículos, vendas, etc.
Para criar tabelas, é preciso conhecer, por exemplo, os comandos DDL da linguagem
SQL para de nir as características dos campos de uma tabela de forma que recebam
dados adequados aos requisitos de nidos em regras de negócio ou outras regras
que de nam quais tipos de dados serão armazenados.
28
Uma tabela pode ser gra camente representada, como mostra a imagem 7, que traz
uma tabela de cadastro de produtos em um banco de dados hipotético qualquer,
sendo que a primeira linha desta tabela representa títulos que nomeiam as colunas
de dados, servido de referência para eles e sendo chamados de atributos.
Imagem 7
1 PRODUTO A 100
2 PRODUTO B 200
3 PRODUTO C 300
Fonte: O autor.
É comum que sejam usados os termos relação para se referenciar tabelas e tuplas
para linhas da tabela, ou seja, em uma relação, uma tupla é o conjunto de dados
relacionados entre si que delimitam um objeto real representado, podendo-se
também utilizar o termo registro para linhas.
29
Um aspecto importante é que na tabela, a ordem das tuplas é determinada pela
ordem de inserção das mesmas na tabela ou outra regra como a ordenação dos
dados de determinado atributo, como no caso dos dados de CÓDIGO, no exemplo da
imagem 7.
Geralmente, são de nidos nomes iniciados com letras maiúsculas para esquemas de
relação e com letras minúsculas para relações. Veja um exemplo deste padrão de
nomenclatura:
30
Esquema_produtos = (código_produto, descrição_produto,
quantidade_produto)
Observe que uma forma de de nir um esquema para a tabela imaginada no exemplo
da imagem 7 mantém os mesmos nomes para as relações em relação aos atributos
da tabela, gerando um nome para o esquema que contém estas relações. Uma
relação produtos pode, então, ser de nida como no esquema de esquema_produtos,
em que a ideia de um esquema de relação pode ser uma representação dos atributos
e domínios de nidos para estes atributos Silberschatz (2020).
31
que se possam realizar as ações básicas de criação da tabela, inserção de dados,
leitura de dados, alteração ou até exclusão de dados.
Esses dois esquemas de relação podem ser a base para processos de inserção ou
leitura de dados especí cos do banco de dados, com o objetivo de evitar que
informações redundantes ou desnecessárias sejam utilizadas e, por isso, num dos
esquemas de relação se utiliza o atributo descrição_produto e no outro apenas
quantidade_produto, mas ocorre a dúvida em relação ao atributo código_produto
que aparece nos dois esquemas de relação.
32
Chaves
É comum que, em todos os processos de uso de dados de um banco de dados, um
ou mais atributos sejam utilizados, além daqueles realmente desejados, pois algo
fundamental na estrutura de uma tabela são atributos que servem a um propósito de
organização estrutural e ordenação das tuplas.
Estes atributos das tabelas que são necessários para sua organização são chamados
de chaves e possuem uma característica importante associada a elas que é a de não
permitirem repetição de dados. Todavia, há casos em que um atributo considerado
chave possa armazenar dados repetitivos, mas isso só deve acontecer em casos em
que a chave da tabela seja formada por este atributo e um ou mais outros atributos
que juntos não permitem a repetição de um mesmo grupo de dados nas tuplas da
tabela.
Para de nir melhor as chaves, utiliza-se o termo superchave para o atributo único
ou conjunto de atributos que possuem a função de ordenar os dados de uma tabela
e identi car individualmente cada tupla. Mas um ponto importante é que uma
superchave possui apenas os campos realmente necessários para ordenação dos
dados e, assim, é preciso atender ao princípio de que qualquer subconjunto de
atributos de uma superchave não pode ser considerado uma superchave também,
pois, neste caso, o menor conjunto seria o mais adequado como superchave.
33
Numa tabela, podem existir mais de um conjunto de superchaves possíveis e estes
conjuntos com um ou mais atributos, reforçando, são chamados de chaves
candidatas, e dentre estas, uma superchave é escolhida. Um ponto de atenção é que
subconjuntos de chaves candidatas não podem ser também chaves candidatas, pois
foge ao conceito essencial de superchave.
Outro aspecto que envolve a escolha de uma chave primária é que depois de
escolhida e implementada esta chave, é recomendável que os atributos dela não
tenham seus dados modi cados, pois isso pode gerar chaves com dados repetidos,
ferindo o propósito de sua escolha, o que pode acontecer mais facilmente em chaves
compostas por mais de um atributo.
Um conceito importante do uso de atributos como chaves é que uma tabela pode se
relacionar com outra, e isso é possível por meio de vínculos criados entre atributos
destas tabelas, de forma que quando ocorrerem repetições dos dados destes
atributos nestas tabelas, exista realmente uma ligação nesta repetição, mas isto deve
também ser estruturado com cuidado.
34
Um caso hipotético adequado seria um SGBD de uma empresa de vendas de
produtos, por exemplo, em que tabelas possam ser de nidas para o armazenamento
de dados relativos a clientes, compras, vendas, etc. Para estruturar um sistema assim,
de forma adequada e reduzindo redundâncias, os dados necessários para realizar os
processos deste negócio devem ser organizados em uma ou mais tabelas, a partir da
análise de situações de uso destes dados e escolha da melhor forma de estruturação
do banco para otimizá-lo.
Um sistema assim certamente deve possuir algo que possa cadastrar vendas, e estas,
geralmente, associam dados de clientes realizando as compras, os produtos
adquiridos e outras informações complementares como data, valores, etc. Um cliente
pode retornar ao local para novas compras ou não, mas um sistema deve prever esta
possibilidade, assim como um determinado produto pode ser adquirido pelo mesmo
cliente mais de uma vez, e também por outros clientes e, assim, começa o processo
de se estruturar um modelo para um SGBD. Neste processo, as relações entre
tabelas precisam ser muito bem desenvolvidas, pois toda a integridade do banco de
dados e o correto propósito do mesmo podem ser prejudicados por más escolhas
feitas nesta etapa.
Para gerar essas relações entre tabelas é preciso utilizar as chaves primárias
de nidas no processo de estruturação do banco e, assim, partindo do exemplo do
sistema de vendas, pode-se imaginar que as vendas podem ocorrer com ou sem a
geração de nota scal, dependendo do tipo da venda e da empresa que utilizará o
sistema. Para evitar esta inde nição para certos tipos de atividades comerciais, pode-
se usar como chave primária um valor numérico inteiro, simples, para que sejam
gerados códigos sequenciais automáticos a cada nova venda, garantindo, assim, a
não duplicidade de chaves.
Um ponto importante a ser observado e que será explorado mais adiante é que pode
ocorrer de um mesmo cliente comprar mais de uma vez e suas vendas serem
lançadas no sistema da mesma forma que seria feito com clientes diferentes que
realizaram compras diferentes. Para economizar dados armazenados no banco e
assim reduzir a redundância de dados, é possível usar de um importante recurso na
elaboração de um modelo relacional, que é agrupar atributos relacionados entre si
em uma tabela junto com outros agrupamentos de dados – lembrando que todas as
tabelas geradas devem ter chaves primárias de nidas.
35
estrangeiras. Esta relação é chamada de relação estrangeira, e a ocorrência de
dados iguais na chave primária de uma tabela e na chave estrangeira de outra indica
a ocorrência de uma relação entre as respectivas tuplas das duas tabelas.
Imagem 8
Clientes Vendas
Código_cliente Código_venda
Nome_cliente Descrição_produto
CPF_cliente Quantidade_produto
Telefone_cliente Preço_produto
Endereço_cliente Código_cliente
Fonte: O autor.
36
veri car que, neste exemplo, uma venda pode ser realizada para apenas um cliente,
mas um cliente pode realizar muitas compras, caracterizando uma relação dita 1 para
N (ou uma para muitos).
Existem casos em que existe uma relação do tipo 1 para 1 como no caso de
casamentos, nos quais uma pessoa se casa com apenas uma outra, para ns de
registro civil, mas também podem existir relacionamentos N para N (ou muitos para
muitos) ainda, em casos como o de pessoas se alimentando em praças de
alimentação onde os estabelecimentos podem atender mais de um cliente, e estes
clientes podem ser atendidos por vários estabelecimentos.
Poderia ser obtido um primeiro esboço simples de diagrama com algumas tabelas e
atributos essenciais como uma primeira proposta a ser complementada e ajustada
até que se obtenha um modelo aceitável para a de nição formal de um SGBD como
se pode observar na imagem 9.
Imagem 9
Veículos Locações
Código_veículo Código_locação
Renavam CPF_cliente
Descrição_veículo Nome_cliente
Quilimetragem_rodada Data_retirada
Observações Data_devolução
Código_veículo
Fonte: O autor.
Neste exemplo da imagem 9 é possível observar que são de nidas duas tabelas para
o cadastro de veículos e controle de locações, nas quais os atributos Código_veículo
e Código_locação são chaves primárias, e o atributo Código_veículo é repetido na
tabela de Locações como chave estrangeira para permitir o relacionamento entre as
tabelas.
37
O uso de diagramas de esquemas auxilia visualmente na compreensão da
estrutura de um banco de dados, pois ilustra as tabelas com seus
atributos e as relações de nidas entre estas tabelas, facilitando a
compreensão dos exemplos. É importante observar que a chave
estrangeira é ligada a uma chave primária através de uma seta com a
ponta apontando para a chave primária, de forma a indicar qual é o papel
de cada atributo incluído na lista em relação à tabela na qual está
inserido.
38
04
Diagramas Entidades
– Relacionamentos
Complexos
39
O uso de diagramas Entidade Relacionamento (ER) proporciona um meio bastante
e ciente de se modelar banco de dados relacionais, tendo diferenciais para a
especi cação de banco de dados bastante éis às regras de negócio e ideia de
como poderia ser uma solução para o armazenamento de dados para determinado
negócio.
40
Até então, a representação deste tipo de variação de relacionamento não era
indicada no diagrama, sendo apenas utilizada a linha simples para esta
representação geral, mas de agora em diante, a adição de setas nas linhas em
relacionamentos irá possibilitar a diferenciação dos quatro tipos. Observe a Figura
1 para conhecer as indicações de tipos de relacionamentos.
Figura 1
1 2
A
1 2
B
1 2
C
1 2
D
Fonte: O autor.
Nas ilustrações da Figura 1, podemos observar o uso de setas nas linhas que ligam
alguns dos elementos, servindo de diferenciador entre os quatro tipos de
relacionamentos.
41
A seta sempre aponta para o relacionamento equivalente a 1, ou seja, aquela
entidade de um conjunto que é a única que se relaciona com uma ou mais
entidades de um outro conjunto.
42
Figura 2
1 2
Fonte: O autor.
A Figura 2 traz um conceito a ser reforçado que é o de atributos que podem ser
adicionados em relacionamentos de forma a complementar ligação entre
entidades de dois conjuntos diferentes 1 e 2, de maneira que este atributo seja
independente das entidades em si, mas relevante a um relacionamento entre estas
entidades, como seria a data em uma venda, que não faz sentido ser associada
diretamente a um cadastro de clientes e nem ao de produtos.
Outro conceito incluso na Figura 2 é o de que é possível que entre uma entidade e
um relacionamento existam variantes na forma como a entidade se comporta,
devido ao contexto dos dados das entidades, e casos como o de cadastro de
pessoas que possuam diferentes funções em uma empresa, a forma como estes
cargos se comportam no relacionamento podem variar entre 1 e muitos.
Sobre a cardinalidade, existe uma indicação adicional que pode ser útil por indicar
os chamados limites de borda entre entidade e relacionamento que indica as
cardinalidades mínima e máxima permitidas, como se pode observar no exemplo
da Figura 3.
Figura 3
1..1 0..*
1 2
Fonte: O autor.
43
Neste diagrama da Figura 3, os limites de borda entre a entidade 1 e o
relacionamento do tipo 1..1 indicam que é obrigatória uma única entidade para
cada relacionamento, e nos limites de borda da entidade 2 com o mesmo
relacionamento está especi cado que a entidade 2 pode não ter nenhum ou vários
relacionamentos nesta situação.
44
A correta escolha de posicionamento de atributos também é importante, como já
citado, e sempre deve ser observada a lógica de cada atributo estar associado
diretamente a uma entidade, como uma característica ou ser um atributo
descritivo, que é usado apenas quando ocorre um relacionamento entre duas
entidades e este atributo contribui com a identi cação da tupla de relacionamento.
Conceitos Complementares
Os conjuntos de entidades são formados por atributos, e dentre estes atributos,
geralmente, um ou mais são selecionados para comporem a chamada chave
primária a partir de chaves candidatas, mas pode haver casos em que não haja um
conjunto adequado para se obter uma chave primária que garantidamente seja
única em cada entidade.
45
Conjuntos de entidades com chaves primárias são chamados de fortes, ao passo
que conjuntos de entidade em que não seja possível de nir uma chave primária
são ditos fracos como no caso de um conjunto de entidades com os atributos
número_parcela, nome_cliente e valor_pago, em que quaisquer dos campos
podem ter dados repetidos, e uma entidade pode ser igual à outra, pois para todos
os clientes, as parcelas são numeradas, sequencialmente, a partir do mesmo
número.
Para que se possa manter uma estrutura funcional em um banco de dados com
casos assim, é preciso que este conjunto de entidades fraco esteja relacionado com
um conjunto de entidades forte que será designado como identi cador para o
fraco.
Figura 4
1 2
Fonte: O autor.
46
Figura 5
1a 1b
Fonte: O autor.
Este triângulo invertido representa a especialização que faz com que o conjunto de
entidades 1 seja subdividido em outros conjuntos de entidades 1a e 1b que
possuem as mesmas entidades do conjunto 1, mas separadas contendo os seus
atributos especí cos.
47
de herdar atributos, não haveria necessidade de generalizar um conjunto de
entidades ou especializá-los, pois haveria muita redundância de dados e, desta
forma, apenas o conjunto geral possui os atributos e dados comuns aos conjuntos
de entidades especializados.
Assim, é possível que uma ligação entre este relacionamento da agregação seja
ligado a outro relacionamento fora da agregação sem que haja um conjunto de
entidades entre eles.
48
Figura 6
1 2
Fonte: O autor.
49
Ao instalar o SGBD MySQL, como poderá ser visto em aula posterior, existe a opção
de criação de novo modelo ER (File, New model) que abre uma interface para
criação de diagramas e é possível a criação de tabelas para a modelagem de
conjuntos de entidades, como se pode ver na Figura 7.
Figura 7
Fonte: O autor.
Com o uso desta ferramenta do MySQL, assim como outras disponíveis para uso
gratuito ou pago, pode-se elaborar a estrutura conceitual de todo o banco de
dados, obtendo-se um primeiro esboço ainda sem componentes importantes como
o da Figura 8, e que deve ser aprofundado e complementado para que seja
realmente completo e correto, mas isso varia em cada situação com base nas
regras de negócio que geram os documentos de requisitos utilizados como base na
modelagem.
50
Figura 8
Fonte: O autor.
51
05
Desenvolvimento
de Banco de Dados
52
Após as etapas iniciais de concepção de um banco de dados e uso da ER para
modelagem, estamos estudando os conceitos relevantes, dentro deste contexto, nas
primeiras aulas desta disciplina.
Com o tempo e com o aumento do início das vendas online, o atributo de endereço
foi tornando-se cada vez mais completo e complexo com atributos para indicação de
pontos de referência, país e pessoa que pode receber uma entrega no local, por
exemplo.
53
Os esquemas também foram sendo melhorados e re nados, de forma que
esquemas gerados por meio de outros esquemas trouxeram novas visões dos dados
armazenados e ofereceram uma maior possibilidade de auxílio a gestores em
estratégias e tomadas de decisão.
Os esquemas gerados a partir de outros esquemas permitem que aos poucos seja
possível unir dados de conjuntos diferentes de entidades com o objetivo de obter
novas informações com o cruzamento de dados. Atualmente, com a evolução e a
popularização da Internet, isto se tornou um nicho de mercado fortemente
explorado.
54
cliente = (cod_cliente,nome_cliente, cpf_cliente, fone_cliente)
É possível re nar mais ainda o processo, mas para isso, podem ser necessários
outros atributos como data da venda, valor total da venda e por produto, de forma
que seria possível a obtenção de uma lista de quem comprou produtos nos últimos
15 dias, quem mais comprou determinado produto, quem realizou o maior volume
de compras num certo período, etc.
55
Assim, aumenta-se muito a e ciência e aplicabilidade dos bancos de dados em
negócios de qualquer natureza, pois com tantos dados disponíveis podendo ser
cruzados sob determinados critérios, mudanças de rumo nas empresas, ajustes em
processos e até abertura e fechamento de unidades podem ser estudadas.
Como citado, com o uso de alguns atributos adicionais como data da venda e valores
obtidos nas transações, é possível ter um banco de dados mais completo e que não
seja apenas um repositório de histórico de transações, mas uma ferramenta de
gestão completa.
56
Para se trabalhar da melhor forma em TI, uma dica é a escolha de boas
ferramentas de trabalho, assim como em todas as demais pro ssões, e,
com isto, uma forma de se iniciar os estudos e treino para o
desenvolvimento de banco de dados é o teste de diferentes SBGD para
que se possa escolher um mais adequado ao estilo pessoal de trabalho ou
necessidades de uma empresa pela qual desenvolva seu trabalho.
A grande referência da área certamente é o SGBD da Oracle que é pago, mas que
suporta massivas quantidades de dados de forma estável e segura, assim como o
SQL Server da Microsoft que também é bastante utilizado para o gerenciamento de
banco de dados.
Opções como MySQL e PostGre SQL também são seguras e capazes de suportar
grandes volumes de dados, tendo versões gratuitas que suprem as necessidades da
maioria dos bancos de dados.
57
Instalação de um SGBD (MySQL
Workbench 8.0 CE)
Para se desenvolver uma solução para armazenamento e manipulação de dados,
pode-se optar pela instalação de um dos bons Sistemas de Gerenciamento de Banco
de Dados disponíveis no mercado, mas alguns são pagos e podem oferecer versões
de demonstração, e outros são gratuitos enquadrando-se, inclusive, em alguns casos,
como open source, ou seja, que disponibilizam acesso ao código fonte para quem
tiver interesse em modi car suas funcionalidades ou aparência, por exemplo.
58
Figura 1
59
Figura 2
Fonte: O autor.
Depois, é preciso optar por uma das versões de uso, sendo adequado e su ciente
para a disciplina, a opção padrão indicada na Figura 2, onde o pacote típico para
desenvolvimento é oferecido.
Na Figura 2, são exibidos os conteúdos que necessitam ser baixados do site o cial
para o processo de instalação. Basta avançar com a opção Next. Aos poucos, o
instalador vai executando o download dos componentes necessários e prepara para
o processo de instalação local na máquina para posterior uso no desenvolvimento de
sistemas gerenciadores de banco de dados.
60
Figura 3
Fonte: O autor.
Figura 4
Fonte: O autor.
61
Depois de terminada a instalação, é possível executar o SGBD e se deparar com uma
interface de apresentação da ferramenta onde é apresentada a tela de boas-vindas
da interface e depois, na Figura 5, a janela de trabalho quando se inicia um novo
projeto de banco de dados.
Figura 5
Fonte: O autor.
Após esta etapa de instalação, o SGBD está pronto para uso e, a partir daí, é preciso
se ambientar à ferramenta e conhecer seus recursos, não perdendo de vista o foco
principal que é o de se criar tabelas, inserir dados e manipulá-los, gerar consultas e
tudo mais que for necessário e disponível pela ferramenta.
62
Um software complexo como um SGBD possui muitas funcionalidades e
particularidades de uso, e sempre é recomendável que se inicie o uso de
uma nova ferramenta com o auxílio de um manual ou conteúdo de ajuda
sobre a ferramenta. No caso do SGBD MySQL, existe conteúdo o cial
disponível em inglês, mas que pode ser traduzido em tempo real pelas
ferramentas do navegador, visto que a ajuda é online, mas podem-se
buscar outras fontes e encontrar materiais de qualidade até mais
adequados ao tipo de ajuda desejado.
63
06
Linguagem SQL –
Definição de Tabelas
64
Para se trabalhar efetivamente com banco de dados, é preciso que alguma
ferramenta possa manipular os dados de um banco de dados ou uma linguagem
possa desenvolver uma aplicação para tal.
65
Outro conjunto de comandos se enquadra como DML de comandos de manipulação
de dados envolvendo ações inserção, alteração e exclusão de dados e não de toda a
estrutura das tabelas, sendo assim, utilizados muito mais vezes que os comandos do
tipo DDL.
A linguagem SQL também pode ser embutida dentro de códigos de outras linguagens
compatíveis como C++ e Java, por exemplo, permitindo que estas linguagens não
necessitem que nelas sejam implementados comandos de interação direta com
banco de dados.
66
A manipulação de dados com SQL é bastante fácil e rápida de aprender,
mas existem ferramentas que oferecem recursos robustos de
gerenciamento de banco de dados, além de aceitarem perfeitamente os
comandos SQL.
Definindo Esquemas
As relações necessitam ser criadas e mantidas através da linguagem SQL, e o
conjunto de instruções disponíveis na DDL foi implementado para que se possam
determinar esquemas para cada relação e tipos de dados contidos nos atributos
de nidos. Assim, por meio destes comandos, as tabelas e seus atributos podem ser
gerados e suas estruturas gerenciadas, além de permitirem que os atributos tenham
regras de nidas em relação ao que deve ser aceito como dado válido, de forma a
oferecer integridade ao banco de dados todo.
Ao de nir esquemas para criar tabelas, é preciso lembrar-se da ideia básica de que as
tabelas possuem como base as colunas, que representam seus atributos, e serão as
estruturas de armazenamento de dados. Sendo assim, no momento em que são
de nidos quais atributos farão parte de uma tabela, é preciso também delimitar os
tipos de dados aceitos e o domínio de valores deste tipo que podem ser inseridos
nestes atributos.
67
Os tipos de dados mais utilizados segundo Silberschatz (2020), na de nição de dados
são char (N) ou character (N), que permite que sejam armazenados até N caracteres
de texto no atributo, sendo então adequado para textos comuns.
O tipo varchar (N) ou character varying (N) representa uma alternativa ao tipo char
em que a diferença básica entre ambos é que o tipo char armazena um tamanho xo
N de caracteres, ao passo que varchar pode conter até N caracteres, armazenando
apenas a quantidade signi cativa de caracteres.
Outro tipo fundamental se chama int ou integer, que representa um dado simples
numérico inteiro limitado a um valor máximo aceito pelo hardware e sistema
operacional. Uma variação smallint também pode ser utilizada, sabendo-se que esta
aceita um valor limite menor também indicado pela limitação de hardware.
O tipo numeric (N, M) é outro tipo numérico, mas para números reais com casas
decimais, sendo que N representa o total de dígitos numéricos aceitos (contando com
os dígitos à direita da vírgula), e M o total de dígitos aceitos como casas decimais à
direita da vírgula. Um exemplo seria numeric (4,2) que aceita valores desde 0 a 99,99
no máximo, por exemplo.
Por m, o tipo oat (N) é usado também como número decimal com uma precisão
de pelo menos N dígitos à direita da vírgula sendo, então, uma terceira alternativa
para números decimais.
Para criar um esquema usando SQL, é utilizado o comando create table para de nir
a estrutura a ser gerada seguindo uma sintaxe bastante simples que seria a forma
como se deve escrever o comando.
Suponha que se queira criar um esquema para uma tabela de clientes com os
atributos básicos pessoais como CPF, nome e telefone. O comando para esta ação é
bastante simples, e uma sugestão seria a da Figura 1.
Figura 1
68
(Código_cliente int,
cpf_cliente numeric (11,0),
nome_cliente varchar (50),
telefone_cliente numeric (10,0),
primary key (Código_cliente))
Fonte: autor.
69
Manipulando um Banco de Dados
Após a criação de uma tabela, esta pode ser gerenciada através de scripts com
comandos diversos para que seja povoada com dados e estes possam ser utilizados
para as atividades previstas para o SGBD. A inserção de dados também é um
processo relativamente simples, porém trabalhoso, pois geralmente os dados a
serem inseridos no banco são obtidos por interações manuais de usuários direta ou
indiretamente.
Seja qual for a origem dos dados, para ns de estudos os dados serão inseridos
manualmente com o uso da palavra reservada insert que necessita de alguns
parâmetros em sua sintaxe para que possa ser funcional.
Partindo da tabela Clientes gerada pelo script exemplo, da imagem 26, pode atribuir
um conjunto de dados aos parâmetros do comando para que estes sejam inseridos
como uma nova tupla de dados na tabela Clientes. Observe uma sugestão de como
poderia ser escrito um comando para inserir dados referentes a uma tupla na tabela
Clientes.
É importante estar atento aos detalhes no uso dos comandos da linguagem, pois em
sua sintaxe, os detalhes fazem diferença, e não respeitar as regras de escrita destes
comandos pode implicar erros nos dados ou o não funcionamento dos scripts
gerados para a realização de ações.
Caso algum dado seja nulo, basta deixar sem o dado, mas inserindo as vírgulas
separadoras, normalmente, cuidando que dados numéricos são inseridos de forma
simples, e os dados do tipo texto entre aspas simples.
70
Pode-se excluir todos os dados de uma tabela, mantendo sua estrutura para uso
posterior, usando-se o comando delete de forma bastante simples, pois como
parâmetro na sintaxe do comando é preciso apenas indicar qual tabela terá todos os
seus dados excluídos como se pode ver no exemplo.
Outras formas de se trabalhar com exclusões utilizam o comando drop para estas
tarefas, sendo que sua sintaxe permite duas variantes diferenciadas apenas por um
parâmetro, mas que geram ações bastante diferentes. Observe os dois exemplos a
seguir:
71
Nos dois exemplos, o comando se inicia da mesma forma com as palavras alter
table e o nome da relação desejada cadastro_cliente. Depois, o primeiro comando
acrescenta um atributo chamado estado_cliente que aceita dois caracteres de texto,
sendo adequado para siglas de estados no Brasil.
No segundo exemplo, o uso da palavra drop faz com que o atributo indicado
telefone_cliente seja excluído da estrutura da relação, mas é importante observar
que existe um enorme risco no uso deste comando, pois ao se excluir o atributo, seus
dados também são perdidos automaticamente (sendo que alguns gerenciadores
podem não permitir esta ação), e outro risco é o de o atributo fazer parte de uma
chave primária ou ser chave estrangeira num relacionamento entre tabelas.
72
07
Linguagem SQL
– Consultas
73
Os bancos de dados possuem a função essencial de armazenar dados, mas esta não
é a única motivação para se desenvolver um sistema gerenciador, e sim utilizar,
posteriormente, os dados armazenados para diferentes ns.
Para se escrever comandos select é importante ter em mente que a base do uso do
comando é a de se buscar certos dados de determinada relação, sendo que os dados
podem ser especi cados ou não, e a relação pode ser de uma tabela especí ca ou de
mais de uma tabela que possam ser relacionadas através de suas chaves primárias e
estrangeiras.
Esta sintaxe básica do comando serve para que se possa conhecer a estrutura
sintática do mesmo, mas a escrita de scripts de consulta funcionais dependem de
uma melhor de nição dos parâmetros na elaboração dos comandos.
74
Supondo a base de dados contida numa relação, a forma mais simples de se utilizar o
comando select, mas não a mais usual é solicitando que todos os dados desta
relação sejam exibidos como no exemplo:
Este comando trará como retorno todos os dados contidos em todos os atributos da
tabela cadastro_cliente e, com isto, pode surgir o questionamento do motivo de não
ser muito usual uma consulta simples como essa, mas o problema com ela é que é
bastante comum que uma tabela possa conter uma quantidade enorme de tuplas
com vários atributos, resultando numa listagem muito grande de dados que pode
mais prejudicar que auxiliar uma análise sobre os dados obtidos.
O uso do símbolo asterisco (*), assim como nos sistemas operacionais, representa
qualquer valor, ou seja, como após a palavra select são indicados atributos da
relação a serem exibidos, o símbolo indica ao comando que todos os atributos
devem ter seus dados exibidos na consulta, e caso se deseje apenas alguns, pode-se
ajustar o exemplo anterior.
Também é possível ajustar a relação que serve de base para as consultas, permitindo
que uma ou mais tabelas sejam indicadas, separadas por vírgulas, na cláusula
de nida pela palavra from, mas, como dito, é preciso veri car se existe
relacionamento entre as tabelas utilizadas e, se for necessário, que exista uma
correspondência entre dados das tabelas para a ltragem de dados.
75
Tabelas que possuam relacionamentos entre si através da existência de chaves
primárias e chaves estrangeiras podem usar isso para encontrar ligações entre
outros dados das tabelas, como no caso de se buscar todas as compras realizadas
por determinado cliente em um estabelecimento.
Tabela 1
cadastro_cliente
Charles
1 12345678900 1198765432 SP
Chaplin
Thomas
2 98765432100 1432564852 SP
Edison
Albert
3 55555555500 4398653325 PR
Einstein
cadastro_venda
1 PRODUTO A 2 3
2 PRODUTO B 5 2
3 PRODUTO A 10 2
Fonte: O autor.
76
Nestes exemplos da Tabela 1, alguns detalhes são relevantes, como, por exemplo, a
coincidência de valores das colunas de códigos dos atributos código_cliente e
código_venda que repetem os valores 1, 2 e 3, mas isto ocorre em função dos
códigos em ambos os atributos serem de nidos como valores numéricos inteiros
incrementados, sequencialmente.
Com isso, é importante a rmar que um valor 1 no atributo código_cliente não possui
relação direta com um valor 1 no atributo código_venda, pois são códigos utilizados
apenas para identi cação de clientes diferentes e vendas diferentes nas respectivas
tabelas.
O que não é coincidência e relevante é observar que existe a ligação entre os valores
2 dos atributos código_cliente das duas tabelas, pois na tabela cadastro_cliente,
este valor é a chave primária de identi cação da tupla, ao passo que na tabela
cadastro_venda indica que o cliente 2 realizou compras no estabelecimento (duas
neste exemplo).
77
Lembre-se de que, comumente, consultas não geram mudanças nos
dados, e apenas os ltram a partir de um conjunto de parâmetros que
incluem condições de validação de critérios para as buscas, podendo
trazer muitas variações de pesquisas. Existem diferentes composições de
pesquisas, mesmo em banco de dados pequenos capazes de retornar
detalhes contidos no banco que podem surpreender e aumentar o grau
de especialização de um especialista em banco de dados.
Filtrando Consultas
Normalmente, as consultas buscam retornar apenas dados esperados a partir do que
é solicitado em scripts de comandos select, mas para isso, estes comandos precisam
ser escritos de forma adequada, atendendo à sintaxe necessária e, principalmente,
de nindo os critérios indicados nos parâmetros.
Na cláusula where são indicados ltros para seleção de dados a partir de critérios
que devem ser escritos segundo a sintaxe do comando, mas neste ponto é que a
complexidade aumenta, pois esta cláusula permite bastante variação de parâmetros.
78
Para se escrever os parâmetros de ltragem das consultas existem alguns símbolos
matemáticos utilizáveis para que cláusulas baseadas em lógica possam ser escritas.
Os principais símbolos utilizados são descritos na Tabela 2.
Tabela 2
Une duas condições para veri car se pelo idade <18 or idade
or
menos uma das duas resulta verdadeiro. >= 60
Fonte: O autor.
79
O uso dos símbolos é essencial na construção dos critérios de ltragem de dados na
cláusula where, pois por meio deles é possível elaborar critérios a serem veri cados
no conjunto de dados da relação, bem como obter uma listagem de dados desejados.
Além dos símbolos matemáticos indicados, existem três operadores lógicos and, or e
not que representam operadores lógicos que permitem a avaliação de outras
condições.
O operador and, por exemplo, necessita que duas condições sejam de nidas de
forma que ele sirva para comparar os resultados individuais das duas condições em
função da lógica deste operador. Para o operador and, o resultado apenas é
verdadeiro se as duas condições ligadas a ele resultem verdadeiro também, caso
contrário, o resultado é falso e os dados da respectiva tupla não são retornados na
consulta.
O exemplo utilizado na Tabela 2 para o operador and indica que serão exibidos
apenas dados de tuplas onde saldo < 0 and situação = ‘desempregado’, ou seja, em
tuplas onde o saldo seja negativo e a pessoa esteja desempregada, sendo que
pessoas com saldo positivo ou zero não sejam aceitas ou que estejam empregadas
também não.
No exemplo da imagem 29, idade <18 or idade >= 60 temos que são aceitas tuplas
nas quais a idade seja menor que 18 anos ou maior ou igual a 60 anos, formando,
assim, um conjunto de valores aceitos na condição, e o resultado é falso apenas em
tuplas com valores entre 18 e 59 no atributo idade.
80
Por m, o operador not apenas inverte o resultado de uma condição, sendo que se
uma condição resultaria verdadeira, este operador muda o resultado para falso, mas
seu uso é um pouco diferente na linguagem SQL pode receber complemento de
outras palavras reservadas da linguagem para maior exibilidade de uso.
Partindo dos exemplos acima, temos uma progressão não apenas do tamanho dos
comandos do script SQL, mas também de sua complexidade e capacidade de
ltragem de dados.
81
A melhor forma para se compreender as consultas é pensar em casos
reais em que se deseja procurar dados especí cos em uma listagem, por
exemplo, e iniciando a elaborar consultas simples que retornam dados
sem muitos ltros para que se acostume com a sintaxe dos comandos e
erros comuns que se aprende na prática. Criar scripts com muitas
consultas baseadas em atributos de uma tabela ou mais é bastante
e ciente como aprendizado, pois com este treino, as chances de se obter
um bom aprendizado aumentam muito.
82
08
Armazenamento e
Consulta de Dados
83
Aproveitando conceitos estudados de de nição de projeto de banco de dados
usando o modelo ER e conhecendo a base da linguagem SQL, é possível imaginar
uma pequena aplicação de exemplo para o emprego destes conceitos. Para isso, o
foco é a etapa de desenvolvimento de um pequeno projeto experimental utilizando o
SGBD MySQL que foi introduzido nos estudos para aplicar o que foi estudado até o
momento e que pode continuar servindo de base para a continuidade dos estudos.
Para iniciar este trabalho, é preciso primeiro idealizar uma aplicação ctícia e,
partindo da ideia, seguir os passos seguintes de projeto básico deste banco de dados,
para que depois ele possa servir de base para o desenvolvimento no SGBD MySQL.
84
Partindo dessa necessidade adicional identi cada, foram de nidos os atributos de
compra, como nota scal de compra não obrigatória, pois existem produtos que são
adquiridos sem nota scal, como peças adquiridas de uma o cina caseira de um
mecânico que as fornece informalmente para venda como itens usados, e com isto,
adicionando a ideia de que é interessante adicionar um atributo de estado da peça
no cadastro de produto.
85
Para isso, é preciso antes de iniciar o uso da linguagem SQL em si, preparar o SGBD
para o processo, e além do uso do MySQL, será instalado um servidor web para que
se possa simular um banco de dados inserido em um servidor.
Para este material será utilizado o servidor Apache Xampp que no momento de
criação do material estava em sua versão 3.2.4, assim como o SGBD MySQL estava
em sua versão 8.0.23, mas independentemente da versão, os aspectos essenciais de
funcionamento, normalmente, não são tão afetados por mudanças de versão e basta
algum tempo dedicado, e é possível conhecer os diferenciais de novas versões
lançadas posteriormente.
Figura 1
Fonte: O autor.
86
Após a instalação e inicialização dos serviços do servidor terem ocorrido com sucesso
(observar a indicação das portas de comunicação para veri car o processo), como se
pode conferir na Figura 1, é possível iniciar o uso do SGBD MySQL normalmente.
Figura 2
Fonte: O autor.
Ao ser clicada, a opção abre uma janela para criação da conexão, bastando que seja
dado um nome para a mesma livremente no campo Connection Name, mostrado na
Figura 3.
87
Figura 3
Fonte: O autor.
Depois de criada a conexão, ela aparece como opção na tela de boas-vindas, como
mostrado na Figura 4 e, ao ser clicada, abre a interface de desenvolvimento, mas
antes, pode ser exibida uma mensagem de aviso na qual basta que seja utilizada a
opção Continue Anyway.
88
Figura 4
Fonte: O autor.
89
Figura 5
Fonte: O autor.
Figura 6
Fonte: O autor.
90
Na Figura 6, é mostrada a tela que traz o comando SQL para criação de um Schema
livro vendas, que pode servir de base para o início do desenvolvimento, gerando o
resultado da Figura 7, onde é exibida a estrutura criada do banco de dados com seus
principais elementos como tabelas e visões.
Figura 7
Fonte: O autor.
91
Este resultado obtido no SGBD pode também ser veri cado no Xampp clicando-se na
opção Admin do painel de controle, para que uma interface semelhante à da Figura 8
mostre que o banco de dados gerado também aparece no servidor através de sua
conexão de nida, anteriormente.
Figura 8
Fonte: O autor.
Próximos Passos
Para que se possa, então, seguir uma lógica de estudos e aplicação prática, será
excluído o banco criado livro venda, clicando-se em seu nome na janela esquerda e
escolhendo-se Drop Schema.
Em seguida, será então utilizada a linguagem SQL puramente para que todo o
processo seja executado, ignorando opções especí cas deste SGBD MySQL, obtendo-
se algo mais geral que pode valer para outros SGBDs também.
Depois, basta seguir a sequência padrão de uso do botão para executar comando
destacado na imagem 39, na parte direita da janela, observando a mensagem na
janela Output, que exibe o resultado dos comandos. Ali diz que o comando foi
executado com sucesso por meio do ícone verde e a mensagem de 1 linha afetada,
que representa que foi criado o banco de dados.
92
Para con rmar o processo, é preciso sempre que for executado um comando, que se
crie ou altere a estrutura do banco, o botão de atualização dos Schemas destacado
na parte esquerda da janela, como mostrado também na Figura 9.
Figura 9
Fonte: O autor.
Para que o banco seja criado de forma mais adequada, é possível adicionar
parâmetros ao comando create database de forma a garantir que os caracteres
inseridos sejam mais elmente aceitos e armazenados quando inseridos.
93
Existem países com conjuntos de caracteres diferentes do usado no
português e nos padrões de teclado utilizados no país e, assim, existe o
risco de que dados tenham sua integridade prejudicada. A m de reduzir
esta possibilidade, é possível usar os parâmetros adicionais, a seguir,
sempre que criar um novo banco de dados, de forma que o padrão utf8
seja usado, mais adequado ao nosso idioma.
Depois de criado o banco de dados, inicia-se a criação das tabelas para conter os
conjuntos de entidades, e estas também podem ser criadas com comandos SQL, mas
antes, é muito importante lembrar que as tabelas são de nidas por um nome, mas
também, por atributos que devem ter seus respectivos nomes e domínios de dados
aceitos, mais comumente chamados de tipos.
Estes tipos podem ser variados, e no caso da linguagem SQL, existem muitas
variantes possíveis de serem usadas, permitindo que o banco tenha entidades bem
ajustadas, reduzindo desperdício de espaço de armazenamento.
Sempre é preciso ter em mente que um banco de dados terá a função de armazenar
conjuntos de entidades, e a quantidade de entidades armazenadas pode ser tão
grande que qualquer ajuste pode in uenciar este armazenamento.
94
Os tipos principais de domínios para dados são, numérico, data e hora, texto e
espacial, sendo cada tipo ideal para determinado domínio de dados e para que haja
uma melhor otimização dos atributos, todos possuem subdivisões como se pode
conferir na Tabela 1
Tabela 1
Tipo
Variante Descrição
Básico
tinyint
smallint
Tipos numéricos inteiros que armazenam desde
pequenos valores a valores muito grandes,
int
podendo ter parâmetros que de nem a
quantidade de dígitos aceita.
mediumint
bigint
decimal
Numérico
oat Tipos decimais de valores com maior ou menor
precisão e aceitando valores menores ou muito
double grandes para ns cientí cos.
real
bit
Tipos mais voltados a avaliações de valor
verdadeiro ou falso.
boolean
95
Data e date Tipos especí cos para armazenamento de dados
Hora temporais, muito importantes na construção de
timestamp
time
year
char
Tipo padrão para atributos de texto como
nomes, endereços, etc.
varchar
tinytext
longtext
Texto
tinyblob
longblob
enum
Tipos especí cos para listas de dados textuais
especí cas como dias da semana, etc.
Set
96
Espacial geometry Tipo de dados especí cos para aplicações
grá cas baseadas em polígonos e coordenadas.
geography
Fonte: O autor.
Como são muitos tipos, e muitos deles apenas variações entre si, alguns serão
utilizados nos exemplos deste material para exempli car a forma de uso, enquanto
outros cam em aberto para que o aluno possa complementar seus estudos,
posteriormente, com fontes alternativas como os livros utilizados na bibliogra a.
Partindo dos tipos disponíveis indicados na imagem 40, é possível de nir como
seriam os atributos básicos para uma tabela cliente para cadastro do conjunto de
entidades relativa a esse conjunto de dados.
97
nome_cliente varchar(30),
cpf_cliente numeric(11,0)
);
As escolhas de tipos para atributos não são feitas apenas pelas categorias
de valores que se espera armazenar, mas envolve uma análise mais
profunda no que se espera destes atributos e seus requisitos
identi cados.
Os tipos inteiros, por exemplo, são simples e sua escolha se baseia mais nos maiores
ou menores valores que seriam aceitos pelos atributos, pois o tipo inteiro trabalha na
faixa de -2.147.483.648 a 2.147.483.647, ao passo que smallint usa a faixa de -32.768
a 32.767 nitidamente mais restrita, e o menor tipo tinyint de 0 a 255, equivalente a 1
byte apenas.
Em MySQL, por exemplo, o tipo chamado decimal, muito utilizado, é de nido por dois
parâmetros decimais (m,n), sendo m o tamanho total do número em si a ser
armazenado em dígitos, sendo que pela documentação o cial da versão utilizada, o
máximo aceito para a quantidade de dígitos neste tipo numérico é de 65, e para a
98
parte decimal n, o máximo é de 30 dígitos para de nir a quantidade de casas
decimais de precisão. Se estes valores não forem informados o MySQL assume m=10
e n=0.
Assim, caso sejam de nidos dois atributos char(3) e varchar(3), ambos podem ocupar
3 bytes de armazenamento, lembrando que, em geral, a quantidade de bytes
equivale a de caracteres, mas com a de nição utf-8, este valor pode ser diferente,
pois esta codi cação aceita caracteres que ocupam mais de 1 byte de espaço de
armazenamento.
Outro tipo relevante que pode ser utilizado se chama text(m) e aceita textos longos
de até 216 caracteres praticamente ou 65535 caracteres podendo, então, con gurar
vários parágrafos de texto, podendo ser de nido um limite através de um valor para
m, e outro tipo chamado blob aceita cerca de 224 bytes, praticamente, ou 16.777.215
de caracteres como outra opção para textos longos.
Um tipo importante de texto se chama enum e de ne listas de dados xas que são
ótimas opções para conjuntos delimitados de opções de escolhas para atributos
como sexo que, geralmente, é identi cado com apenas 1 caractere, dias da semana
com os nomes dos sete dias abreviados ou não, meses do ano, nomes de pessoas
especí cas, cargos, etc.
99
Complementando os tipos básicos de texto que podem ser utilizados ao longo do
material, o tipo set traz a possibilidade de se criar conjuntos de dados textuais no
qual a quantidade de 0 a 64 dados, sendo que os dados aceitos são predeterminados
na de nição do atributo.
Neste exemplo, a tabela listagem é de nida de forma que possa receber entidades
com dados apenas pertencentes ao conjunto delimitado no parâmetro col set, e
cada tupla a ser inserida conterá dados não repetidos dentre as opções oferecidas,
avisando apenas em caso de dados repetidos estarem colocados no comando insert.
Como resultado da inserção, a consulta traria amarelo e verde como dados inseridos
na tabela, apenas, pois a repetição de verde é ignorada, e os dados cinza e roxo
descartados por não pertencerem ao conjunto de dados aceitos no domínio.
Por m, um tipo de dado bastante utilizado se refere ao trabalho com datas e horas
importantes para que não seja necessário utilizar tipos numéricos que deixariam os
componentes de data ou hora separados, ou texto que di cultaria cálculos de tempo.
100
A hora também segue o mesmo modelo de uso, e como padrão utiliza
hora:minuto:segundo que não se altera nas diferentes regiões do mundo, e pode ser
trabalhado com o comando date, estando limitado ao intervalo -838:59:59.000000 a
838:59:59.000000, sendo pouco provável que seja utilizada uma faixa tão grande de
tempo, exceto em dados históricos.
Outros tipos podem ser utilizados de acordo com as necessidades de cada projeto, e
uma consulta ao material o cial de cada SGBD utilizado juntamente com consultas a
livros e à web pode ser um bom caminho para se aperfeiçoar os conhecimentos
sobre tipos de dados que podem ser utilizados em banco de dados.
Com a aquisição dos conceitos dos tipos de dados, é possível analisar o contexto da
Figura 10, que traz um script para criação de uma tabela com maior detalhamento e
otimização dos atributos.
Figura 10
Fonte: O autor.
Neste script da Figura 10, é importante estar atento aos tipos utilizados nos atributos,
mas também, a outros parâmetros que foram já incluídos para que se compreenda
quão detalhada pode ser a de nição de um banco de dados.
101
No primeiro atributo, é importante destacar que, além de se utilizar o tipo tinyint
que reduz bem a quantidade de entidades aceitas, dando a impressão de uma ótima
otimização, é importante se lembrar da limitação do tipo a valores entre 0 e 255,
permitindo então a inserção de no máximo 256 tuplas de dados, insu ciente para a
maioria dos bancos de dados, sendo que para bancos grandes nem o tipo int seria
adequado.
Também consta o parâmetro not null que impede o atributo de ser mantido vazio,
obrigando a inserção de um valor, mas este valor é de nido automaticamente pelo
sistema em função do parâmetro auto_increment que adiciona uma unidade a cada
nova entidade neste atributo, garantindo a não repetição de dados.
Isso foi de nido para este atributo em função do que vem na última linha de
parâmetro de atributos do comando create table, que indica o atributo cod_cliente
como chave primária através do parâmetro primary key.
O terceiro atributo utiliza o tipo numeric(11,0) para que possa ser um campo
numérico e não textual para o CPF, permitindo validação do mesmo pela regra
matemática de CPFs, sendo que o formato padrão atual deste documento utiliza 11
caracteres, sem afetar os documentos mais antigos que possuem menos dígitos que
este padrão atual.
São onze números sem o uso de casas decimais, fazendo com que 11 e 0 sejam
valores que delimitam bem a entrada de dados, impedindo números com mais de 11
dígitos, mas aceitando menos que isso, e não aceitando a inserção de pontos ou
vírgulas na digitação.
Atributos bastante especí cos como sexo e dia da semana podem ser representados
como tipo enum, onde podemos indicar uma lista de dados aceitos e que são
validados na entrada de dados pelo usuário, como podemos ver no exemplo em que
o uso da palavra default garante que o atributo não seja cadastrado em branco na
ausência de um dado informado a ele, pois em casos assim, assumiria o dado
informado como padrão.
102
Compreender os conceitos relacionados aos atributos é importante para
poder elaborar tabelas para o armazenamento de conjuntos de entidades
de forma adequada e funcional. Observar quais os tipos de dados
corretos para os atributos é uma tarefa importante, assim como veri car
se devem ser marcados como obrigatórios, se devem ter seus dados
preenchidos, automaticamente, se possuem valores padrão de
preenchimento para facilitar a inserção de dados, etc. Mas talvez o mais
importante seja de nir, corretamente, e se possível, a composição de
atributos para formar a chave primária de cada tabela, observando se nas
tabelas, seria necessária a inserção de chaves estrangeiras e outros
pontos importantes.
103
09
Linguagem SQL –
Variações em Consultas
104
A linguagem SQL possui todos os requisitos essenciais de gerenciamento para
banco de dados e, após conhecer a base de trabalho relacionada à criação de
bancos e suas tabelas com atributos, inserção e consulta de dados, inicia-se uma
etapa de apresentação de recursos complementares da linguagem.
Esse é um recurso interessante, pois com ele, atributos com nomes complexos,
como nomes mais simples e intuitivos para a listagem a ser exibida, permitem o
agrupamento de atributos para serem exibidos juntos sob um mesmo título.
O segundo exemplo é uma forma diferente de uso, onde o alias é utilizado como
recurso para que dados das entidades sejam uni cados sob um único título
endereço, para que este exiba os dados separados de atributos, que juntos
atendem a uma demanda especí ca de formato de endereço, desejado para uma
listagem resultante de uma consulta.
Outra forma bastante utilizada de uso do renome é para simpli car nomes de
tabelas em consultas envolvendo mais de uma tabela em intersecção para que o
cruzamento de dados possa ser feito e, assim, determinado critério possa de nir
qual combinação de dados retornar.
105
select c.nome_cliente, p.descricao_produto from
cliente as c, produto asp, venda as v where v.
cliente_status = ‘Ativo’ and v.total >= 1000;
No exemplo acima, três tabelas são cruzadas com o intuito de que todas participem
do processo de execução de uma consulta, em que a tabela venda renomeada v é a
base da consulta e, a partir dos dados dos atributos nome_cliente e total são
selecionados os clientes ativos que realizaram compras de 1000 ou mais,
retornando apenas seus nomes e produtos adquiridos para determinado m.
Um exemplo bastante comum ocorre quando se buscam pessoas das quais não se
sabe todo o nome, e com o uso destes símbolos pode-se generalizar parte da
condição para que sejam retornados mais resultados que o esperado,
propositalmente, na esperança de que o que se busca esteja no resultado obtido.
Como exemplo, supondo que se coloque Jo_o em uma busca, tanto Joao quanto
João seriam resultados aceitos, mas também Joeo ou quaisquer resultados que
tivessem Jo e o com apenas algum caractere entre eles, assim como Elian_ traria
resultados como Eliana, Eliane, Eliani ou Eliany, por exemplo.
Para inserir esta forma de condição em comandos SQL, é utilizado o comando like
como operador para condição da cláusula where, servindo, então, como ltro em
consultas de forma isolada ou em conjunto com outros parâmetros.
106
O comando de consulta acima poderá trazer vários resultados em uma base com
várias tuplas de dados armazenadas, e pode acontecer de a lista vir desorganizada
di cultando sua leitura e busca por resultados especí cos.
Numa busca como esta, além da busca por dados desejados, pode ocorrer de
serem encontrados dados não desejados além dos imaginados na construção do
comando, pois podem retornar nomes e telefones iguais em mais de uma tupla
que poderia ou não ser representativo de tuplas duplicadas em função de entradas
de dados repetidas, mas é possível haver duas pessoas com mesmo nome e
telefone numa empresa, mas pode não ser aceito o cadastro de duas pessoas de
mesmo nome e telefone celular.
107
É sempre importante estar atento, durante os estudos, em fontes
alternativas ou especi cidades de variações entre um SGBD e outro que
possam afetar o resultado daquilo que se aprende. O MySQL é a base
para os estudos, mas, paralelamente, é importante que se busquem
referências auxiliares para conhecer, por exemplo, como as consultas
podem ser elaboradas em um SGBD alternativo como o SQL Server da
Microsoft.
108
utilizar o comando union para excluir resultados repetidos ou union all para
mostrar os mesmos resultados repetidos.
A diferença do uso do termo all nos comandos select acima mostra que detalhes
in uenciam os resultados de cada comando, e como o gerenciamento de banco de
dados, através do uso da linguagem SQL, envolve a manipulação de bancos que
podem possuir milhares ou milhões de entidades de dados, é preciso estar atento
ao que deve ser feito e à escrita dos comandos em cada script escrito.
Um exemplo para ilustrar a diferença seria que com o uso de uma union entre uma
tabela de cadastro de clientes e outra de vendas para clientes, nomes de pessoas
seriam exibidos estando ou não os clientes cadastrados no sistema, vindos do
cadastro de clientes que podem ou não ter feito compras e de clientes que
realizaram compras estando ou não cadastrados na tabela de cadastro de clientes.
109
(select nome_cliente from cliente) intersect all
(select nome_clientefrom venda);
Este tipo de consulta pode ser bastante relevante, pois esta exclusão de dados faz
com que uma consulta como a exempli cada acima retorne o nome de todos os
clientes cadastrados que nunca compraram nada, pois não possuem seu nome
associado a nenhuma venda.
O uso de except all traz nomes repetidos que poderiam ser algo bastante comum
numa base de dados, e a inclusão de atributos-chave na consulta poderia garantir
que seriam pessoas diferentes, usando, por exemplo, o atributo de algum
documento pessoal como dado complementar nos resultados da consulta.
110
Algumas operações adicionais importantes para os estudos, nesta aula, são
relacionadas a cálculos que podem ser efetuados sob resultados de consultas,
sendo muito utilizados para gerar dados que não precisam ser armazenados num
banco de dados, pois podem ser obtidos a partir dos demais dados inseridos nas
entidades das tabelas.
Operações podem ser realizadas em dados numéricos, por exemplo, para que
dados úteis como médias, somas e contagem de elementos possam ser realizadas
adicionando operadores em comandos de consulta.
O segundo exemplo traz uma forma simples de se veri car inconsistência com um
atributo importante, fazendo uma consulta simples a todas as vendas e listando os
números de notas scais. Caso haja, por algum problema, algum número de nota
scal repetido, este será agrupado pela função group e caso haja mais de uma
venda com um mesmo número de nota scal, aparecerá no relatório.
Outra operação relevante para consultas se baseia no comando avg para calcular
médias e, assim como count, possui sintaxe simples, bastando associar um atributo
ou todos à função, e caso não seja atribuído um atributo não numérico que pode
retornar resultados inesperados, a média será calculada.
111
Caso seja adicionada alguma condição ao comando select, a função avg retornará à
média sobre os dados que seriam resultados da consulta apenas, e não sobre
todos os dados da tabela.
No segundo exemplo, uma consulta mais complexa para análise de dados são
somadas às compras totais feitas por clientes com o uso do operador sum, mas um
limitador é utilizado no próprio agrupador de dados repetidos. As vendas são
agrupadas por código do cliente, mas limitando a listagem a clientes que tiveram
compras somadas de 1000 ou mais, excluindo da lista somas menores que este
valor.
112
Às vezes é preciso identi car inconsistências no banco de dados e,
assim como mostrado no conteúdo da aula, é possível uma consulta e
retornar se existem entidades nas quais um atributo repete dados e
não deveria.
113
10
Tópicos Complementares
em SQL
114
Dando sequência a uma etapa nal de estudos especí cos em linguagem SQL,
existem muitos conceitos e recursos que podem ser explorados ainda na linguagem
SQL, e que podem ser estudados à medida que se desenvolve maior conhecimento
dos conceitos e recursos fundamentais da linguagem.
Consultas Especializadas
Um dos recursos que podem ser explorados em consultas SQL é a possibilidade de
encadeamento de consultas para que se possa utilizar uma própria consulta SQL
como critério condicional para a cláusula where.
No exemplo, observa-se o uso do termo distinct logo após select para que não sejam
exibidos resultados repetidos de nomes, mas é importante lembrar que pessoas
diferentes podem possuir o mesmo nome e, com isto, o resultado desta consulta
poderia não ser correto, havendo o risco de exclusão de entidades de forma
equivocada, além de que o comando distinct se aplica apenas ao campo nome_cli
neste exemplo.
O uso da variante not in antes da inclusão de uma subconsulta faz com que sejam
buscados apenas resultados que não satisfaçam o select inserido como condição,
fazendo com que dentro de todo o conjunto de entidades pesquisado, sejam
exibidos justamente os que não foram encontrados na subconsulta, servindo em
casos como a busca por clientes cadastrados que nunca realizaram compras ou que
estejam há algum tempo sem realizar compras, ambas informações muito úteis
numa empresa.
115
Existem inúmeras combinações de comandos de consulta possíveis em
banco de dados e o uso das variações possíveis de parâmetros e
combinação de cláusulas são diretamente responsáveis por isso, e para
que se desenvolva a habilidade de elaboração de consultas, é preciso
praticar ao máximo este recurso.
Outra variante para o uso de subconsultas é o uso de > some que representa uma
indicação na consulta de que ao menos uma ou mais ocorrências encontradas
representam a condição da consulta para exibição de resultados, havendo a
possibilidade de se utilizar as alternativas < some, >= some, <= some, = some, e <>
some para que diferentes resultados da subconsulta sejam utilizados.
Existe como alternativa a cláusula any com efeito semelhante e usado desde versões
bem mais antigas de SQL, assim como > all, < all, >= all, <= all, = all, e <> all que
servem como comparador entre o dado contido no campo e todos os resultados
obtidos na subconsulta.
116
Também é possível simplesmente veri car se alguma entidade atende a uma
determinada consulta inserida como condição, retornando verdadeiro (true) ou falso
(false) apenas pela adição da cláusula exists antes da subconsulta na cláusula where
da consulta principal.
Há variações para esta cláusula como not exists para que seja feita a veri cação
contrária de não existência de ocorrências que atendam à subconsulta, e pode-se
agregar a cláusula except para criar exceções para as subconsultas que contenham
exists ou not exists.
Views
Na medida em que são demandadas consultas de maior complexidade, gera-se um
problema de interpretação destas consultas, pois a quantidade de atributos, tabelas
envolvidas e condições para a obtenção de determinados resultados tendem a gerar
117
comandos muito longos e de difícil validação com relação à sua real e ciência e
assertividade.
O uso desse recurso permite maior reúso das visões contendo bases otimizadas para
que mais de um usuário possa acessá-la diretamente, aumentam a segurança, pois
usuários podem ser direcionados a realizar consultas sobre views personalizadas que
ocultem dados necessários ou protegidos, e simpli ca a elaboração e consultas que,
muitas vezes, precisam conter menos ltros para a obtenção dos resultados
esperados.
Pela exempli cação é fácil perceber a facilidade de se utilizar uma view como base
para outras consultas, e para isto basta incluí-la na cláusula from, lembrando que a
mesma deve ter sido construída, anteriormente, e é preciso que se conheça o que foi
gerado a partir dela. No exemplo, a view ltra nome e valores de compras realizados
com valor igual ou superior a 500, e a consulta posterior lista, dentre estes, aqueles
cujos nomes iniciam pela letra A.
118
Gerenciamento do Banco de Dados
Com sintaxe similar à do comando select, o comando delete exclui tuplas de dados
em tabelas a partir de condições especi cadas e parâmetros variados que permitem
que este comando extremamente perigoso seja bem construído e sua ação delineada
de forma segura e efetiva.
Importante observar que é um dos conceitos estudados mais a fundo, por último,
devido ao seu caráter perigoso, necessitando de atenção e que se tenha já uma base
de como se trabalha com um banco de dados e o que está ligado ao seu uso e
manipulação.
119
No exemplo citado, três diferentes formas de exclusão são de nidas, em que,
progressivamente, vai sendo aumentado o grau de complexidade dos comandos,
sendo o primeiro, a forma mais simples de uso da sintaxe, onde se indica apenas a
tabela que terá todo o seu conjunto de entidades excluído.
No segundo, apenas tuplas da tabela vendas onde o valor total armazenado de cada
venda seja um valor entre 0 e 499, e no terceiro exemplo, serão excluídos dados de
entidades que a partir da consulta sobre vendas terem médias de valor da venda
inferiores a 300.
Alguns parâmetros adicionais relevantes são limit que permite estabelecer uma
quantidade máxima de tuplas afetadas na exclusão, low_priority que indica ao
gerenciador para aguardar que nenhum usuário esteja utilizando a mesma tabela
para oferecer maior garantia de manutenção de integridade do banco e atomicidade
das operações realizadas. A cláusula ignore pode ser utilizada para que erros
gerenciáveis durante o processo sejam ignorados e o processo não seja
interrompido.
120
Observando os exemplos colocados, o primeiro deles é um comando de inserção
tradicional que indica a tabela destino, e os atributos afetados entre parênteses, e os
dados a serem inseridos, respeitando os tipos e a ordem dos atributos indicados na
tabela.
O parâmetro ignore fará com que ocorrências sejam relevadas e a ação ocorra de
forma forçada, e a principal cláusula do segundo exemplo é on duplicate key update
que realiza o que é indicado após o comando update que, ao invés de gerar erros
pela duplicidade de chaves primárias, e ao invés da geração do erro, converte a ação
em atualização da tupla com base no critério indicado de somar o valor existente no
atributo com o novo valor indicado no comando.
Este método gera uma inserção de novas tuplas em uma tabela, mas serve também
para atualizar dados em entidades já existentes, mas não é a melhor forma de se
atualizar dados, pois existe um comando próprio update para esta nalidade que
possui uma sintaxe que segue um padrão semelhante aos demais comandos de
gerenciamento, com suas particularidades.
121
Com base nos exemplos citados, é possível ver como é mais completo o comando
update em relação ao comando insert para esta nalidade, pois permite cláusulas
bem especí cas que auxiliam no processo de atualização de dados.
O segundo inclui uma condição que em caso de algum cliente possuir débito maior
que 0, o sistema, automaticamente, muda o status do mesmo para bloqueado,
servindo como um atualizador da situação cadastral de clientes inadimplentes.
O último traz um comando maior, com uma lógica mais complexa por trazer a
necessidade de interpretação de condicionais complementares num mesmo
comando, em que uma melhoria no comando do segundo exemplo é feita de forma
que se o débito for maior que zero, o status é bloqueado, mas, caso contrário, é
atualizado o atributo status como desbloqueado.
122
Um aspecto importante que complementa as ações estudadas até o momento de
manipulação de dados é o de que as alterações realizadas nos dados devem ser
con rmadas ou desfeitas em uma etapa posterior à execução dos scripts de
comandos, oferecendo uma garantia extra de que a ação desejada realmente foi a
executada.
O comando commit work tem a função de con rmar as modi cações realizadas por
comandos insert ou update, por exemplo, tornando os efeitos dos comandos
permanentes e o cializados perante o banco.
É importante citar que rollback não desfaz o que foi feito antes de um commit, e uma
boa aplicação para rollback é a de associar seu uso a erros que podem ocorrer em
comandos ou desastres que necessitem de restauração de dados como em quedas
de energia, por exemplo.
Existem variações para o comando join, como left join, right join e full join, além de
apenas join, observando que dependendo da versão do SGBD pode haver diferenças
no uso do comando, como o uso dos comandos inner join, left outer join, righ outer
join, e full outer join.
Essas variações do comando join servem para modi car os resultados de consultas,
como no caso do left join, que após veri car a igualdade de dados entre atributos de
duas tabelas, traz apenas dados da primeira tabela, enquanto que right join traz
dados da segunda que tenham correspondência na primeira tabela.
123
Pensando na teoria de conjuntos da matemática, o comando inner join seria
equivalente à intersecção de dados iguais nas duas tabelas, ignorando dados que não
estejam simultaneamente nas duas tabelas.
A opção left join resultaria em uma listagem que conteria todas as tuplas da primeira
tabela mesclada com dados da segunda, quando houver correspondência (incluindo
null nos atributos sem correspondência), e right join retornaria uma listagem
contendo todas as tuplas da segunda tabela mesclada com a primeira, mas
constando null nos atributos da primeira sem correspondência.
Imagem 44
select * from cliente left join venda on cliente.cod_cli =
venda.cod_cli;
Fonte: O autor.
Observando a imagem 44, temos um exemplo de resultado obtido por uma consulta
contendo a cláusula left join onde todas as tuplas da tabela cliente indicada pela cor
amarela e na parte azul, os dados das tuplas da tabela venda, quando os valores de
cod_cli das duas tabelas sejam iguais, caso contrário, retornando null.
Mudando para right join, a diferença seria de que todas as tuplas da tabela venda
seriam exibidas como resultado da consulta, mescladas com as tuplas da tabela
cliente, caso contrário, quando houvesse correspondência ou null.
124
Por m, full join une todas as tuplas das duas tabelas indicadas e exibe os atributos
indicados a partir de uma regra de correspondência de atributos, reforçando a
importância da correta estruturação das tabelas com atributos, chave primária e
chave estrangeira.
125
Outras cláusulas podem ser estudadas e agregar conhecimento útil para o
trabalho com banco de dados, como já citado, anteriormente, e uma
cláusula interessante é a baseada no termo having que adiciona uma
condição para que um agrupamento de dados seja feito, mas com a
exibição de dados apenas quando a condição for satisfeita.
126
11
Aos poucos, o contexto dessas páginas foi adaptado às inovações tecnológicas que
foram sendo agregadas à Internet, e o tipo de conteúdo foi incrementado com outros
tipos de dados, mas mantendo a ideia das páginas.
Isso seguia na contramão das estruturas todas padronizadas dos bancos de dados
relacionais, e quando as páginas web evoluíram ao ponto de poderem conter todo
um conjunto de conteúdo não diretamente visível aos usuários, como banco de
dados conectados a sistemas de informação, uma nova forma de organização de
dados começou a ser pensada, e linguagens próprias para a web como o HTML e o
XML ganharam muita força dentre os pro ssionais de TI.
128
Uma diferença importante em XML que resulta numa opção a ser estudada neste
material é que a linguagem XML possui recursos para trabalhar com banco de dados
e outros tipos de estruturas de dados.
Assim, aplicações criadas para acessar banco de dados através da Internet podem
utilizar a XML, como interface de acesso aos usuários com um processo de
desenvolvimento menos complexo do que utilizando linguagens de programação
tradicionais.
Imagem 46
<Título>Cadastro de Clientes</Título>
<cadastro>
<cliente>
<cod_cliente> 1 </cod_cliente>
<nome_cliente> Pedro </nome_cliente>
<cpf_cliente> 02456398563 </cpf_cliente>
</cliente>
<cliente>
<cod_cliente> 2 </cod_cliente>
<nome_cliente> Marcelo </nome_cliente>
<cpf_cliente> 12365496345 </cpf_cliente>
</cliente>
</cadastro>
Fonte: autor.
129
Observando o script da imagem 46, um exemplo em XML traz uma forma de
representação da estrutura de uma tabela onde são inseridas duas tuplas de dados
para comporem duas entidades.
A tag, logo na primeira linha do exemplo, indica uma informação de identi cação do
script em relação à sua nalidade, observando que o padrão em XML é que seja
colocada uma tag inicial e uma nal usando uma barra para diferenciação destas
funções, e tendo um texto identi cador da funcionalidade do script.
As demais tags são para a operação de inserção de dados numa tabela cliente de um
banco de dados, adicionando os dados para composição de duas tuplas em um
formato não baseado no modelo relacional, exatamente, mas seguindo uma ideia de
divisão dos dados em atributos como ocorre no modelo.
Um script semelhante ao que seria feito no modelo relacional usando SQL poderia
ser criado com os comandos indicados acima através do uso do comando insert para
adicionar os mesmos dados numa tabela chamada cliente.
Um script criado em XML pode ser utilizado para gerenciar o processo de inserção
em um banco de dados utilizando o processo similar ao do modelo relacional, mas
pode também permitir estruturas menos padronizadas, assim como as tags podem
ser organizadas em níveis e subníveis para a de nição da inserção de dados em
formatos mais exíveis.
130
Imagem 47
<Título>Venda</Título>
<venda>
<dados>
<cod_venda> 1 </cod_venda>
<nota_fiscal_venda> 1 </notafiscalvenda>
<data_venda> 10/2/2021 </data_venda>
<cod_cliente> 1 </cod_cliente>
</dados>
<produtos>
<cod_produto> 2 </cod_produto>
<total_produto> 100,00 </total_produto>
<cod_produto> 5 </cod_produto>
<total_produto> 5000,00 </total_produto>
<cod_produto> 18 </cod_produto>
<total_produto> 250,00 </total_produto>
</produtos>
<fechamento>
<total_venda> 5350,00 </total_venda>
<forma_pagto_venda> Dinheiro </forma_pagto_venda>
</fechamento>
</venda>
Fonte: autor.
131
Nesse exemplo da imagem 47, a base da estruturação do script segue o mesmo
estilo, mas os dados e a estruturação desses é que varia, dividindo a estrutura da
venda em outras três subestruturas de dados, produtos e fechamento com suas
respectivas tags, e tags aninhadas equivalentes a atributos com os dados.
Na estrutura de nida, uma venda conteria dados básicos como número da venda,
nota scal, cliente e data, três produtos lançados na venda, e uma parte nal
contendo o valor total e a forma de pagamento.
O uso das tags pode não ser o método mais garantido, pois elas se repetem ao longo
do script, mas, por outro lado, servem como indicadores para facilitar a
documentação pela forma como são escritas.
Por ser mais livre o formato, novas tags referentes a atributos e seus
dados podem ser adicionadas ou excluídas mais livremente, sendo que
numa transmissão de dados entre origem e destino pela web, o
destinatário possui mecanismos para adaptar sua absorção aos dados
enviados, ignorando dados não esperados e deixando nulos os não
informados pelas tags.
132
Um terceiro ponto relevante é que a estrutura exibida na imagem 47, num modelo
relacional seria mais complexo, envolvendo entidades e relacionamentos separados
com scripts de maior complexidade, enquanto em XML, bastou-se encadear tags em
níveis para que se pudesse identi car níveis de aninhamento dos dados.
Inicialmente, todo script gerado em um documento começa com uma tag principal
que é fechada ao nal do documento, encerrando o script, e as demais tags cam
praticamente todas dentro desta principal, exceto pela tag de Título mostrada nos
exemplos.
Além da sintaxe padrão de se utilizar uma tag inicial e nal para delimitar blocos de
outras tags, há casos em que uma tag única pode já servir para de nir alguma ação
simples, por exemplo, com uma sintaxe simples como a utilizada para se pular linhas
<br/>.
133
<vendas xmlns: site = “https://www.site_exemplo.com”>
<site:cliente>
...
</site:cliente >
</vendas>
134
Imagem 48
<!DOCTYPE vendas [
<!ELEMENT vendas ( (cliente | produto | venda) +)>
<!ELEMENT cliente ( (cod_cli nome_clie cpf_cli) )>
<!ELEMENT produto ( (cod_prod descrição_prod
valor_prod) )>
<!ELEMENT venda ( (cod_venda nota_fiscal total_venda
cod_cli cod_prod) +)>
<!ELEMENT cod_cli ( #PCDATA ) >
<!ELEMENT nome_cli ( #PCDATA ) >
... Demais atributos ...
] >
<vendas>
<cliente cod_cli = “1” nome_cli = “Pedro” cpf_cli =
“12345678921”>
<cliente cod_cli = “2” nome_cli = “Márcio” cpf_cli =
“02536598532”>
</vendas>
Fonte: autor.
135
Depois de de nida a estrutura pela DTD no script XML, a tag <vendas> atribuiu dados
ao banco para a geração de dois elementos, mas que poderiam ser muitos mais,
tanto para a mesma estrutura cliente quanto para as demais produto e venda.
XMLSchema
Tendo uma sintaxe simples e recursos limitados, a DTD não consegue, por exemplo,
de nir um domínio exato de dados como números positivos ou um determinado
intervalo de valores, por exemplo, mas é algo que pode ser melhorado com o uso do
chamado XMLSchema que permite de nições mais precisas como de tipos string ou
decimal ou parâmetros que delimitam intervalos de valores.
Imagem 49
136
<exemplo: element ref= ”cliente” minOccurs=”1”
maxOccurs= “unbounded”/>
</exemplo: sequence>
</exemplo: complexType>
</exemplo: schema>
Fonte: autor.
Pela sintaxe da linguagem XML, identi ca-se o banco e, neste exemplo, indica-se que
ele deve ser ajustado de acordo com o tipo Detalhes que é especi cado mais ao nal
do script para determinar que faixa de valores representam os dados numéricos a
serem inseridos.
O elemento cliente, pertencente ao banco vendas, é de nido dentro de uma nova tag
complexType que de ne elementos mais detalhados, e sequence, outro elemento
utilizado na sintaxe da de nição dos atributos do registro de dados.
Em cada atributo, a cláusula type indica o tipo de dado para o elemento, e este tipo
pode ser melhor descrito como feito no elemento complexType que de ne,
realmente, as especi cidades do tipo Detalhes criado para uso no exemplo onde é
indicado que os dados numéricos não podem ser menores que 1.
137
Imagem 50
Fonte: autor.
E, na terceira parte, a tag keyref traz o conceito de chave estrangeira, de nindo para
o elemento venda, a chave_cli de nida, anteriormente, com chave estrangeira, sendo
indicados também o caminho para os dados e a qual atributo se refere a chave.
138
Dados contidos em formato XML podem ser convertidos para uso em
SGBDs como MySQL, observando-se que, para que seja possível, a
estrutura do banco em XML deve ser compatível com a utilizada no
modelo relacional para o MySQL.
Consulta XPath
As consultas em banco de dados XMl podem também ser realizadas, mas o processo
é diferente das consultas em bases relacionais, pois o formato dos elementos é
diferente das tabelas e atributos da modelagem relacional.
/vendas/cliente/nome_cli/text ()
Pedro
Márcio
139
A expressão acima traria como retornos os elementos indicados logo em seguida no
exemplo, e o uso do termo text () ao nal do caminho possui a função de não mostrar
tags com o nome do elemento no resultado, e apenas os dados em si.
/vendas/produto[valor_prod>100]
/vendas/produto[valor_prod>100]/ @cod_cli
Nos exemplos acima, o primeiro traz como retorno uma lista contendo elementos
com valor acima de 100, e o exemplo seguinte traz apenas o elemento cod_cli das
mesmas tuplas de dados encontradas usando a mesma condição de ltragem.
140
Outra alternativa para busca em um banco de dados XML é usar XQuery
que traz a base da linguagem XML adaptada para os conceitos da SQL
oferecendo uma alternativa ao uso de XPath.
A base de uma consulta XQuery são os comandos for, let, where, order by
e return (FLWOR) que compõem a sintaxe para um comando de consulta
de dados como se pode ver no exemplo a seguir, no qual for de ne uma
variável que recebe um a um os dados do elemento indicado no banco,
where uma condição para uso ou não dos dados, order by indica o
elemento que serve de base para ordenação dos dados, e return quais
dados serão exibidos (let pode realizar atribuições de dados lidos a
variáveis).
for $x in /vendas/venda
where $x > 100
order by $x
return $x
141
12
Gerenciamento
de Transações
142
Segundo Silberschatz (2020), uma transação se refere a uma ação completa de
manipulação de dados, iniciada por um script ou software que possuam em seu
código, comandos similares à begin transaction e end transaction para iniciar e
nalizar o processo da transação.
Qualquer ação realizada por scripts SQL ou em outra linguagem não deve corromper
ou afetar negativamente a integridade e consistência do banco e suas regras e, para
isso, as ações podem incluir regras de validação da entrada de dados como
validações de campos chave ou com formatos especiais como no caso de dados de
CPF, telefones, etc.
Técnicas que envolvam meios de que atualizações de dados em uma mesma base
ocorram de forma paralela para os usuários, mas de forma serial no banco de dados,
no qual cada usuário teria deu processamento realizado, individualmente, e seguindo
143
algum algoritmo de ordenação de processos e isolamento do acesso ao banco para
atualizações.
Processos concorrentes são muito comuns em banco de dados, pois com a evolução
tecnológica ocorrida, primeiro com a introdução das redes locais, até a atual
globalização dos bancos de dados pela Internet em que é possível que milhares de
usuários ou processos estejam acessando paralelamente um banco de dados.
Este processo envolve a veri cação da atualização efetiva dos dados após uma
transação, se necessária, controle de versões do estado do banco de dados e outras
validações necessárias para garantir que nada se perca ao nal de cada transação
ocorrida.
144
Por adicionar novos dados, esse processo envolve também a organização de todo o
banco para acomodação da nova entidade e isso envolve indexação das chaves e
organização estrutural dos dados sicamente em disco.
Como dito, todos esses processos podem não ocorrer efetiva e instantaneamente no
momento da transação, gerando uma lista de transações realizadas e afetando um
banco de dados temporário que, em determinado momento, irá efetivar as
transações no banco original de forma permanente, mas independentemente de
como seja o processo, em uma ou mais etapas, todo o processo envolve a gravação
dos estados em disco para garantir um dos 4 conceitos ACID de durabilidade.
Existem casos nos quais as transações vão atualizando dados de entidades que
podem depois serem utilizados em outras transações, e isto é outro motivo para que
as transações sejam realizadas em sequência e com a integridade e os demais
145
aspectos respeitados, de forma a evitar um efeito cascata de problemas ocasionados
pela falha na atualização de alguma transação dentro de uma sequência.
Estados de Transações
As transações ocorrem a todo momento, sendo nalizadas e concretizadas como
esperado (commit), mas há casos em que as transações podem não ser executadas
como esperado e são abortadas, gerando um processo muito importante relacionado
a esta interrupção.
146
Se for desejada uma espécie de reversão de alguma mudança ocorrida, é preciso
gerar uma atualização dos mesmos dados de forma a reverter, manualmente, os
dados alterados necessários, como no caso de uma transferência indevida de valores
para uma conta que precise ser desfeita.
No caso de uma transação monetária, por exemplo, se ela for realizada com sucesso,
gerará um novo estado do banco de dados, mas pode ocorrer de ser solicitado um
estorno da mesma, mas isto não é considerado um rollback. É preciso gerar uma
nova transação, debitando o valor se tiver sido depositado, ou depositado o mesmo
valor no caso de uma retirada que foi desfeita.
Silberschatz (2020) de ne 5 estados para uma transação que se inicia ativa e assim
permanece enquanto os processos vão sendo realizados e, em dado momento, a
transação pode passar para um outro estado de parcialmente con rmada ao nal do
processamento da transação, ou ter seu status alterado para falha em caso do não
processamento correto.
Caso uma transação entre no estado de parcialmente con rmada, ainda pode
ocorrer algum erro como na gravação dos dados pelo SBGD ou na etapa do sistema
operacional e o status mudar para falha, mas caso tudo ocorra como devido,
caminhará para um estado de con rmada em que se obtém todo o ACID relacionado
à transação.
No caso de falha na transação, a mesma pode ser reexecutada se for um erro que
possa ser contornado por algum motivo de momento, como queda de luz, por
exemplo, mas pode ser encerrada (kill) em caso de erros na geração da própria
transação, por exemplo.
O processo de geração de uma cópia do banco de dados para que se tenha dois
estados do mesmo a cada transação pode parecer complexo e exagerado, mas, na
verdade, é a melhor forma de se garantir a possibilidade de um rollback quando
necessário, mas é importante observar que a cópia de segurança é não gerar uma
cópia extra a cada transação, pois seria insustentável do ponto de vista físico de
armazenamento.
147
A chamada cópia de sombra é criada logo no início do processamento de uma
transação, antes que a mesma possa gerar alguma alteração no banco, e se mantém
durante todo o processamento até que um commit ou um rollback ocorra com a
transação.
Transações Simultâneas
A chamada execução simultânea ou paralela de transações não acontece,
efetivamente, pois o banco de dados é único e deve ser mantido íntegro, aspecto que
não poderia ser garantido com mais de uma transação podendo modi car seus
dados num mesmo instante.
As modi cações poderiam ocorrer sobre dados sem ligação aparente no banco, mas
como existe uma rede de conexões entre tabelas e atributos de um banco, é difícil
garantir que uma transação não tenha in uência em mais de um ponto do banco de
dados.
Um atributo pode ser modi cado de forma a alterar apenas um dado de um atributo
comum especí co de uma tabela, como um ajuste em uma data de nascimento de
um cadastro de clientes, mas é preciso compreender que em cada caso, este dado
pode ter implicações maiores que apenas fazer parte de uma entidade, pois o dado
pode ter relação com o processamento de outras transações que podem, inclusive,
estar ocorrendo em paralelo.
148
Outro caso poderia ser numa auditoria em um cadastro de pessoas que têm direito
ao recebimento de uma aposentadoria por um erro de cadastro e que, num ajuste,
poderia ser constatado o equívoco da idade e o benefício ser negado de forma justa,
mas ocorrendo em paralelo, poderia ser mantido até nova validação que pode
ocorrer apenas de tempos em tempos.
Alguns bancos estão ligados diretamente à Internet e geram transações 24 horas por
dia em maior ou menor volume, ao passo que sistemas locais podem ter janelas de
tempo para geração e processamento de transações, mas, de forma geral, sempre se
busca a otimização do throughput para que se possa reduzir tempos de resposta em
sistemas.
Transações maiores com vários processos podem ser fracionadas caso a divisão
destas envolva a efetiva realização dos processos inteiros que estejam contidos na
transação, mas que possam ser realizados separadamente de outros processos da
mesma transação, como no caso de várias inserções de dados numa mesma
transação que podem ser realizadas uma a uma em frações de tempo avulsas,
permitindo que outros processos de outras transações sejam realizados,
alternadamente, seguindo as mesmas regras de atomicidade.
149
Uma das características importantes do ACID, o isolamento, possui
relação direta com a concorrência de transações, e uma transação deve
ser executada por completo para ser considerada con rmada, mas para
se otimizar o gerenciamento e uso de um banco de dados, processos que
ocorrem em paralelo auxiliam na dinamicidade do uso, pois se muitos
usuários solicitam uma transação, mas todas são realizadas integralmente
em sequência, aquele que solicitou por último, poderia esperar por um
tempo desnecessário, assim como outros que solicitaram antes. Isto pode
ocorrer em função da demora na inserção manual de dados, por
exemplo, enquanto o processo de inserção não é realizado, todos os
recursos estariam bloqueados.
150
13
Controle de Concorrência
e Recuperação
151
Visando controlar o processamento concorrente de transações, mecanismos foram
criados para oferecer meios de que esse tipo de processo seja seguro e possa ao
mesmo tempo ser capaz de aumentar o throughput de uso de infraestrutura, e
garantir o isolamento necessário das transações e a integridade e durabilidade do
banco de dados.
Controle de Concorrência
Um mecanismo básico para oferecer essa possibilidade de concorrência segura de
transações é chamado de exclusão mútua, em que os recursos de banco de dados
sendo acessados por uma transação cam bloqueados para os demais, gerando um
isolamento da transação e garantindo os meios para uma correta execução dos
processos, independentemente de o resultado da transação ser falha (rollback) ou
con rmada (commit).
Um tipo de bloqueio é parcial, permitindo que uma transação possa apenas acessar
dados do banco, em modo de leitura, sem poder realizar alterações, permitindo que
os mesmos dados sejam compartilhados entre outras transações com o mesmo tipo
de bloqueio, por exemplo, aumentando o uso de recurso de infraestrutura e de
acesso ao banco de dados.
Outro tipo é mais restritivo e exclusivo, permitindo que a transação realize todo tipo
de ação com os dados em uso, desde leitura à exclusão dos mesmos, sendo que,
neste mecanismo, todas as demais transações não possuem acesso nem de leitura
dos mesmos dados para evitar problemas com os aspectos relacionados ao ACID.
152
Imagem 53
INSERÇÃO DESBLOQUEADO
ATUALIZAÇÃO DESBLOQUEADO
DESBLOQUEADO
Fonte: O autor.
153
Depois de encerrada a transação de consulta, a tabela pode então ser desbloqueada
para ser requisitada pela transação 2 de inserção e, no passo seguinte, é efetivado
um bloqueio exclusivo para que se possa realizar a transação.
Durante esta transação de inserção, uma nova transação, desta vez, de atualização
de dados na tabela solicita acesso à tabela, mas a mesma se encontra bloqueada e a
transação ca em espera até a liberação da mesma.
Uma situação que pode ocorrer e é até bastante provável seria de, durante um
bloqueio compartilhado para uma transação, outra de manipulação de dados esteja
aguardando a liberação do bloqueio para então poder ser realizada, mas neste meio
tempo, outra transação de consulta poderia surgir e aproveitar o status de bloqueio
compartilhado e também acessar os mesmos dados.
154
Silberschatz (2020) cita que pode ser utilizado um protocolo para bloqueio baseado
em duas fases, em que uma primeira fase é chamada de crescimento na qual uma
transação solicita bloqueio e o mesmo sendo concedido, realiza seu processamento.
Depois, ao terminar a transação, libera-se o bloqueio, mas a mesma entra numa fase
de encolhimento, e se precisar novamente de um bloqueio para outra etapa de sua
transação, ca impossibilitada de solicitar por determinado número de ciclos de
tempo, permitindo que outras transações possam ter iguais chances de obter
bloqueios e serem processadas.
Imagem 54
FILA DE TRANSAÇÕES
TRANSAÇÃO A TRANSAÇÃO B
TRANSAÇÃO C TRANSAÇÃO D
TRANSAÇÃO F TRANSAÇÃO E
Fonte: O autor.
155
A ilustração da imagem 54 traz um exemplo de como poderia ser organizada a árvore
de transações, supondo que o bloqueio iniciaria permitindo à transação A ser a
primeira processada, mas existe a necessidade de manutenção da estrutura e, por
isso, a intersecção de todas as ligações entre as transações, ou raiz da árvore indica
apenas um nome para a estrutura, sendo as transações indicadas abaixo da raiz.
Sistema de Recuperação
A recuperação de um banco de dados em casos de falha é muito importante e
garantir que dados não sejam corrompidos envolvem diretamente as propriedades
de atomicidade e durabilidade, envolvendo mecanismos para garantir o retorno de
um banco de dados ao seu estado anterior original em caso de falhas em transações.
156
As falhas, geralmente, podem estar associadas a problemas nas próprias transações,
como dados incorretos com as especi cações do banco ou consultas a dados
inexistentes, assim como impedimentos do próprio banco de dados em função de
paradas para manutenção, etc.
Outro tipo de memória dito não volátil se baseia em discos, como discos rígidos (HDs)
que podem estar alocados, localmente, ou através da Internet em locais remotos,
memórias do tipo ash, como pendrives e cartões diversos, tas magnéticas, etc. que
podem guardar dados mesmo com a ausência de energia, mas que podem ser
inseridos, alterados e excluídos, se desejado, sendo que ainda existe o risco de perda
de dados por processos equivocados de manipulação destes dispositivos.
157
gravação como CDs e DVDs comuns, mas é possível, por outros meios, se obter um
meio próximo ao estável, mas ainda volátil.
Este processo pode ser expandido através da cópia dos dados em mais de uma
máquina, podendo estas terem o mesmo mecanismo RAID de discos instalados, mas
sendo estas cópias gerenciadas entre as máquinas através do sistema do banco de
dados, pois a tecnologia em si é criada em nível de hardware da máquina.
158
Também é possível que máquinas dedicadas ao armazenamento estejam localizadas
em pontos remotos para aumentar a resistência dos sistemas a desastres como
quedas de luz, inundações em um dos locais e outros problemas diversos que
possam inutilizar um ou mais dos locais de armazenamento temporário ou
permanentemente.
159
Um método de veri cação de inconsistência assim é o de recuperação através de
rollback baseado em logs do sistema que representa um histórico de transações
ocorridas e que pode indicar falhas a serem veri cadas a partir de dados contidos
nos logs como identi cadores de transações e alterações de valores realizadas.
160
Existe uma técnica de recuperação baseada na marcação de checkpoints
durante as transações, de forma a gerar pontos de recuperação em caso
de falhas, e na ocorrência de alguma, o checkpoint mais recente garante
que um estado seguro da transação pode ser obtido no checkpoint e a
partir dali a transação possa ser retomada. É importante de nir
corretamente os checkpoints, pois estes devem representar processos da
transação que ocorreram com sucesso e que possam ser consideradas
realizadas e con rmadas com sucesso sem risco às propriedades ACID.
161
14
Arquiteturas de Banco
de Dados Paralelos e
Distribuídos
162
Todo banco de dados necessita estar associado a algum hardware e, inicialmente,
uma máquina única continha um banco de dados e o sistema gerenciador do mesmo
de forma local para que fosse acessado por um usuário de forma exclusiva.
Depois, com a evolução das redes locais, surgiu a ideia do servidor da rede que
permitia o compartilhamento de arquivos, software e recursos de hardware com os
demais equipamentos alocados na rede.
Nessa época, surgiram também sistemas gerenciadores de banco de dados que eram
instalados no servidor e através de protocolos de comunicação e sistemas
distribuídos entre servidor e equipamentos clientes, permitiu que uma base de dados
casse alocada sicamente no servidor e pudesse ser compartilhada entre os
clientes, surgindo aí a necessidade de cuidados com las de transações, concorrência
e outros mecanismos próprios para este sistema de banco de dados.
163
Sistemas Paralelos
Em muitos casos, com a massi cação da Internet, bancos de dados agregam
enormes quantidades de dados, sendo algo impensável ser armazenado em um
sistema isolado em um único equipamento de hardware por motivos diversos.
164
Por mais poderoso que seja o equipamento isolado, uma simples consulta
pode levar muito tempo e gerar transtornos diversos com lentidão, fora o
fato de todo o sistema depender do pleno funcionamento deste
equipamento. Logo, subdividir a carga entre mais equipamentos é o
mínimo a ser feito, e assim surgiu a ideia de se organizar racks com
equipamentos que, juntos, oferecem melhores recursos de
armazenamento, processamento e garantia das propriedades ACID
essenciais para este tipo de aplicação.
Os chamados data centers são uma alternativa excelente para lidar com sistemas
pesados que lidam com grandes bases de dados, pois, normalmente, são dotados de
equipamentos de alta tecnologia e performance tendo muito espaço de
armazenamento espelhado e seguro, além de ter componentes de hardware ditos
redundantes, ou seja, capazes de serem trocados mesmo com os equipamentos em
funcionamento, como fontes de energia, discos, etc.
Um data center, por ser todo espelhado, inclusive, mesmo que gerando altos custos
de manutenção, para certas situações, este tipo de investimento passa de importante
para obrigatório devido à natureza dos dados contida, ou de se tratar de uma
prestadora de serviços de fornecimento de infraestrutura de TI (outsourcing).
Normalmente, os data centers representam o estado da arte da TI, mas podem ser
usados tanto em redes locais como em sistemas cliente-servidor, mas não é uma
situação comum, salvo em casos em que seja necessário o isolamento da
infraestrutura, por motivos de segurança, por exemplo.
165
Um data center por possuir tecnologia que permita o processamento paralelo real,
diferente do que é feito pela divisão de fatias de tempo de processamento que
simula processamento paralelo de transações.
A forma como se utiliza este paralelismo real depende muito do ajuste do sistema
operacional em disponibilizar este recurso disponível, mas que pode ser subutilizado,
como quando se usa software baseado em arquiteturas de hardware 32 bits em
equipamentos 64 bits, pois se reduz a capacidade de processamento do hardware
para aquele software.
166
Sistemas operacionais e outros softwares podem ser encontrados em
versões de 32 e 64 bits, mas o que isto gera de diferença na prática?
É possível encontrar no mercado hardware de base com preço acessível para uso de
dois processadores simultâneos, por exemplo, permitindo que dois cálculos
diferentes possam ser realizados ao mesmo tempo, ou uma transação em um banco
de dados ocorra exatamente ao mesmo tempo em que se realiza um outro processo
em outro processador, obtendo-se algo similar à duplicação da capacidade de
processamento.
Existe, inclusive, uma denominação para estes equipamentos que diz que um
equipamento que possua alguns poucos processadores potentes em paralelo seja
considerado uma máquina com granularidade grossa, mas no caso de equipamentos
com grandes quantidades de processadores menos potentes são chamados de
máquinas com granularidade na.
167
Este tipo de tecnologia afeta diretamente valores ligados à throughput e tempo de
resposta em transações e processos, pois na primeira métrica, o paralelismo
aumenta muito a quantidade de processos que podem ser realizados,
simultaneamente, reduzindo de maneira inteligente, las geradas por transações que
sejam mais lentas e que poderiam atrasar toda uma la de processos.
No caso da avaliação em escala, se uma transação leva determinado tempo para ser
executada por completo, com o aumento de recursos em paralelo, caso um aumento
equivalente da complexidade das transações possa mesmo assim manter o mesmo
tempo de realização, pode-se dizer que existe um ganho linear em escala, mas caso o
tempo aumente, é dito um ganho escalar sublinear.
168
Aspectos Arquiteturais
Esses sistemas paralelos são obtidos através de tecnologias em hardware que
permitem que discos, processadores e memória, principalmente, possam ser
multiplicados em equipamentos, mas além disso, que possam dividir as tarefas de
forma a serem realizadas paralela e simultaneamente.
As maneiras como estes componentes podem ser conectados entre si, de diferentes
formas, geram redes de componentes para operarem em paralelo, e a forma como é
feita esta rede possui nomenclaturas similares às utilizadas nas tecnologias de redes
de computadores.
Outro meio é a malha que interliga os componentes uns aos outros, diretamente, uns
através dos outros fazendo com que não haja um meio único de comunicação
compartilhado, dividindo a carga de comunicação entre processos e quanto maior a
quantidade de componentes de mesmo tipo, maior o paralelismo e também a
possibilidade de roteamento de processos.
Silberschatz (2020) cita que há casos em que a memória volátil (RAM) é compartilhada
entre todos os processadores alocados em paralelo, assim como discos não voláteis,
como discos rígidos, sendo este um recurso com alto desempenho e permite uma
e ciente comunicação, principalmente entre processadores.
169
Como existem limitações de projeto em função do uso de 32 ou 64 bits na
arquitetura destes componentes, isso gera limitações de endereçamento e
compartilhamento de recursos para esta quantidade de processadores e, em casos
nos quais sejam utilizados números maiores em paralelo, esta solução de
compartilhamento não se mostra funcional.
Ignorando, então, o fato de existirem cópias em tempo real ou cópias de backup que
acrescentariam bastante complexidade a esse contexto, não é muito sensato que
houvesse um banco de dados para atender a cada dispositivo paralelo de
processamento, por exemplo e, assim, acaba sendo muito comum a prática de uma
única base de dados de origem a ser utilizada por todos os usuários, salvo em casos
170
em que o volume de transações possa ser tão grande que seja inviável do ponto de
vista do desempenho de hardware e haja a necessidade de replicação do banco de
dados para um grupo de usuários.
Com essa técnica, é possível que clientes de uma ntech como o Nubank, por
exemplo, possa manter infra estruturas completas para cada determinado conjunto
de clientes para garantir as propriedades ACID com maior segurança para cada um
destes grupos de clientes.
Pode haver casos nos quais os dispositivos não são compartilhados e cada
equipamento possui todos os recursos necessários e acaba sendo mais
independente dos demais equipamentos da infraestrutura, sendo que existe tráfego
de dados entre os equipamentos, sempre que necessário.
Um último modelo trazido por Silberschatz (2020) mescla característica dos outros
três modelos citados chamado hierárquico onde existem níveis de divisão da
infraestrutura, sendo um primeiro nível mais alto formado por hardware com base
no modelo dito nada compartilhado de subsistemas de hardware. Parte dos
dispositivos forma uma unidade ligada ao restante da infraestrutura, mas dentro
desta estrutura, a memória RAM poderia ser compartilhada única para cada conjunto
de dispositivos nada compartilhados.
171
Os SGBDs são ferramentas com muitos recursos e um dos melhores,
certamente, é a opção disponibilizada pela Oracle. O paralelismo é uma
das tecnologias implementadas nesse SGBD muito popular no mercado.
Sistemas Distribuídos
A ideia geral de sistemas distribuídos se baseia no fato de um banco de dados estar
armazenado em diferentes equipamentos que podem estar sicamente próximos ou
não, mas que con guram algum tipo de acesso remoto entre os equipamentos.
172
As transações locais são aquelas em que tanto a origem quanto o destino se
encontram em uma mesma infraestrutura ou site, como se diz, em sistemas
distribuídos, e transações globais têm sua origem em algum site diferente de onde
devem ser efetivamente realizadas.
Nesta arquitetura, partes do banco de dados mais especí cas podem estar alocadas
em um site e as demais partes em um ou mais outros sites, dependendo da
complexidade e avaliação de pontos positivos e negativos desta distribuição do
sistema em partes.
Isto gera certa liberdade dos sites em gerenciar bancos de dados locais, podendo
então a carga de transações ser também distribuída, pois transações locais geram
baixo custo, ao passo que eventuais transações globais possuem maior custo, mas
podendo-se obter ganho de desempenho com esta arquitetura.
173
com a infraestrutura, por exemplo, a mesma deve continuar operando normalmente
para outros usuários.
Existem pontos de atenção citados por Silberschatz (2020) como maiores custos
associados ao desenvolvimento de soluções de software distribuído pela maior
complexidade de operação, com maior possibilidade de ocorrência de bugs ou
problemas na implementação e implantação de maior ou menor gravidade, e a
possibilidade de throughput excessivo, não especi camente relacionado às
transações dos sistemas, mas pela garantia da comunicação entre os sites que
compõem a infraestrutura distribuída.
Para nalizar, é importante frisar que os sistemas distribuídos são alocados em redes
locais com toda sua infraestrutura ligada através de meios de comunicação de curta
distância, como cabos e sinal de WI-FI, ao passo que redes remotas que possuem
partes espalhadas por diferentes locais podem estar gradativamente mais distantes
usando diferentes tecnologias de comunicação, como cabos, redes de telefonia
móvel como 3G, 4G e 5G, sinais de rádio e conexões via satélite, por exemplo.
174
15
176
Paralelismo de Disco para Banco
de Dados
O compartilhamento de disco é a forma mais comum de paralelismo e a mais
utilizada, provavelmente, pois a necessidade de investimento para implantação e
uso é menor e a manutenção de sistemas sendo executados com esta tecnologia
também são menos propensos a bugs e custos de implementação que o
paralelismo de processamento, por exemplo.
O particionamento do banco de dados entre diferentes discos pode ser feito com
base em algoritmos que fazem a distribuição das entidades entre discos, como no
caso do chamado rodízio, que tenta manter equilibrada a distribuição das
entidades com base na alocação de cada nova entidade em um dos discos que
compõem o conjunto usado no paralelismo, de forma sequencial, como de pessoas
entrando em cadeiras de uma roda gigante.
Na estratégia de hash, os próprios dados das entidades podem ser utilizados como
critérios de escolha do disco a ser armazenada à entidade como um cálculo
matemático realizado sobre um valor numérico de um dos atributos, sendo que a
correta escolha do atributo e do cálculo determinarão se ocorrerá um equilíbrio na
distribuição ou não.
Como citado, exceto pelo mecanismo que fatia igualmente as entidades através de
um rodízio equivalente de discos, os demais algoritmos podem gerar maiores
acúmulos em um disco em relação a outro podendo ser classi cados como
distorções.
177
Uma das distorções ocorre quando certos atributos possuem valores que ocorrem
muito mais vezes que outros, determinando que uma grande proporção das
entidades seja armazenada em um disco, e poucas entidades nos demais, por
exemplo.
178
Banco de Dados Distribuídos
Assim como em sistemas distribuídos que se localizam em diferentes sites (pontos
físicos distintos), bancos de dados podem também trabalhar de forma distribuída,
armazenando seus dados em estrutura fracionada, distribuída por sites.
É fácil imaginar que o fato de haver este distanciamento entre partes do banco de
dados deve gerar grande tráfego de dados pelos canais de comunicação e isto
acaba gerando perda de rendimento do sistema, além de uma maior complexidade
na organização e gerenciamento do banco de dados.
Outro sistema é composto por sites que não possuem infra estruturas de banco de
dados iguais, podendo diferir no SGBD e demais softwares componentes,
aumentando a complexidade da comunicação e gestão conjunta, ocasionando
menor interação entre os sites, restringindo-se mais a consultas e transações
limitadas.
Como existe a replicação total dos dados, isso gera um tipo de paralelismo que
permite transações rápidas que ocorrem dentro de si mesmo, pois existem quase
100% de chances do que uma transação se propõe a realizar poder ocorrer no site,
sem a necessidade de acesso a outros que depois teriam o banco de dados
atualizado do site onde ocorreu a transação, replicada para os demais sites.
179
Existe o problema de maior throughput aumentado em função das operações de
manutenção das réplicas atualizadas o mais constantemente possível, e isso pode
gerar atrasos nas transações, principalmente em infra estruturas com canais de
comunicação não tão rápidos e e cientes.
Esta fragmentação pode ser feita de forma dita horizontal quando uma relação é
particionada de forma que suas tuplas de dados representando as entidades do
conjunto de entidades estejam todas armazenadas em algum dos sites, de forma
que seja possível a mescla de todas as tuplas separadas para a formação da tabela
completa, sempre que necessário.
O algoritmo pode conseguir prever uma melhor distribuição das tuplas, de acordo
com a quantidade de acesso de cada uma, por exemplo, minimizando o tempo de
busca e de comunicação entre sites.
Esta transparência não deve oferecer indícios ao usuário de que o banco de dados
possa estar fracionado horizontal e nem verticalmente, e nem se existe uma
replicação do banco, pois, aparentemente, todo o banco e sistemas estão sendo
acessados localmente.
180
precisam trabalhar dados que podem estar em diferentes sites, mas que, ao nal,
precisam garantir da mesma forma as propriedades ACID.
Silberschatz (2020) cita que além de problemas comuns como falhas relacionadas a
software e hardware envolvendo equipamentos e dispositivos utilizados
diretamente no armazenamento dos dados, em banco de dados distribuídos, as
falhas podem estar relacionadas a sites e comunicação, envolvendo aspectos
diversos de infraestrutura.
Para isto, pode ser necessário que sejam realizadas as ações de uma transação em
etapas, em que uma primeira etapa seria a do registro de log para operação de
rollback, se necessário, e sinalização para todos os sites de solicitação de transação,
aguardando resposta positiva ou negativa de todos.
Pode ser implementada uma proposta alternativa em três fases que adiciona uma
fase de controle do próprio gerenciador de transações em con rmar as respostas
dos sites e isso ativa mecanismos de veri cação de status dos sites que
con rmaram resposta e escolhem um novo gerenciador de transações.
181
Há outros protocolos de processamento de transações citados por Silberschatz
(2020) como o de mensagens persistentes entregues apenas uma vez, uso de
relação especial de controle de envio de mensagens, ou um protocolo de uma
relação especial de controle de mensagens recebidas em sites do banco
distribuído.
Para isso ser possível em um sistema composto por diferentes sites são
necessários recursos para detecção de falhas, boa replicação do banco ou uma
perfeita fragmentação em termos de durabilidade dos dados, desde problemas
simples como perdas de dados na comunicação, como desastres que tiram um ou
mais sites do ar.
182
Conhecer mais sobre banco de dados distribuídos é algo importante
para o aprimoramento nos estudos desta área fundamental para o
mercado de trabalho. Neste material, segue um resumo com algumas
ilustrações e exemplos para auxiliar nos estudos.
183
16
Tópicos Avançados e
Mineração e Análise
de Dados
184
Sistemas de banco de dados são complexos softwares que lidam com um dos bens
mais valiosos do mundo atual, e da forma como os dados estão sendo captados e
tratados de forma a servirem de material para diversas nalidades, surgem novas
tecnologias, regularmente, com o intuito de oferecer meios de se organizar e
gerenciar os dados da melhor forma.
Mas a segurança é um dos pilares dos bons sistemas de banco de dados no mundo
atual da Internet, pois a comunicação pela web se baseia em um protocolo muito
e ciente, mas já bem conhecido. Por ser uma rede pública, necessita que os
mecanismos de segurança sejam bem implementados e até exagerados, muitas
185
vezes, para evitar invasões na infraestrutura com intuitos variados como
corromper bancos, roubar dados de forma invisível, ou até o chamado sequestro
de dados (ransomware).
186
Mineração de Dados
Durante muito tempo, banco de dados foram simples repositórios de dados nos
quais transações ocorriam com o objetivo de mantê-lo atualizado tendo como
objetivo maior o suporte a atividades reais gerenciadas por sistemas baseados
nestes banco de dados.
187
Sistemas que antes apenas aguardavam por requisições de transações puderam se
tornar ferramentas em tempo real de análise de dados e fornecimento de
informações sobre como os dados estavam se comportando e que avaliações se
poderiam obter a partir destes resultados fornecidos por estes sistemas.
Algumas informações básicas eram a base para análise de negócios como maiores
vendas, cálculos de lucros obtidos em períodos históricos recentes ou mais
distantes, e sazonalidade de um negócio, por exemplo.
Com a evolução das análises e cruzamento de banco de dados, aos poucos foram
sendo obtidas novas informações como tendências de consumo de clientes,
comparativos com resultados de concorrentes que eram publicamente acessíveis,
avaliação de produtos emergentes no mercado em relação aos que eram
oferecidos pelo negócio, etc.
188
Baseado no sistema Toyota de gerenciamento, o modelo just-in-time
permite que insumos e produtos estocáveis cheguem aos depósitos
apenas no momento de serem utilizados, ou o mais próximo possível
deste objetivo.
Esse tipo de estruturação mais complexo dos dados permite que novas consultas
de alto desempenho sejam possíveis, pois as próprias estruturas podem ser
organizadas de forma que num banco de dados relacional convencional, os
mesmos resultados teriam que ser obtidos em etapas.
189
As bases dos dados em sistemas desse tipo são medidas representativas de dados
numéricos puros, e os dados gerados a partir das medidas chamadas de
dimensões usadas diretamente nos sistemas de apoio à decisão, por exemplo.
O armazenamento dito em cubo no modelo OLAP tem este nome apenas por
permitir uma organização mais complexa dos dados, não necessariamente
compondo este formato no sentido geométrico, mas na ideia de se poder trabalhar
com mais de duas dimensões de dados, e daí a ideia de medidas e dimensões
como terminologia.
190
O uso de um data warehouse torna possível a aplicação de ferramentas em dados
originalmente armazenados em banco de dados distintos com schemas e
estruturas diferentes que di cilmente poderiam ser organizadas para uso em
consultas por um comando SQL, por exemplo.
É importante deixar claro que a área de mineração de dados não exclui o uso da
linguagem SQL ou XML, mas agrega novas funcionalidades a estas trazidas por
ferramentas ou novas implementações destas linguagens que possuem
características voltadas à mineração de dados.
A ideia das dimensões do modelo em cubo em OLAP pode ser de nida por
atributos que podem ser de nidos como medidas no caso de dados que possam
ser quanti cados como quantidades em estoque ou vendidas, mas também,
podem ser de nidos como dimensões que representam outros atributos que
servem como base para o agrupamento de medidas com base em cálculos como
somas ou médias, por exemplo.
Atributos como modelos, cores, cargos são típicos para uso na de nição de
dimensões, e atributos como quantidade em estoque ou vendida são atributos
típicos para medidas, modelos bidimensionais podem até ser utilizados para
organização dos dados até certo nível, mas a organização em cubo pode oferecer
maior clareza dos dados incluídos.
191
Imagem 55
GM ONIX PRETO 3
VW GOL BRANCO 3
VW FOX BRANCO 4
GM ONIX PRATA 6
GM ONIX ALL 9
VW FOX BRANCO 4
VW GOL BRANCO 3
192
MARCA MODELO COR ESTOQUE
GM ONIX ALL 9
VW ALL ALL 7
Fonte: O autor.
Depois, na terceira tabela da imagem 55, é usada mais uma dimensão para receber
o valor all e condensar ainda mais o resultado da consulta, tendo então como
resultado nal do exemplo, os totais de carros por marca, independente de
modelos ou cores.
193
A forma como as implementações OLAP geram seus cubos de medidas e
dimensões pode seguir mecanismos variados como somas ou médias em atributos
que possam servir como medidas em algoritmos mais simples, mas existem
também opções mais complexas que se baseiam em cálculos estatísticos mais
elaborados como variância e desvio padrão.
No segundo exemplo, por ser indicada uma hierarquia, são exibidos apenas
resultados que contenham o atributo principal em todos, e as possibilidades de
combinação com os demais: nome_cliente, valor_venda | nome_item.
Existem outros pontos adicionais que podem ser utilizados e que agregam recursos
valiosos ao OLAP e que podem ser conhecidos em pesquisas nas referências
bibliográ cas citadas e outras boas fontes literárias ou sites com conteúdo de
procedência também con ável.
194
Conclusão
O conhecimento acerca da área de banco de dados representa uma importante
informação para a formação pessoal e demandas do mercado, e a base conceitual
tratada na disciplina, agregada a estudos complementares e prática exaustiva do que
é prático, certamente, irá contribuir com grandes chances de ingresso no mercado
para novos, ou de melhoria de currículo e possibilidades de mudança ou crescimento
perante sua situação atual. Mas isto depende, de agora em diante, mais do aluno do
que dos materiais ou quaisquer professores, pois o primeiro passo foi dado e os
demais virão dos pés do aluno e sem apoios para se segurar.
Produtos podem ser desenvolvidos de forma simples buscando apenas a prática, mas
este pode já atender demandas de pequenos negócios, assim como podem servir de
base para o desenvolvimento de soluções mais complexas.
Assim, sempre é preciso ter em mente que mesmo com o término da disciplina seu
aprendizado e evolução na área continua, mesmo que não existam outras disciplinas
da mesma área em sua matriz curricular, e isso não é algo dito para banco de dados,
mas para todas as disciplinas do curso.
Bons estudos!
195
Material Complementar
Livro
Editora: LTC
Filme
Ano: 2019
196
Web
197
Referências
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de banco de dados. 7ª ed.
Rio de Janeiro: LTC, 2020.
SETZER, V. W.; SILVA, F. S. C. Banco de dados: aprenda o que são, melhore seu
conhecimento, construa os seus. 1ª ed. São Paulo: Blucher, 2005.
198