Escolar Documentos
Profissional Documentos
Cultura Documentos
BANCO DE DADOS I
MISSÃO
VISÃO
EDITORIAL
Seja bem-vindo!
APRESENTAÇÃO DA DISCIPLINA
LISTA DE FIGURAS
>>FIGURA 1 - Palavras 15
LISTA DE TABELAS
>>QUADRO 1 - Principais problemas na utilização de sistemas de arquivos 18
SUMÁRIO
CONCLUSÃO 28
CONCLUSÃO 45
CONCLUSÃO 76
CONCLUSÃO 91
CONCLUSÃO 102
ICONOGRAFIA
ATENÇÃO ATIVIDADES DE
APRENDIZAGEM
PARA SABER
SAIBA MAIS
ONDE PESQUISAR CURIOSIDADES
LEITURA COMPLEMENTAR
DICAS
GLOSSÁRIO QUESTÕES
MÍDIAS
ÁUDIOS
INTEGRADAS
ANOTAÇÕES CITAÇÕES
EXEMPLOS DOWNLOADS
UNIDADE 1
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
1 CONCEITOS BÁSICOS
DE BANCO DE DADOS,
ARQUITETURA E USUÁRIO
Nesta unidade, serão apresentados os conceitos básicos de dados, tais como, a arqui-
tetura de um sistema de banco de dados, SGBD e exemplos, conceitos importantes
de entidades, atributos, além da introdução de como acontece o relacionamento em
um banco de dados, sendo exemplificado com modelos simples de MER. Ao final será
abordado quem são os usuários em um banco de dados e seus papéis. Esperamos
que essa seja a base fundamental para guiar seus estudos nas próximas unidades.
A forma como as informações eram armazenadas neste início foi denominada como
sistema de arquivos. Em sua concepção o acesso às informações era eficiente, mas a
partir do momento que houve um crescimento no número de informações, surgiram
problemas relacionados com a separação de dados e isolamento. Tais problemas
aconteciam na consulta de dados relacionados e na inserção deles, pois eram feitas
duplicidades, o que fazia com que as informações tivessem um crescimento signifi-
cativo. Neste cenário ocorria muita redundância, inconsistência de dados e também
problemas relacionados à segurança da informação.
Podemos então pressupor que era necessário desenvolver uma forma mais inteligen-
te para realizar o armazenamento de dados, certo? Pois bem, foram pensadas formas
de se criar um banco que fizesse o armazenamento de dados, mas estruturado de
forma predefinida. Essa ideia tinha como premissa que os dados tivessem proprieda-
des definidas, apresentando lógica e coerência e acima de tudo que fossem criados
com propósitos determinados.
Surgiu então o que se entende como banco de dados. Nos próximos tópicos iremos
detalhar o significado de conceitos importantes na busca da melhor assimilação des-
se conhecimento.
FIGURA 1 - PALAVRAS
ção dessas palavras: “a manga verde é uma fruta grande”. Mas podemos pensar tam-
bém que “na manga de uma camisa verde, existem estampas de frutas grandes”. Veja
que a mudança é o nível da abstração. O menor nível de abstração da informação é
um dado, sendo assim um fato apresentado em sua forma primária. Os dados geram
informação, que por sua vez fornecem o conhecimento.
CRITÉRIOS NO USO DE
PROBLEMAS IDENTIFICADOS
SISTEMAS DE ARQUIVOS
Ela quem manipula os dados e deve conter as
Quanto à aplicação desenvolvida informações do sistema de arquivos, existindo
com isso restrições.
É incorporada ao programa de acesso. Mudança
Quanto à estrutura dos dados na estrutura dos arquivos implica alterações no
código dos programas.
Não são garantidas propriedades corretas no
Quanto à redundância de dados gerenciamento dos dados. Ocorre redundância.
Mesma informação em arquivos distintos.
Existe dificuldade de acesso. Em cada consulta
Quanto ao acesso aos dados
de informação, é preciso escrever um programa.
Não fornece recursos para lidar com dados de
Quanto ao tipo de dado formatos diferentes incluídos em arquivos dife-
rentes.
Ocorrem problemas de consultas com resulta-
Quanto à integridade dos dados dos enganosos, nas relações entre informações
em arquivos distintos.
Fonte: Elaborado pelo autor. Adaptado de CARDOSO, 2008.
Até aqui já conseguimos absorver vários conceitos básicos, de forma ainda não apro-
fundada das premissas de banco de dados. Nas próximas unidades da disciplina serão
aprofundados os diversos conceitos de forma específica e exemplifica na prática. Va-
mos agora informar dois dos principais SGBD’s utilizados no mercado da computação.
Um atributo como o próprio nome nos remete é o termo formal das qualidades que
descrevem uma entidade, sendo estes específicos de cada entidade. Veja na figura 3,
a representação de duas entidades e alguns atributos.
Existe uma particularidade em relação aos atributos. Eles podem ser representados
de acordo com seu tipo. Perceba na figura 3 atributos de diferentes tipos, tais como:
• Atributo simples.
• Atributo multivalorado.
• Atributo composto.
1.3.1 CARDINALIDADE
• Um para Um.
• Um para N.
• N para Um.
Perceba que o modelo ganhou números entre as ligações na figura 6. Nessa especi-
ficação, um professor ministra apenas uma disciplina. E não menos importante, uma
disciplina é ministrada apenas por um professor.
Em outra especificação, podemos ter que um professor que pode ministrar várias
matérias, e cada disciplina pode ser ministrada por um único professor. Veja o exem-
plo na figura 7.
Agora a letra N está ao lado da entidade disciplinas na figura 7. Ela informa que um
professor leciona várias disciplinas. É importante entender que a letra N ao lado da
entidade disciplinas remete a entidade professores, perceba isso na figura 8.
As cores verde e azul foram inseridas na explicação da figura 8, para ajudar a você
associar como deve ser lido/entendido o relacionamento. Visualizando da esquerda
para direita (azul), estamos falando de professores em relação à disciplina, logo, da di-
reita para esquerda (verde), estamos falando de disciplinas em relação à professores.
Assimilar esse “movimento” pode facilitar sua compreensão entre entidades que tem
um contexto de relacionamento mais complexo.
Para solidificar este aprendizado, vamos exemplificar um MER envolvendo várias en-
tidades e relacionamentos. Perceba na figura 10.
• Usuários novatos: Diferentemente dos usuários casuais, estes fazem uso de partes
predefinidas do banco de dados e consultas estabelecidas que já foram testadas.
CONCLUSÃO
Nesta unidade, você teve contato com os principais assuntos relacionados à introdu-
ção de banco de dados. Foi apresentada a diferenciação de dados e informação, o
que compõe um SBD, detalhando o sistema gerenciador de banco de dados. Vimos
como o banco de dados se apresenta e também foi apresentado o que é um modelo
entidade-relacionamento - MER e como ele é constituído. Detalhamos entidades,
atributos e seus tipos, além da abordagem objetiva de cardinalidade. Ao final foi visto
UNIDADE 2
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
> Aplicar o
mapeamento entre
MER e MR.
2 MODELOS DE DADOS: DE
REDES, HIERÁRQUICO E
RELACIONAL
Caro aluno, seja bem-vindo à unidade que apresentará os modelos de dados, tais
como o modelo de rede e hierárquico, além do consagrado modelo relacional. Iremos
aprofundar no modelo relacional, apresentando diferenças entre o modelo entidade-
-relacionamento, e também como é realizado o mapeamento entre os dois modelos.
Ao final, serão abordadas, de forma objetiva, as notações básicas de representação
do modelo relacional. Esperamos que essa seja a base fundamental para guiar seus
estudos em conceitos do uso do modelo relacional, ao qual será amplamente tratado
até o final desta disciplina.
O modelo tem por objetivo fornecer representação usando conceitos como objetos,
juntamente às suas propriedades. O modelo de dados tem uma classificação defini-
da conforme a seguir:
No modelo de alto nível, temos uma proximidade maior do modo como o usuário
enxerga os dados em suas visões, conceitualmente. Já o modelo de baixo nível, é
denominado de modelo físico, pois expressa a forma mais detalhada em como os
Dessa forma, os dados são representados em conjuntos arbitrários de gráficos. Por ser
um modelo não tanto usual na realidade de análise e desenvolvimento comumente
empregado nas empresas atualmente, não iremos aprofundar em sua modelagem
ou conceituação mais avançada.
Perceba que o modelo hierárquico parte de uma raiz, formando uma árvore. Da mes-
ma forma que o modelo de rede, apresenta registros na representação de dados e
links para demonstrar relacionamento.
Assim como o modelo de rede, não iremos aprofundar nosso estudo nesse modelo
ou em sua forma de modelagem e aplicação. A seguir, você irá conhecer o modelo
que mudou a forma como os bancos de dados são organizados e desenvolvidos.
O modelo relacional, conhecido também apenas pela sigla MR, deu sequência ao
modelo hierárquico. Foi proposto, em 1970, por Edgar Codd, na IBM. Este modelo
se consolidou a partir de então como um marco na história de como os sistemas de
banco de dados deveriam ser desenvolvidos. O sucesso foi tanto que Codd ganhou,
em 1981, o prêmio Turing por originalidade em seu trabalho.
O modelo relacional é utilizado nos dias atuais e daqui em diante nosso estudo será
focado nele, em sua modelagem, forma de implementação lógica e meios de realizar
consultas através da linguagem SQL através de um SGBD MySQL.
Apesar de ser um modelo simples, com poucos conceitos, o modelo relacional é uma
ferramenta muito eficiente. Vimos que o modelo entidade-relacionamento apresenta
uma diagramação voltada a objetos do mundo real, utilizado em uma primeira fase
de concepção de um banco de dados, ou seja, uma primeira modelagem do projeto.
Continuando com o modelo relacional, veja que se trata de um modelo com estru-
turas de tabelas.
2.2.1 TABELAS
Essa estruturação sintática significa que as tabelas também chamadas por relação,
possuem valores que são os dados do mundo real. Além dos valores, possuem linhas
denominadas como tuplas ou registros. As colunas são chamadas de campos ou atri-
butos. O conjunto dos atributos se chama esquema. Veja a seguir na Figura 3.
Dizemos que uma tabela está populada quando ela se apresenta preenchida. Veja
na Figura 4.
Perceba que cada linha (tupla) na figura 4 corresponde a uma pessoa. Para cada pes-
soa, temos três atributos, matrícula, nome e endereço respectivamente.
Entre um sistema e outro, o que muda é o contexto dessas pessoas. Há pessoas que
são clientes, pessoas que são alunos, pessoas que são usuários e entre outros.
As chaves de modo geral no modelo relacional são conhecidas como keys. Compa-
rando com o modelo entidade-relacionamento, a chave primária no modelo relacio-
nal é o mesmo que o atributo chave naquele modelo. Na Figura 4, você percebeu a
coluna Matrícula sublinhada?
Perceba na Figura 5 duas tabelas contendo registros de alunos em uma tabela e cur-
sos em outra tabela. Na tabela Cursos, é possível observar a presença de um campo
Matrícula fazendo referência à chave primária da tabela Alunos. Vemos claramente
uma relação onde, por exemplo, o aluno José, residente no endereço Av. Das Flo-
res 25, cursa a disciplina de Redes. Identifica-se isso vendo que a matrícula do José
(1085123) está presente na tabela Cursos na primeira tupla da tabela Cursos.
A falta de relação também nos entrega informações. Você percebeu que Maria não
está cursando nenhuma disciplina? Isso é comum em banco de dados, da mesma
forma que um aluno não está matriculado em todas as disciplinas de uma faculdade
inteira, no mundo real. Correto?
Perceba na Figura 6 que a matrícula que consta na tabela Cursos é uma chave estran-
geira da tabela Alunos. Repete-se o número da matrícula.
Como já foi falado, é possível realizar o chamado mapeamento entre o modelo enti-
dade-relacionamento (MER) para o modelo relacional (MR). Através do mapeamen-
to, podemos migrar a modelagem, mas precisamos que o modelo entidade-rela-
cionamento tenha basicamente a determinação de cardinalidade. Vamos ver nos
próximos tópicos como acontecem os três tipos de mapeamentos, de acordo com a
cardinalidade: 1 para 1, 1 para N e N para N.
Veja na Figura 9, com os dados populados, que ambas as formas se apresentam cor-
retas.
Ora, se trata da mesma representação do modelo relacional 1 para 1! Sim, e o que irá
mudar são os valores contidos na tabela. Veja na tabela populada da figura 10 que a
professora Ana ministra as disciplinas de artes e música. Isso é percebido, pois o seu
CPF, que é chave estrangeira na tabela Disciplina, repete-se nos registros de ambas
as disciplinas. O CPF da Ana é 231.654.007-22.
Perceba através do código da disciplina de música (268) que ela é ministrada por dois
professores distintos: Ana, que tem o CPF: 231.654.007-22, e também pelo professor
Pedro, de CPF: 405.900.765-12. Nota-se também que a Ana, além de ministrar mú-
sica, também leciona artes, visto que o seu CPF também está atrelado ao código da
disciplina 111. Essa percepção se dá na nova tabela Professores-Disciplinas.
Temos então professores lecionando várias disciplinas e uma disciplina sendo lecio-
nada por vários professores. Relacionamento N para N.
Veja também que, ao lado da PK em cada tabela, existe um pequeno ícone de chave,
que visualmente já nos informa que se trata de uma chave primária. Mas, atenção!
Existem outros ícones de chaves, não somente da PK. Entretanto, nesse momento,
não iremos entrar nessas questões, pois na continuidade do estudo desta disciplina
isso será evidenciado.
CONCLUSÃO
Nesta unidade, você teve contato os principais tópicos relacionados a modelos de
dados. Vimos de forma mais aprofundada o modelo relacional, por ser um modelo
amplamente utilizado no mercado de computação. Também foi apresentado como
se pode fazer o mapeamento do modelo entidade-relacionamento para o modelo
relacional, apresentando exemplos de mapeamentos entre cardinalidades distintas.
UNIDADE 3
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
3 LINGUAGENS DE
DEFINIÇÃO E
MANIPULAÇÃO DE DADOS.
Como um administrador de banco de dados ou uma aplicação de software pode
conversar com o SGBD a fim de existir um modelo físico de banco de dados? Pode-
mos escrever de forma lógica utilizando alguma linguagem específica para manipu-
lar dados diretamente em um SGBD, independentemente da linguagem de progra-
mação utilizada para criação de aplicações? Essa será a base para discutir assuntos de
projetos de bancos de dados, que será visto mais adiante na disciplina. Aproveite esta
unidade para realizar treinos e pesquisar mais a respeito da linguagem de definição
e manipulação de dados, utilizada em sistemas de banco de dados relacionais.
Nessa questão, temos desde 1970 a chamada Structured Query Language, co-
nhecida por sua sigla SQL. A SQL é uma linguagem declarativa padronizada para
banco de dados relacionais. No início era chamada de Structured English Query
Language – SEQUEL.
Iremos tratar aqui das partes da linguagem que definem dados e das partes que ma-
nipulam dados. Quando se fala linguagem, entenda simplesmente como um meio
de comunicação, afinal precisamos “conversar” com o SGBD informando a ele como
criar nossa estrutura de dados e posteriormente como inserir os registros, além de
como alterá-los e como os excluirmos da base. Ah! Precisamos saber “perguntar” tam-
bém, ou seja, consultar os dados. Ficou mais clara a questão de linguagem?
Em banco de dados segue-se essa mesma lógica, definir os dados é informar como
será a estruturação de tabelas, atributos e relacionamento de tabelas. Para isso te-
mos comandos específicos da linguagem SQL que traduzem a modelagem relacio-
nal para uma estrutura física do banco de dados. É realmente simples assim, acredite.
Para formalizar, vamos chamar essa parte da SQL de Data Definition Language – DDL,
ou seja, linguagem de definição de dados.
Vamos então compreender como podemos conversar com o SGBD para que ele crie
as estruturas, para que ele exclua estruturas e também para que ele modifique as
estruturas. Para facilitar a compreensão, temos que utilizar verbos simples nessa lin-
guagem de comunicação padronizada:
Dentro da DDL, tudo se inicia pelo comando CREATE. Ora, precisamos criar nossas
tabelas! Mas antes disso precisa-se existir o banco de dados propriamente dito. Para
isso realizamos a seguinte declaração:
Da mesma forma que criamos uma nova base de dados, precisamos saber como eli-
miná-la, quando isso se fizer necessário:
Para verificar a remoção de um banco de dados, você pode utilizar o comando: SHOW
DATABASES;
Para informar ao SGBD que precisamos criar uma tabela utilizamos também o co-
mando CREATE, mas, além disso, já informamos os tipos de dados dos nossos cam-
pos, ou seja, caso um campo CPF deverá aceitar apenas números ou se poderá aceitar
números, ponto e traço. Compreendeu? O SGBD precisa saber de tudo detalhada-
mente para conseguir operar as consultas posteriormente. Além disso, o comando de
criação de tabela já informa as chaves primárias e estrangeiras da tabela em questão.
CREATE TABLE <nome da tabela> (<nome do atributo> <tipo de dado> [NOT NULL],...,
PRIMARY KEY (<nome do atributo1>, <nome do atributo2>,...) FOREIGN KEY (<nome
do atributo>) REFERENCES (<nome da tabela>);
Vendo dessa forma pode até ser difícil compreender, vamos detalhar utilizando
exemplos que já tratamos nessa disciplina, por exemplo, uma tabela de alunos.
Perceba na figura 28 que criamos um único comando utilizando várias linhas, mas
informamos que ele termina no ponto e vírgula da última linha.
Visualizando linha a linha temos um detalhamento completo que você pode perce-
ber lendo o quadro 1. Por mais que pareça algo desnecessário, leia linha a linha do
quadro associando os detalhes inerentes de cada linha do comando.
Nesse momento você pode se perguntar: É necessário atentar para cada caractere de
um comando SQL? A resposta cruel é que sim! A falta de uma vírgula, uma abertura
de parênteses sem fechamento, ou declarações específicas da linguagem escritas
de forma errada resultam em um comando ao qual o SGBD não irá conseguir inter-
pretar. Tenha atenção aos detalhes e sempre crie comandos organizados em linhas,
formatado para melhor leitura tanto de você como os membros da sua equipe.
Vamos agora demonstrar uma criação de tabela que precise uma chave estrangeira
(FK). Para isso iremos utilizar a tabela Cursos, que se relaciona com a tabela Alunos ao
qual já abordamos.
Temos que ter em mente que nesse exemplo, a matrícula do aluno (PK da tabela
Alunos) deverá constar na tabela Cursos como uma chave estrangeira (FK). Esses con-
ceitos nós já tratamos anteriormente nessa disciplina e caso não tenha ficado claro é
primordial que você retorne a esses tópicos para continuar a partir daqui.
Podemos solicitar ao SGBD que realize alterações na estrutura de uma tabela. Para
isso utilizamos o ALTER TABLE. Sua sintaxe é definida por:
ALTER TABLE <nome da tabela> [ ADD <nome do atributo> <tipo de dado>; | CHANGE
<nome do atributo> <tipo de dado>;| RENAME <nome novo da tabela >| DROP < nome
do atributo>; ]
DROP cidade;
RENAME CursosEAD;
• ALTER TABLE usando cláusula ADD PRIMARY KEY ou ADD FOREIGN KEY:
É utilizado quando precisamos adicionar chaves na tabela caso não as tenha-
mos feito no momento de criação da tabela.
REFERENCES Alunos(matricula);
Os comandos DDL chegam ao fim com a utilização do comando DROP TABLE. É sim-
ples compreende-lo, veja:
Vamos ver detalhadamente como são compostos estes comandos dentro da lin-
guagem SQL a seguir, mas antes disso precisamos entender os conceitos de opera-
dores lógicos.
Através dos operadores lógicos é possível criar query’s SQL que nos permitem usar mais
de uma única condição em uma mesma cláusula. Dessa forma podem-se produzir re-
sultados únicos utilizando esses operadores. A linguagem SQL faz uso de três operadores:
• AND: Com a utilização do operador AND teremos como retorno nas consultas
se as duas condições forem atendidas.
Explicação: Aqui serão exibidos alunos de São-Paulo ou qualquer aluno que tenha
DDD do telefone = 11 em seu registro.
• NOT: Com a utilização do operador NOT teremos como retorno nas consultas
se não for atendida uma condição em sequência, por exemplo.
Explicação: Aqui serão exibidos alunos que tenham DDD do telefone que não
estão entre 11 e 21. Por exemplo, serão retornados alunos com DDD = 31.
Os exemplos acima foram didáticos, mesclando “português com SQL” para conseguir
transmitir a você o funcionamento dos operadores lógicos. Adiante veremos como se
dão as consultas propriamente ditas, somente em SQL.
Agora sim iremos começar a popular os registros em nosso banco de dados. O co-
mando de inserção de registros acontece com a utilização do comando INSERT, veja
a sua sintaxe:
Imagine uma tabela que contém os dados de pilotos de corrida, e nela temos sete
campos: código, nome, pais, idade, equipe, motor, pontos. O comando de inserção
seria:
INSERT INTO Pilotos (código, nome, pais, idade, equipe, motor, pontos)
Perceba que dizemos ao SGBD para inserir na tabela pilotos (INSERT INTO Pilotos),
nos campos (código, nome, pais, idade, equipe, motor, pontos) os seguintes VALUES
(140, ‘Carlos Almeida’, ‘Brasil’, 26, ‘Hispania’, ‘Cosworth’,0);
Para cada atributo dentro do primeiro parênteses, temos o seu valor correspondente
no segundo parênteses do comando, de forma sequencial.
Explicando de forma simples: o código será 140, o nome do piloto é Carlos Almeida,
o país é o Brasil etc. Cada atributo e valor devem estar sequenciado e separado por
vírgula dentro dos parênteses.
Agora a proposta fica interessante. Um sistema de banco de dados passa a ter total
sentido quando conseguimos nos beneficiar de consultas de dados para atender o
que o usuário final necessita, concorda?
Essa consulta irá retornar todos os nomes de pilotos. O FROM é essencial para infor-
mar de qual tabela se trata a consulta. Vamos agora restringir um pouco os resultados
utilizando um operador lógico, acompanhe:
Segue-se o mesmo raciocínio, mas agora teremos a listagem dos nomes de pilotos que
tem idade = 26 e pontos = 0. Percebeu o WHERE? Onde idade = 26 e pontos = 0. Vamos
continuar, agora simplesmente acrescentando mais campos a serem retornados.
SELECT nome, pais, equipe FROM Pilotos WHERE idade = 26 AND pontos = 0;
A diferença agora é que queremos que seja retornado além do nome, também o país e a
equipe de pilos que tenham idade = 26 e pontos = 0. Mas e seu quiser todos os campos?
OK, podemos utilizar o asterisco entre o SELECT e o FROM, conforme acima. Dessa
forma serão exibidos todos os atributos de pilotos, atendendo o que foi pedido no
WHERE. (Idade = 26 e pontos = 0).
UPDATE Pilotos
Dessa forma todos os registros da tabela Pilotos teriam agora o valor Brasil no atributo
pais. Pois através da cláusula SET informamos que o valor para país deve ser = Brasil.
Vamos agora alterar mais atributos:
Agora alteramos todos os registros da tabela Piloto informando que todos eles são da
equipe Ferrari e estão com 0 pontos.
Agora estamos restringindo a alteração para apenas os pilotos com idade maior que
25 anos. Percebeu o WHERE?
Supondo o SELECT acima retornou apenas cinco registros, sabemos que um UPDATE
que se utilize de mesmo WHERE, logicamente terá que alterar somente cinco regis-
tros, ao solicitar que o UPDATE abaixo seja executado:
Antes de apresentar esse último comando da DML da linguagem SQL, o que acaba-
mos de perceber na dica do “UPDATE sem WHERE”, também é válido para o coman-
do de remover registros. Vamos a sua sintaxe:
Exemplo prático:
É isso mesmo que você imaginou. Todos os dados de Pilotos foram apagados.
UNIDADE 4
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
4 NORMALIZAÇÃO EM
PROJETOS DE BANCO DE
DADOS
Estamos preparados para grandes aplicações a partir de uma modelagem de banco
de dados simplificada? Conseguimos usar alguma lógica para refinar nossas tabelas
a fim de evitar redundâncias? Essas preocupações nos levam a questão de normali-
zação de tabelas em banco de dados. Nessa unidade iremos introduzir o que é nor-
malizar e quais são as formas normais às quais podemos aplicar em nossas tabelas de
banco de dados. Faremos também uma abordagem geral do processo que envolve a
criação de um projeto de banco de dados, para com isso conseguirmos compreender
quando podemos pensar na normalização do banco de dados.
Até aqui se construiu um conhecimento bastante prático que já pode te levar a gran-
des voos em uma carreira de tecnologia da informação, bastando obviamente que se
pratique o que foi discutido até então. Para responder a pergunta anterior, faremos
outro questionamento: eu já sei o básico necessário para transformar uma situação
do mundo real em um banco de dados relacional, mas esse básico necessário está
otimizado da melhor forma?
jetos. Proponha-se a uma reflexão prática: Um sistema cresceu “da noite para o dia”
através do sucesso de uma organização envolvendo diversos departamentos e o ban-
co de dados sendo o coração da aplicação não está desde seu início organizado de
forma inteligente para tal evolução. As tabelas não foram definidas de forma correta,
o sistema já está em produção e será preciso refazer sua programação para atender
um novo modelo relacional. Fomos agora ao futuro e voltamos para te alertar que
pequenos detalhes fazem muita diferença.
Seguir regras lógicas para criação do modelo relacional – MR é o que temos como
normalização.
Com intuito do resultado de um projeto de banco de dados que apresente alta qua-
lidade, existem regras de normalização denominadas como formas normais. As for-
mas normais impõem restrições às tabelas e elas se apresentam em níveis, ao qual
CARDOSO (2008) informa:
Para que a tabela passe para um nível superior, ela precisa atender aos níveis
inferiores primeiro, ou seja, é preciso seguir uma sequencia, pois uma forma
normal inferior é pré-requisito para o nível posterior. Quando a tabela aten-
de à ultima regra, ou forma normal imposta, está implícito que ela atenderá
também às formas normais anteriores à imposta. (Virgínia Cardoso, 2008 p.98)
Explicando a citação de Virgínia Cardoso, temos que se uma tabela está formalizada
na terceira formal normal, por consequência ela atende a segunda e primeira forma
normal. De forma resumida é uma evolução, se atingiu a forma normal Boyce-Codd,
por exemplo, consequentemente atende a todas as formas normais anteriores.
Conhecida como 1FN, a primeira forma normal é a mais simples, pois pede apenas
que os atributos possuam domínio atômico, ou seja, que seus valores sejam indivisí-
veis.
A figura 1 viola a regra 1FN, pois existem vários endereços em um mesmo atributo.
Você pode imaginar que então podemos criar um atributo separado para endereço
comercial. Correto, dessa forma já atendemos a 1FN desse exemplo de tabela, con-
forme figura 2.
Na figura 31 temos então duas tabelas, onde podemos notar os endereços de José
nas duas primeiras tuplas da tabela Alunos-Endereços e nas ultimas duas tuplas os
endereços do aluno Paulo.
Como vimos a primeira formal normal – 1FN não permite valores não atômi-
cos para os atributos. Devem ser valores únicos. Entenda que não estamos
abordando a repetição de valores entre linhas diferentes da tabela! Dentro do
atributo matricula existe apenas uma matrícula de aluno. Não existem duas
matrículas de um mesmo aluno. A matrícula se repete na relação Alunos-en-
dereços, mas em tuplas diferentes. O que queremos dizer é que não existem
duas matriculas “em um mesmo campo” do registro. Assim como não existem
dois endereços “em um mesmo campo” do registro.
Para entendermos a segunda forma normal temos que compreender o que vem a
ser dependência funcional, ou também conhecida como regras de integridade.
Também chamada pela sigla DF, a dependência funcional define como os atributos
das relações (tabelas) se inter-relacionam com seus valores, considerando todas as tu-
plas. Na aplicação de DF a teoria nos informa formalmente que um atributo depende
funcionalmente de outro atributo se para valor do atributo A sempre existir um
valor único no atributo B. Dessa forma temos a notação:
A→B
• A realiza em B
• A leva a B
• A determina funcionalmente B
• B é dependente de A funcionalmente
A B C D
a1 b1 c1 d1
a1 b2 c2 d2
a2 b2 c2 d3
a3 b3 c2 d3
Na tabela apresentada no quadro 3, temos quatro tuplas com valores para os atri-
butos A, B, C e D. (Representado em azul). Para essa tabela o projetista definiu a DF
sendo B → C. Ou seja, foi definido que nessa tabela sempre que um valor do atributo
B existir, um único valor no atributo C deverá ser correspondente a ele.
Perceba que essa DF está sendo atendida, pois temos nas tuplas 2 e 3 da instância o
valor b2 e respectivamente o valor c2, em ambas as tuplas. (representado em verde).
Temos então validado que B determina funcionalmente C.
Para cada matricula temos um nome específico. Dessa forma, temos a DF informan-
do: matricula → nome.
A matrícula 1085123 aparece nas linhas 1 e 2 apresentando o nome José Silva Reis.
Essa matrícula é única dessa pessoa. O mesmo acontece nas linhas 4 e 5 em relação
a Maria do Carmo Silva. Além disso, nenhum outro registro da tabela está desobe-
decendo a essa restrição. Dessa forma, nessa tabela foi definido que em todos os re-
gistros de alunos, uma matricula não pode levar a nomes diferentes. Uma matricula
sempre leva a um nome específico de um aluno. Esse exemplo é obviamente o mais
simples de ser assimilado, pois se trata de uma PK envolvida, nesse caso a matrícula.
Analisando agora a questão do local do curso, temos uma ligação direta somente
com cursos, concorda? Pois pensando no mundo real, um local de curso independe
de alunos. Logo, esse atributo não está inteiramente ligado a PK composta e somente
a uma parte dela. Além disso, gerou-se redundância na tabela (valor LCC1 repetindo
nas duas primeiras tuplas). Assim sendo, a tabela apresentada na figura 5 não está
atendendo a 2FN.
A figura 34 agora nos mostra como adequar a tabela Alunos-Cursos a 2FN. Para isso
criamos a tabela Local-Cursos separadamente, sendo a PK dessa nova tabela o nú-
mero-curso. Perceba que agora não existe também a redundância do valor LCC1,
pois conforme evidenciado em cinza na nova tabela Local-Cursos, temos o atributo
local-curso presente nessa tabela.
Uma tabela na 3FN solicita que os atributos não chave dependam da PK da tabela,
além também de atender a regra de serem mutuamente independentes.
Para normalizar uma tabela nessa forma, devemos remover redundâncias levando
em consideração o atributo que tem uma dependência funcional transitiva. Tal de-
pendência é classificada como transitiva quando um atributo depende de outro atri-
buto que não é chave da tabela.
Como fizemos anteriormente para compreensão das demais formas normais, vamos
exemplificar em um caso prático de uma tabela, conforme figura 7.
A figura 35 nos mostra uma tabela de alunos contendo os atributos matrícula, nome,
disciplina e crédito. A tabela está atendendo 1FN, pois apresenta valores atômicos, e
atende a 2FN devido à existência de chave primária simples com atributos que de-
pendem dela.
Validando para 3FN, temos que nome dependente diretamente da matrícula do alu-
no. A disciplina também está diretamente atrelada à matrícula. Agora analisando o
atributo crédito, percebemos que ele está ligado na verdade a questão de disciplina
e não diretamente a matricula. Nota-se então uma dependência transitiva, pois cré-
dito está ligado a disciplina que por sua vez está ligado a questão de matrícula do
aluno. Percebe-se uma ligação indireta, não existindo DF total em relação ao crédito
e a matrícula.
Como se pode imaginar, devemos então “separar” o crédito da tabela de alunos. Per-
ceba na figura 8 como então devemos proceder para atender a 3FN nesse caso.
Foi criada uma tabela Créditos separadamente fazendo referência ao atributo disci-
plina, dessa forma a tabela Alunos permanece apenas com os atributos que possuem
DF total a chave primária da tabela Alunos (nome e disciplina).
Existe também a forma normal denominada como Boyce-Codd, conhecida pela sigla
FNBC. Trata-se de uma 3FN apresentando melhorias. CARDOSO (2008) informa que:
Formalmente, diz-se que uma tabela R atende à FNBC quando para todas
as dependências de R não triviais X → a e X for uma superchave de R. A 3FN
analisa dependências funcionais transitivas ou indiretas de atributos fora da
chave, mas, quando o atributo em questão faz parte da chave, ele não é ve-
rificado pelas 2FN e 3FN. Na FNBC, verificam-se as dependências funcionais
também como nas 2FN e 3FN que se baseiam nas chaves. Para estar na FNBC
uma tabela deve possuir atributos que são somente chaves candidatas. (Virgí-
nia Cardoso, 2008 p.109)
Partindo desse entendimento teórico, temos que a tabela atendendo a FNBC tem o
determinante sendo uma chave candidata da tabela.
Ainda em normalização de tabelas em banco de dados, temos a 4FN que impõe que
não existam dependências multivaloradas. Nessa unidade iremos nos ater somente
até a 3FN como foco de estudo de normalização na disciplina. Trata-se de um co-
nhecimento bastante amplo e dependente da leitura de muitas referências, além de
prática com banco de dados relacionais.
A partir de todos os conceitos já estudados na disciplina, vamos aqui fazer uma abor-
dagem geral de um projeto de banco de dados.
Nesse ponto temos a primeira “tradução” do mundo real para o projeto. Detalhamos
os processos envolvidos na análise de requisitos em questão. Com o MER pronto, po-
demos identificar e validar informações com o cliente final que irá operar a aplicação
e também conseguimos “conversar” dentro de uma equipe técnica.
Após a definição correta do MER, partimos para o modelo lógico que podemos obter
fazendo o chamado mapeamento entre MER e o modelo relacional (MR). Como vi-
mos o modelo relacional é expresso utilizando tabelas de fato.
CONCLUSÃO
Nesta unidade você teve contato com os principais tópicos relacionados à normaliza-
ção de tabelas em banco de dados relacionais. Vimos de forma mais aprofundada as
três primeiras formas normais, e também foi apresentada a visão geral de um projeto
de banco de dados.
Bons estudos!
UNIDADE 5
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
5 VISÕES EM BANCO DE
DADOS
Nessa unidade iremos introduzir o que são views, como podemos implementa-las
fisicamente em um banco de dados e quais são regras e declarações para operar IN-
SERT, UPDATE e DELETE através de visões. Faremos também uma abordagem geral
das principais vantagens da utilização de visões em banco de dados relacionais, para
com isso conseguirmos compreender quando podemos pensar nesse mecanismo
para construção e manutenção de aplicações que utilizam banco de dados.
5.1 VISÕES
Com a linguagem SQL podemos criar as tabelas, popular dados e realizar consultas.
Tais consultas podem ser realizadas diretamente no sistema gerenciador de banco
de dados (SGBD) com uso de softwares clientes como o MySQLWorkBench que já
tivemos contato ou também através de linguagem de programação como em PHP,
por exemplo, onde a aplicação realiza as consultas de forma programada para fins
específicos dentro de um sistema final.
Uma view pode ser entendida como uma maneira alternativa de observar os dados
de uma ou mais tabelas. De forma prática como iremos perceber no decorrer deste
conteúdo, uma view faz um encapsulamento de declarações SELECT da linguagem
SQL.
Para que seja mais simples entender o funcionamento das views em banco de da-
dos, vamos abstrair um cenário de um banco de dados contendo alunos, professores,
disciplinas e notas dos alunos. Nesse banco de dados já temos dados populados tais
como: vários registros de professores, várias disciplinas e também os dados de diver-
sos alunos relacionados às disciplinas e suas notas.
Imagine que nesse cenário simples precisássemos consultar as notas de alunos, mas
que o resultado retornasse também o nome das disciplinas e nome dos professores.
Percebe-se que teríamos um SELECT fazendo uso de vários JOIN’s para relacionar os
dados dessas tabelas envolvidas nesse contexto.
A cada vez que se executar a declaração SELECT em SQL, teríamos o retorno dos
dados contendo as notas dos alunos, mas sempre teríamos que criar a mesma de-
claração SQL. Ou seja, se hoje eu preciso consultar as notas teria que escrever toda
a declaração SQL necessária para trazer esse retorno. Não seria mais inteligente essa
consulta ficar salva e quando eu precisar acessa-la basta que eu a chame de alguma
forma?
É isso que view nos proporciona. Criamos uma view e posteriormente sempre que
precisarmos daquele mesmo retorno, basta acessa-la. Obviamente o exemplo acima
foi um cenário para explicar como é uma view, mas elas possuem características mais
interessantes quanto a sua aplicação. Abaixo iremos exemplificar alguma delas.
Podemos aplicar restrições usando views, por exemplo, abstraindo que um dado de-
partamento de vendas dentro de uma empresa não precisa saber o salário do desen-
volvedor de sistemas que atua na empresa. Ou seja, podemos pensar nas views para
impor restrição versus dados.
Outro exemplo seria impor restrição de domínio, onde podemos restringir acesso de
certo usuário em um sistema, apresentando a ele apenas as colunas (domínios) ne-
cessárias, de certas tabelas do banco de dados.
Como vimos anteriormente, podemos também associar várias colunas usando JOIN
criando então uma “tabela virtual” com colunas de diversas tabelas distintas. Como
falamos: nome do professor de uma tabela, nome do aluno de outra, disciplina e nota
de outra (a) tabela(s).
As views também podem ser usadas com a finalidade de agregação. Isso quer dizer
que podemos, por exemplo, criar uma visão para mostrar uma soma de gastos de
um setor de uma dada empresa, em relação a um determinado usuário dentro do
sistema. Usuário João do setor Y teve um gasto total de X.
De modo geral a utilização de views pode beneficiar muito uma aplicação criada, ou
seja, um sistema para uma empresa ou para usuários finais. É uma maneira inteligen-
te de organizar as consultas e tê-las armazenada afim de não repetir sempre mesmas
consultas ou restringir os dados de acordo com as especificações do software para
que atenda o esperado pelos usuários.
Antes de informamos como criar as visões, vamos listar algumas de suas vantagens
nos próximos tópicos.
Entendemos que nossas tabelas no modelo físico têm existência física e como já
abordamos precisamos criar tabelas que não façam uso de espaço físico, mas ao
mesmo que possam ser usadas como tabelas normais, como já conhecemos.
Assim como nas tabelas físicas, ou seja, em nossas tabelas reais em banco de dados
fazemos a criação das views através de SQL.
Dessa forma, temos uma visão particular da consulta SELECT, não sendo necessário
utilizar todo o conjunto das tabelas envolvidas.
• OrdemServico
• Cliente
• Tecnico
• Os_Servico
• Servico
Para facilitar a compreensão, o diagrama da figura 1 exibe a estrutura lógica das tabe-
las. Temos no diagrama o relacionamento entre cinco tabelas, sendo a tabela Técnico
para armazenar dados dos técnicos que realizam manutenção em equipamentos, a
tabela cliente para guardar dados básicos dos clientes, a tabela serviço que informa,
por exemplo, que a empresa realiza o serviço de manutenção de computadores e
também a tabela os_servico que cria um relacionamento de muitos para muitos (N
para N) entre a tabela ordemservico e a tabela serviço, pois uma ordem de serviço
pode ter vários serviços e cada serviço pode ser executado para várias ordens.
Após a implementação física do modelo conforme figura 37, utilizando para isso de-
clarações DDL em SQL, temos conforme figura na figura 38 os dados populados.
Ou seja, podemos pensar que esse retorno seria um relatório tabelado para o pro-
prietário desta empresa identificar dados relacionados afim de trazer algum benefí-
cio de controle para seu negócio. Perceba que conforme marcamos em negrito são
especificados campos (colunas) de mais de uma tabela, pois sabemos que em cada
tabela temos apenas os dados do contexto dela própria. Não temos, por exemplo, o
nome do cliente e telefone, juntamente com os dados de descrição de equipamento
e nome do técnico, em apenas uma única tabela.
Para essa consulta é necessário criar uma declaração SELECT utilizando JOIN, relacio-
nando então todas as tabelas desse caso. Chegamos então na seguinte declaração:
os.desc_equipamento, os.desc_diagnostico,
tec.nome as ‘Técnico’
FROM ordemservico as os
Ao processar essa consulta teremos exatamente o que precisamos, mas agora imagi-
ne como seria mais simples sempre que quiséssemos essa informação, apenas cha-
mássemos uma view, ao invés de criar toda essa consulta. Para isso fazemos a criação
conforme a seguinte declaração:
os.desc_equipamento, os.desc_diagnostico,
tec.nome as ‘Técnico’
FROM ordemservico as os
O que mudou foi que na primeira linha temos: CREATE VIEW lista_os AS
Dessa forma informamos ao SGBD que estamos criando uma view chamada lista_os
que sempre que for chamada irá retornar os dados conforme o SELECT. Fazendo isso,
quando for necessário retornar esses dados, precisamos apenas da simples declara-
ção SQL:
Perceba que o lista_os passa a ter um “sentimento” de tabela física, assim como te-
mos a tabela cliente e poderíamos lista-la, através de: SELECT * FROM cliente;
A grande diferença é que temos uma tabela montada com diversos campos (colu-
nas) de diferentes tabelas, para nos auxiliar mais facilmente dentro de um software
ou também manipulando diretamente o SGBD. Temos então uma tabela virtual.
Como sendo uma tabela virtual, baseada em outra(a) tabela(s), uma view
passa a não ser processada corretamente caso a estrutura da(s) tabela(s)
base(s) for(em) alterada(s). Ficou curioso? Implementando esse banco de
dados fisicamente e, por exemplo, removendo a coluna telefone da tabela
cliente, ao ser processada a view lista_os, teremos um erro número 1356 no
Mysql, pois a view está fazendo referencia a uma coluna que não pode usar.
Obviamente, pois na declaração da view informamos que precisamos do
retorno do telefone do cliente.
1. Atualizáveis
2. Somente leitura
Visões somente leitura permitem apenas que seja utilizada em declarações SELECT
e dessa forma uma visão somente leitura não aceita que seja utilizada declarações de
INSERT, de UPDATE e de DELETE.
Já uma visão que permite serem usadas tais instruções de modificação de dados é
denominada como visão atualizável. Vale lembrar que qualquer visão é no mínimo
somente leitura.
Nas visões atualizáveis podemos então inserir, alterar e excluir registros em tabelas
bases e para isso é necessário operarmos tais comandos de modificação na visão.
Assim, sempre que uma linha é atualizada na visão, uma operação que corresponde
à atualização da tabela base é executada.
Em uma visão que envolva somente uma tabela, para que seja atualizável temos as
seguintes regras:
2. Todos os campos que são requeridos, ou seja, definidos como NOT NULL da ta-
bela base sem que haja um valor padrão devem estar presentes na visão.
Conforme figura 41, temos um INSERT de dados nas tabelas bases que compõe a
view. Perceba:
Conforme declaração INSERT da figura 41, temos a inserção de uma nova linha de
professor dentro do depto denominado como ADM.
CONCLUSÃO
Nesta unidade você teve contato com os principais tópicos relacionados a visões em
banco de dados relacionais. Abordamos diversas vantagens no uso de visões e vimos
o que são as visões de modo prático, aplicando exemplo de criação e utilização de
uma view. Além disso, foram apresentadas a você formas básicas de atualização de
registros utilizando views, através de declarações INSERT, UPDATE e DELETE.
Bons estudos!
UNIDADE 6
OBJETIVO
Ao final desta
unidade,
esperamos
que possa:
6 TRANSAÇÕES E BANCO DE
DADOS DISTRIBUÍDOS
Nessa unidade iremos introduzir o que são transactions em banco de dados, como
podemos implementa-las. Faremos também uma abordagem geral da conceituação
de banco de dados distribuídos, para com isso conseguirmos compreender quando
podemos pensar nesse mecanismo para construção e manutenção de aplicações
que utilizam banco de dados.
6.1 TRANSAÇÕES
Diversos autores explicam esse mesmo conceito, como podemos perceber através da
visão de Michael Mannino (2008):
Para completar a conceituação, temos também o papel essencial dos SGBDs em for-
necer serviços de recuperação e também de controle de concorrência para processar
transações de forma eficiente.
6.1.1 PROPRIEDADES
São essas propriedades denominadas pela sigla ACID onde cada letra significa res-
pectivamente: atomicidade, consistência, isolamento e durabilidade.
2. Propriedade de consistência: Essa propriedade diz que caso restrições forem ver-
dadeiras antes do início da transação, elas serão verdadeiras após for concluída.
Para aproximar mais esse conhecimento iremos demonstrar um exemplo prático uti-
lizando MySQL ao qual já estamos habituados dentro dessa disciplina.
É fácil imaginar que precisamos apenas de uma declaração UPDATE, conforme abai-
xo:
UPDATE cliente SET empresa = ‘JC Advocacia’ WHERE empresa = ‘ABC Advocacia’;
Mas vamos supor que nessa tabela existem registros de dez mil clientes e você gos-
taria de perceber essa alteração utilizando ROLLBACK a partir da criação de uma
simples transação. Dessa forma teríamos:
START TRANSACTION;
ROLLBACK;
Ao executar essa transaction o SGBD irá operar o UPDATE e em sequência exibir to-
dos os clientes apresentando a alteração de nome da empresa (devido ao SELECT
também dentro da transação), mas como temos ROLLBACK na implementação da
transação o banco realmente não armazenou a alteração.
Caso quiséssemos que a alteração fosse realizada, bastava alterar ROOLBACK para
COMMIT. Esse foi um exemplo básico e didático para te aproximar mais do conceito
de transações em banco de dados. Conforme você já tem conhecimento, poderá
testar e implementar essa e outras formas de transações em seu próprio banco de
dados, utilizando o XAMPP e a ferramenta MySQLWorkBench.
Para finalizar nosso estudo nessa disciplina iremos fazer uma abordagem introdutó-
ria sobre banco de dados distribuídos.
Através dessa técnica temos conseguimos que o sistema adote um crescimento mo-
dular, aumentando com isso a confiabilidade com a replicação de partes críticas do
banco.
De forma prática, temos SGBD’s locais apresentando ligação com um SGBD global.
FORMA DESCRIÇÃO
Cada réplica é armazenada em local diferente,
com isso se resulta na replicação dos dados. O
Replicação
sistema por sua vez, alimenta réplicas idênticas
da relação.
Cópias de uma relação alterada, ou seja, seus
fragmentos devem ser atualizados antes da tran-
Replicação síncrona sação que realizou modificação realizar uma de-
claração commit. Assim, a distribuição dos da-
dos se apresenta transparente para os usuários.
Cópias de uma relação modificada só são atuali-
zadas a cada X tempo definido, ou seja, apresen-
Replicação assíncrona tando periodicidade. Assim as réplicas podem
se apresentar inconsistentes por algum intervalo
de tempo.
A relação é dividida em diversos fragmentos,
onde cada um deles é mantido em um local di-
Fragmentação
ferente. Existem duas maneiras de realizar a frag-
mentação: fragmentação horizontal e vertical.
A relação é dividida em várias partes, e o sistema
Replicação e fragmentação por sua vez mantém diversas réplicas de cada
um dos fragmentos.
2. Autonomia Local;
3. Disponibilidade maior;
4. Desempenho melhorado;
5. Economia;
6. Modularidade;
CONCLUSÃO
Nesta unidade você teve contato com os principais tópicos relacionados a transações
em banco de dados relacionais. Abordamos as propriedades de transações, os ser-
viços necessários de um SGBD para operar tal mecanismo de forma transparente e
também vimos um exemplo básico de transaction utilizando o MySQL. Além disso,
foi apresentada a você a introdução a respeito de banco de dados distribuídos.
Um grande abraço!
REFERÊNCIAS
ALVES, William Pereira. Banco de dados. São Paulo: Editora Saraiva, 2014.
CARDOSO, Virgínia M. Sistemas de banco de dados. 1. ed. São Paulo: Saraiva, 2008.
HEUSER, Carlos Alberto. Projeto de banco de dados. 6. ed. Porto Alegre: Bookman, 2011.
MACHADO, Felipe Nery Rodrigues. Banco de dados: projeto e implementação. São Pau-
lo: Érica, 2014.
EAD.MU LTIVIX.EDU.BR
FACULDADE CAPIXABA DA SERRA/EAD
104 SUMÁRIO
Credenciada pela portaria MEC nº 767, de 22/06/2017, Publicada no D.O.U em 23/06/2017