DESBancosde Dados
DESBancosde Dados
BANCO DE DADOS..................................................................................................... 5
INTRODUÇÃO..............................................................................................................5
TEMA 01....................................................................................................................... 6
Introdução À Banco De Dados......................................................................................6
TEMA 02..................................................................................................................... 19
Modelagem De Bancos De Dados..............................................................................19
TEMA 03..................................................................................................................... 34
Regras de Normalização.............................................................................................34
TEMA 04..................................................................................................................... 39
Introdução À Linguagem Sql - (Ddl)............................................................................39
TEMA 05..................................................................................................................... 50
DML , manipulando dados com SQL.......................................................................... 50
TEMA 06..................................................................................................................... 58
Introdução À Linguagem Sql - (Ddl)............................................................................58
TEMA 07..................................................................................................................... 68
Conectividade Em Python...........................................................................................68
3
BANCO DE DADOS
INTRODUÇÃO
4
TEMA 01
habilidades
Iremos trabalhar com banco de dados que obedecem ao modelo relacional e utilizam a
linguagem SQL, este padrão foi criado por Edgar Frank Codd , entre 1960 - 70, ao propor o modelo
relacional ele realizou a separação entre estrutura lógica manipulada pelos programadores e
usuários, da forma de armazenamento físico que ficou a cargo dos sistemas criados,
De maneira geral, podemos concluir que, quando criamos variáveis, em geral fazemos acesso
direto a memória do computador, e a necessidade de manter estes dados (Persistência), e
principalmente destes dados serem confiáveis vem crescendo desde a época de Edgar.
5
sendo que um que se destacou e que é usado devido a sua flexibilidade e gratuidade é o Mysql, por
ser compacto e geralmente suportado por vários provedores na internet, o Mysql e alguns outros
sistemas Open-source ganharam espaço.
Em algumas situações, devido ao tamanho(escala) da massa de dados, sempre é estudado a
eficiência do banco de dados e empresas como Microsoft e Oracle figuram como fornecedores de
versões mais robustas de SGBD´s cada um com sua peculariedade. Lembrando que no dia 16 de
Janeiro de 2008, a MySQL AB, desenvolvedora do MySQL foi adquirida pela Sun Microsystems, por
US$ 1 bilhão, um preço jamais visto no setor de licenças livres. No dia 20 de Abril de 2009, foi
anunciado que a Oracle compraria a Sun Microsystem. Quando a companhia gigantesca como a
ORACLE comprou o MYSQL como tática e mercado ainda mantêm versões gratuitas para o uso dos
clientes, porém o código do Mysql não é mais livre, diante disto surgiu uma versão baseada em Mysql
chamada MariaDB que está em 8º no ranking.
6
O instalador permite que você verifique o que está instalado em sua máquina e você pode
escolher o que você deseja instalar. Ao clicar no botão ADD, na tela a seguir escolhemos a opção
FULL, para garantir a instalação do Servidor e Workbench além de outras ferramentas e exemplos.
7
Utilizando o Mysql Workbench.
Vamos partir para um exemplo bem prático, abrindo o Workbench e seguindo os passos:
1. Execute o workbench.;
2. Na tela de boas vindas ele mostra quais conexões de banco de dados ele esta
reconhecendo, se você acabou de instalar não haverá nenhuma, criamos nossa primeira conexão
clicando no botão +, ao lado de MySQL
Connections
8
Fonte: Elaborado pelo autor <execução do programa> (2023).
Compreendendo os campos
Exemplo: Vamos pensar em organizar os meus livros em minha estante, percebi que tenho
mais ou menos 40 livros que estão bem desorganizados, pois bem, não é difícil imaginarmos que
teríamos uma estante para colocar os livros, e para ficar visualmente agradável seriam separados por
tema. Pois bem a “estante” seria analogicamente a minha TABELA, e cada informação importante
sobre o livro seriam os campos, sendo que cada livro cadastrado com seus dados na minha tabela
9
seria um REGISTRO.
Para organizar melhor chamarei esta minha tarefa de SCHEMA: LIVRARIA.
SCHEMA: LIVRARIA
TABELA LIVROS
● NOME LIVRO
● AUTOR
● EDITORA
● ISBN
● TEMA
● VALOR
● DISPONÍVEL PARA TROCA(S/N)
Nesta primeira organização vemos que cada CAMPO terá um tipo, ou seja, qual tipo de
informação será armazenada em cada um deles.
NOME LIVRO :- TEXTO DE ATÉ 50 CARACTERES
AUTOR : TEXTO DE ATÉ 40 CARACTERES
EDITORA : TEXTO DE ATÉ 50 CARACTERES
ISBN : CÓDIGO ÚNICO A SER ESTUDADO.
TEMA : TEXTO DE 20 CARACTERES.
VALOR :NÚMERO EXPRESSANDO MOEDA.
DISPONÍVEL (S/N) : TIPO BOOLEAN - tipo lógico que aceita apenas dois estágios VERDADEIRO
ou FALSO.
O Banco de Dados irá lhe oferecer tipos de dados, sendo sua obrigação escolher o mais
adequado.
Podemos realizar os passos de criar o SCHEMA, CRIAR A TABELA e CRIAR OS CAMPOS
DESEJADOS.
No momento de criação é o momento de criar a estrutura, em seguida podemos fazer testes
de preenchimento.
Execute os passos:
1. Conecte-se a conexão criada no Workbench;
10
Fonte: Elaborado pelo autor <execução do programa> (2023).
5. Clique com o botão direito sobre Tables e escolha Create Table, em seguida se abrirá
uma janela que irá permitir a criação de cada campo com seu respectivo tipo, como table name
digite: TABELA LIVROS, e em seguida no quadro abaixo crie um campo a cada linha colocando seu
NOME e escolhendo seu tipo e características.
O que é o #ISBN?
De acordo com a Câmara Brasileira do Livro, “o ISBN (International Standard Book Number/
11
Padrão Internacional de Numeração de Livro) é um padrão numérico criado com o objetivo de
fornecer uma espécie de “RG” para publicações monográficas, como livros, artigos e apostilas. A
difusão global do ISBN e a facilidade com que é lido por redes de varejo, bibliotecas e sistemas gerais
de catalogação, tornou-o imprescindível para qualquer publicação.
A sequência é criada a partir de um sistema de registro utilizado pelo mercado editorial e
livreiro em todo o mundo. A estrutura do ISBN é composta de 13 números que indicam o título, o
autor, o país, a editora e a edição de uma obra. (Fonte: https://cbl.org.br)
No MySQL, você pode usar o tipo de campo VARCHAR para armazenar a numeração ISBN de
um livro. O ISBN (International Standard Book Number) é uma sequência de dígitos e pode incluir
hífens. O tipo VARCHAR permite armazenar cadeias de caracteres de comprimento variável, o que é
adequado para armazenar o número ISBN. Você pode definir um tamanho máximo para o campo
VARCHAR, dependendo do formato do ISBN que você está usando. Por exemplo, o ISBN-13 tem 13
dígitos, então você pode definir o campo VARCHAR com um tamanho máximo de 13 caracteres.
CONCEITO CHAVE-PRIMÁRIA
O ISBN será a chave-primária, esta chave é um campo especial que nunca poderá ter dois
registros com o mesmo ISBN, o uso da chave primária impede a duplicação de registros.
O nosso CPF é uma chave-primária a nível federal, não existe o mesmo número usado por
duas pessoas, ao contrário do que acontece com o RG quem têm a sua validação a nível estadual e
pode gerar duplicidade. Apesar deste primeira vivência prática não estarmos dando ênfase a
NORMALIZAÇÃO(veremos normalização mais adiante) é interessante sempre pensar em como o
banco ficará acessível e qual será a principal chave de pesquisa.
12
Fonte Vídeo: https://tinyurl.com/5fm87cup
Não deixe de rever a playlist de reforço, sendo que o segundo vídeo serve para aqueles que
ainda têm muito receio em trabalhar com banco de dados de forma geral, encare o segundo vídeo
como um desafio para quem já conhece alguma linguagem de programação, em nosso caso
específico exatamente o javascript.
Em termos gerais, o programador não pode apenas se basear em variáveis e matrizes para
manter as informações, e o usuário comum de um escritório padrão, de forma intuitiva, mantém os
seus dados de forma tabular em planilhas como : Excel ou no Sheet do Google por exemplo.
Então, quais as vantagens de se utilizar um SGBDR ao invés de continuar controlando os
dados de forma semi-estruturada em planilha principalmente.
Podemos destacar várias vantagens técnicas formais que são:
Controle de Redundância
13
Compartilhamento de Dados
Tolerância a Falhas
Não existem desvantagem, mas sim, quando o uso de um SGBD representar um alto custo em
comparação aos sistemas de processamento tradicional de arquivos:
● seja um alto custo na compra do software ou infraestrutura;generalidade que um
SGBD fornece na definição e processamento de dados;
● sobrecarga no fornecimento do controle da segurança, concorrência, recuperação e
integração de funções.
● maior conhecimento por parte do usuário que estava acostumado com um sistema
menos seguro (. Pode parecer ridículo mas o ser humano muitas vezes é avesso ao novo).
Problemas adicionais podem surgir caso os projetistas de banco de dados ou os
administradores de banco de dados não elaborem os projetos corretamente ou se as aplicações não
são implementadas de forma inapropriada.
Se o Administrador do banco de dados (DBA – Database Administrator) não administrar o
14
banco de dados de forma adequada, tanto a segurança quanto a integridade dos sistemas podem ser
comprometidas. Algumas questões justificam a utilização uma abordagem processamento tradicional
de arquivos:
● quando um banco de dados e suas aplicações são simples, bem definidas e não se
espera mudanças no projeto;
● não há a necessidade de processamento em tempo real das aplicações, podendo ter
prejuízo caso sejam sobrecarregadas por um SGBDR;
● quando não houver múltiplos acessos ao banco de dados, ao mesmo tempo.
Reafirmando o nosso exemplo da LIVRARIA, um banco de dados é uma coletânea lógica e
coesa de dados, que serão utilizados dentro de um certo DOMÍNIO.
Quando usamos a palavra DOMÍNIO, para o programador representa a situação prática, quais
serão as situações e operações de acesso a esta base de dados.
Devemos observar que apenas controlar uma coleção de livros a nível particular é totalmente
diferente de colocar estes livros à venda ou para empréstimo em um sistema WEB por exemplo.
Podemos controlar uma lista de livros em uma planilha simples, mas quando formos
disponibilizar estes dados no SITE temos que imaginar e preparar o banco de dados para as
TRANSAÇÕES.
Seguindo estas premissas reforçamos que a informação em um banco está organizada em
forma de registros, cada registro contém toda a informação sobre uma pessoa ou um elemento do
banco (no caso da livraria cada registro representa um livro), os dados sobre este livro denominamos
como campos.
O nome de um campo geralmente identifica a informação armazenada no campo. Por
exemplo, os campos podem se chamar Nome, Endereço ou Número Telefônico. Cada campo tem um
tipo que identifica a classe de informação que pode ser armazenada: números, datas, caracteres
alfanuméricos e outros.
Como cada campo contém um tipo específico de dados, você pode realizar cálculos e outras
operações com a informação guardada neles. Por exemplo, pode-se somar os números dos campos.
Pode comparar a data de um campo com a de outro. Pode mostrar o nome de uma pessoa
(armazenado em um campo) depois de seu sobrenome (armazenado em outro campo) para construir
a primeira linha de uma etiqueta de correio. O conjunto de registros que utilizam os mesmos campos
forma uma tabela. Cada banco de dados pode ter muitas tabelas. A imagem a seguir mostra como se
relacionam estes conceitos.
Usuários comuns: Estes acessam os dados através de interfaces sejam elas página de
internet, relatório e ou planilhas que o sistema permite acessar. Por exemplo: Quando estamos
navegando em um e-commerce a lista de produtos está sendo recuperada de uma consulta ao
SGBDR.
Programadores: Criam as interfaces ou a forma de acesso que os usuários irão interagir,
portanto ele precisa estar sempre em contato com o DBA, não fica obrigatoriamente responsável
pela manutenção ele acessa os SCHEMAS e TABELAS que o DBA deixar como padrão. Evidentemente
que o programador deve conhecer a linguagem SQL e estar alinhado ao que o DBA exige como
rotinas ao SGBDR.
DBA(Administrador de Banco de Dados): Este profissional sempre fica mais próximo a parte
estrutural e acompanha a capacidade e o dia a dia da base de dados, geralmente em conjunto com a
15
equipe de desenvolvimento ele estabelece os SCHEMAS e as TRANSAÇÕES que irão ou não ser
permitidas.
PROPRIEDADES ACID.
16
ela não será finalizada e o Banco de dados deve voltar ao seu estado anterior. O exemplo quando
estamos enviando um PIX a operação começa em checar o saldo do remetente, enviar a ordem para
o destinatário bloqueando instantâneamente o valor e em seguida será creditado na chave fornecida,
a transação deve ocorrer por completo, caso contrário uma mensagem de erro deve ser
administrada. Isto garante que toda a transação possa ter seu Rollback;
Consistência: Toda transação, ou seja mudança efetuada no banco de dados deve levar ele de
um estágio consistente a outro estado consistente, isto quer dizer que deve-se respeitar as regras de
integridade dos dados (como unicidade de chaves, restrições de integridade lógica, etc.).
Isolamento: A propriedade de isolamento é muito vista em sistema de acesso de vários
usuários, onde possivelmente os dados podem sofrer uma tentiva de acesso simultâneo, o banco
pode “lockar” ou seja travar determinado registro assim que ele está sendo usado para evitar
alterações incoerentes. Exemplo Clássico: Quando eu acesso um produto e coloco ele no meu
carrinho, poderíamos “travar-lockar” aquele registro do estoque e enquanto o usuário não finalizar a
compra se estiver havendo um acesso simultâneo dar preferência ao primeiro acesso. Imagine em
um atendimento de CALL-CENTER ao abrir um atendimento a um usuário de determinado CPF, caso
outra tentativa de acessar o mesmo CPF deveria resultar em uma mensagem:”Usuário em
atendimento”, e não permitir abrir atendimento, já que o sistema indica que ele está sendo atendido
naquele momento.
Durabilidade: Esta propriedade se aproxima mais da parte física dos dados, as alterações
após uma transação em caso de sucesso ( chamamos de commit), devem persistir no banco de dados
mesmo em casos de quedas de energia, travamentos ou erros. Deve-se garantir que os dados estarão
disponíveis em definitivo. Em um banco de dados relacional, por exemplo, quando um grupo de
instruções SQL é executado, os resultados precisam ser armazenados permanentemente (mesmo que
o banco de dados falhe imediatamente depois). Para se defender contra a perda de energia, as
transações (ou seus efeitos) devem ser registradas em uma memória não volátil.
O DBA deve se atentar a estas demandas e o programador também se acostuma às mesmas,
veja no link do wikipedia quem foi o criador desta regra e desde quando a usamos em SGBDRs.
Em nossa playlist de reforço, que está nas páginas anteriores, separamos um vídeo sobre o
17
assunto ACID que é bem ilustrativo.
Lembrando que muitas vezes por falta de estrutura ou profissionais qualificados alguns
programadores acabam em algumas situações realizando o papel de Programador e DBA.
4. Como é possível atingir usos muito mais sofisticados dos recursos de dados?
6. O que é um SGBDR?
18
TEMA 02
habilidades
19
Um modelo de dados é uma abstração de um ambiente de dados real e complexo. Os
projetistas de banco de dados utilizam os modelos de dados para se comunicar com programadores e
usuários de aplicações. Os componentes básicos de modelagem de dados são as entidades, os
atributos, os relacionamentos e as restrições.
As regras de negócio são utilizadas para identificar e definir os componentes básicos de
modelagens em um ambiente específico real. Em resumo: modelo de dados é a técnica que evita os
comandos mais técnicos, mas demonstra através de “desenhos-modelos”, como funcionará nosso
Banco de Dados no dia a dia da empresa, sendo a regras de negócio as dinâmicas das informações
dentro destes bancos de dados.
O projeto de banco de dados foca em como a estrutura do banco de dados será utilizada para
armazenar e gerenciar dados do usuário final.
A modelagem de dados deve ser específica para um determinado problema de domínio. Esse
problema de domínio é uma área claramente definida no ambiente real, com escopo e fronteiras
bem definidos, que deve ser tratada de forma sistemática, e quanto mais fiel a modelagem for ao
ambiente do problema em domínio, maior é a chance de o projeto ter um bom resultado, permitindo
assim a criação de um banco de dados mais aderente à realidade, possibilitando de forma mais
eficiente o desenvolvimento da aplicação.
Seguindo esta abordagem temos várias formas de modelar, “pensa”, “desenhar” um Banco de
Dados.
O objetivo da modelagem de dados é garantir que todos os objetos de dados existentes em
determinado contexto e requeridos pela aplicação estejam representados com precisão dentro do
Banco de Dados.
Pode-se definir modelagem de dados como sendo um conjunto de conceitos que devem ser
usados para descrever a estrutura de uma base de dados. Um modelo de dados é uma representação
relativamente simples, normalmente gráfica, de estruturas de dados reais mais complexas.
Em termos gerais, modelo é uma abstração de um objeto ou evento real de maior
complexidade do ambiente real.
MODELO CONCEITUAL
O Modelo Conceitual é uma abstração da realidade, em que os aspectos do mundo real são
descritos de forma natural, bem como seus atributos e relacionamentos. Esse modelo é utilizado para
entendimento, transmissão, validação de conceitos e mapeamento do ambiente, possibilitando um
melhor diálogo entre desenvolvedores e usuários.
O Modelo Conceitual não está relacionado diretamente com o modelo de banco de dados,
forma de acesso ou armazenamento dos dados. Ele está focado em uma representação gráfica de
uma realidade existente em um contexto de negócio, conforme está ilustrado na figura. Essa
modelagem é feita utilizando o modelo entidade-relacionamento. Tem como características:
● Visão Geral do negócio;
20
● Facilita o entendimento entre usuários e desenvolvedores;
● Possui somente as entidades e atributos principais;
● Pode conter relacionamentos muitos para muitos.
O modelo conceitual representa uma visão global do banco de dados inteiro conforme visto
pela organização como um todo. Ou seja, o modelo integra todas as visões externas (entidades,
relacionamentos, restrições e processos) em uma única visão global de todos os dados da empresa.
Também conhecido como esquema conceitual, constitui a base para a identificação e descrição de
alto nível dos principais objetos de dados (evitando quaisquer detalhes específicos do modelo de
banco de dados).
O modelo conceitual mais utilizado é o ER. Lembre-se que o modelo ER é ilustrado com a
ajuda do DER que, na prática, constitui a planta básica do banco. Este é utilizado para representar
graficamente o esquema conceitual.
O modelo conceitual produz algumas vantagens importantes. Em primeiro lugar, fornece uma
visão de cima (nível macro) compreendida de modo relativamente fácil sobre o ambiente de dados.
Em segundo lugar, o modelo conceitual é independente em relação tanto a software como a
hardware.
A independência de software significa que o modelo não é dependente de software SGBD
utilizado para implantá-lo. A independência de hardware significa que o modelo não depende do
hardware utilizado em sua implantação. Portanto, alterações de hardware ou software do SGBD não
terão efeito sobre o projeto de banco de dados no nível conceitual. Em geral, o termo projeto lógico é
utilizado para se referir às tarefas de criação de modelo de dados conceitual que possa ser
implantado em qualquer SGBD. Iremos focar neste Modelo com a ajuda do MYSQL WORKBENCH.
MODELO LÓGICO
Leva em conta limites impostos por algum tipo de tecnologia de banco de dados. (banco de
dados hierárquico, banco de dados relacional, entre outros. Suas características são:
● Deriva do modelo conceitual e via a representação do negócio
● Possui entidades associativas em lugar de relacionamentos muitos para muitos
● Define as chaves primárias das entidades
● Normalização até a 3ª forma normal
● Adequação ao padrão de nomenclatura
● Entidades e atributos documentados
MODELO INTERNO
Uma vez selecionado o SGBD específico, o modelo interno mapeia o modelo conceitual para
o SGBD. O modelo interno é a representação do banco de dados conforme “visto” pelo SGBD. Em
outras palavras, o modelo interno exige que o projetista relacione as características e restrições do
modelo conceitual com as do modelo selecionado para implementação. O esquema interno constitui
a representação específica de um modelo interno, utilizando estruturas de banco de dados
suportadas pelo banco escolhido.
Portanto, o esquema interno deve mapear o modelo conceitual para as estruturas do modelo
21
relacional, de modo similar, como selecionamos um banco de dados relacional, o esquema interno é
expresso utilizando SQL, linguagem padrão para este banco.
Como o modelo interno depende do software específico do banco de dados, diz-se que ele é
dependente de software. Portanto, uma alteração no software de SGBD exige que o modelo interno
seja alterado para adequar-se às características e exigências de implementação do modelo de banco
de dados. Quando é possível alterar o modelo interno sem afetar o modelo conceitual, tem-se
independência lógica. No entanto, o modelo interno ainda é independente de hardware, pois não é
afetado pela escolha do computador em que o software é instalado. Portanto, uma alteração nos
dispositivos de armazenamento ou mesmo nos sistemas operacionais não afetará o modelo interno.
MODELO FÍSICO
Leva em consideração limites impostos pelo SGBD (Sistema Gerenciador de Banco de Dados)
e pelos requisitos não funcionais dos programas que acessam os dados. Características:
Elaborado a partir do modelo lógico
● Pode variar segundo o SGBD
● Pode ter tabelas físicas (log)
● Pode ter colunas físicas (replicação)
O modelo físico opera nos níveis mais baixos de abstração, descrevendo o modo como os
dados são salvos em meios de armazenamento como discos e fitas. O modelo físico exige a definição
tanto dos dispositivos de armazenamento físico como dos métodos de acesso (físico) necessários
para se chegar aos dados nesses dispositivos de armazenamento, o que torna dependente tanto de
software quanto de hardware. As estruturas de armazenamento utilizados são dependentes do
software SGBD e sistema operacional, e dos tipos de dispositivos de armazenamento com que o
computador pode trabalhar. A precisão necessária na definição do modelo físico exige que o
projetista que trabalha nesse nível tenha conhecimento detalhado do hardware e do software
utilizado para implementar o projeto de banco de dados.
Modelos de dados anteriores exigiam que os projetistas levassem em conta os detalhes das
necessidades de armazenamento de dados do modelo físico. No entanto, o modelo relacional
atualmente dominante é direcionado amplamente para o nível lógico, não para o físico, portanto, não
exige os detalhes desse segundo nível como seus antecessores.
Embora o modelo relacional não demande que o projetista se preocupe com as
características de armazenamento físico dos dados, a implementação de um modelo relacional pode
exigir sintonização refinada em nível físico para melhorar o desempenho. Essa sintonização refinada é
especialmente importante quando os bancos de dados muito grandes são instalados em um
ambiente mainframe. Mesmo assim, essa sintonização não exige conhecimento das características de
armazenamento físico.
O modelo físico é dependente do SGBD, dos métodos de acesso aos arquivos e dos tipos de
dispositivos de armazenamento suportados pelo sistema operacional. Quando é possível alterar o
modelo físico sem afetar o modelo interno, tem-se independência física. Portanto uma alteração nos
dispositivos ou métodos de armazenamento ou mesmo sistema operacional não afetará o modelo
interno.
22
Fonte: Elaborado pelo autor (2023).
O Modelo de Dados Relacional foi introduzido por Codd (1970). Entre os modelos de dados
de implementação, o modelo relacional é o mais simples, com estrutura de dados uniforme, e o mais
formal. O modelo de dados relacional representa os dados da base de dados como uma coleção de
relações. Informalmente, cada relação pode ser entendida como uma tabela ou um simples arquivo
de registros.
Figura 3: Representação com um Diagrama Entidade-Relacionamento/ Fonte: Elaborado pelo autor (2023).
Entidade
23
Uma entidade é algo (uma pessoa, um local, um objeto, um evento) sobre o qual sejam
coletados e armazenados dados. Ela representa um tipo particular de objeto do mundo real. Por isso,
as entidades são distinguíveis, ou seja, cada ocorrência de entidade é única e distinta. As entidades
podem ser objetos físicos, como clientes e produtos, mas também abstrações como rotas de voo ou
apresentações musicais. Pode ser definida como qualquer coisa do mundo real, abstrata ou concreta,
onde se deseja guardar informações. Exemplos de entidades: Cliente, Veículo, Produto, Venda. As
entidades estão muitas vezes relacionadas às Tabelas do Banco de Dados sendo elas tabelas
persistentes ou tabelas de apoio temporário.
Atributo
Um atributo é uma característica de uma entidade. É tudo o que se pode relacionar como
propriedade da entidade (coluna, campo). Chama-se Domínio o conjunto de valores possíveis do
atributo, em outras palavras menos técnicas são os campos que compunham a entidade, sendo que
este atributo pode ter suas características mais especiais ou não para a coerência da Entidade/Tabela.
Por exemplo, uma entidade chamada cliente seria descrita por atributos como sobrenome,
nome, telefone, endereço e limite de crédito de clientes.
Alguns atributos são obrigatórios, outros são opcionais. Algumas definições:
● Atributo obrigatório – é aquele que para uma entidade ou relacionamento deve
possuir um valor.
● Atributo opcional - É aquele que para uma instância da entidade ou relacionamento
pode possuir um valor ou não.
Classificação:
● Atributo Identificador - capaz de identificar exclusivamente cada ocorrência de uma
entidade. Também conhecido como chave Primária ou Primary Key (PK). O símbolo # é usado para
representar a chave primária em algumas notações)
Ex.: Código do Cliente, Código do Produto.. Lembra-se do exemplo da livraria seria o nosso
ISBN
● Chave Candidata - Atributo ou grupamento de atributos que têm a propriedade de
identificar unicamente uma ocorrência da entidade. Pode vir a ser uma chave primária. A chave
candidata que não é chave primária também se chama chave Alternativa.
● NÃO PODE haver duas ocorrências de uma mesma entidade com o mesmo conteúdo
na Chave Primária
● A chave primária não pode ser composta por atributo opcional, ou seja, atributo
que aceite nulo.
● Os atributos identificadores devem ser o conjunto mínimo que pode identificar cada
instância de uma entidade. chamamos de registro cada instância ou seja cada lista de atributos
preenchidos e armazenados na entidade.
● Não devem ser usadas chaves externas ou atributos sobre os quais você não tem
controle.
24
● Não deve conter informação volátil.
Ao criar modelos geralmente temos diversas entidades, cada uma com diversos atributos que
podem se relacionar entre si. Vamos definir como podem ser estes relacionamentos.
Importante: Devido a estes Relacionamentos que o Modelo Relacional se destaca em termos
de integridade dos dados.
Relacionamento
Um relacionamento pode ser entendido como uma associação entre instâncias de Entidades
de acordo com as regras de negócio, caro aluno entende regra de negócios como enxergamos as
formas que os dados serão transformados e usados no sistema. Normalmente ocorre entre
instâncias de duas ou mais Entidades, podendo ocorrer entre instâncias da mesma Entidade (auto
relacionamento).
Quando o relacionamento é necessário? Quando existem várias possibilidades de
relacionamento entre o par das entidades e se deseja representar apenas um, se ocorrer mais de um
relacionamento entre o par de entidades, a fim de evitar ambiguidade, quando houver auto
relacionamento, para definir o número de ocorrências de uma entidade usamos o conceito de
Cardinalidade.
Podendo então pela Norma termos 03 tipos de relacionamento que são:
● Relacionamento um para muitos (1:M ou 1..*).
Por exemplo, um pintor faz várias pinturas, mas cada uma é criada por apenas um artista.
Assim o pintor (uma entidade) relaciona-se com as pinturas (várias entidades).
Portanto, os projetistas de banco de dados identificam o relacionamento PINTOR pinta
PINTURA como 1:M ou 1:N.. Particularmente prefiro um para N pois me lembra a matemática.
● Relacionamento de muitos para muitos (M: N ou *..*).
Um funcionário pode aprender várias habilidades profissionais e cada habilidade profissional
pode ser aprendida por vários funcionários. Os projetistas de banco de dados identificam o
relacionamento FUNCIONÁRIO aprende HABILIDADE como M: N. Pense no caso de um Aluno e as
Disciplinas possíveis de cursar, se eu tiver uma Tabela de Alunos e uma Tabela Disciplinas o
relacionamento entre estas duas tabelas provavelmente será de N:N.
● Relacionamento um para um (1:1 ou 1..1)
A estrutura de gerenciamento de uma empresa de varejo pode exigir que cada uma de suas
lojas seja gerenciada por um único funcionário. Por sua vez, cada gerente de loja, que é um
funcionário, gerencia uma loja apenas. Portanto o relacionamento FUNCIONÁRIO gerencia LOJA é
identificado como 1:1. A discussão precedente identificou cada relacionamento em duas direções, ou
seja, os relacionamentos são bidirecionais:
● Um CLIENTE pode gerar várias FATURAS.
● Cada uma das várias FATURAS é gerada apenas por um CLIENTE. Uma restrição é uma
limitação imposta aos dados, que torna confiável alguns tipos de relação, por exemplo, não têm
como cadastrar uma fatura sem identificar um cliente que exista no Banco de dados.
As restrições são importantes, pois ajudam a assegurar a integridade dos dados. Elas
normalmente são expressas na forma de regras.
25
Regras de negócio.
26
Figura 5: Notações do DER /Fonte: Elaborado pelo autor (2023).
Ao lado vemos a tela do Próprio Mysql Workbench mostrando ao Diagrama criado, através do
27
comando menu Database → Reverse → Engineer , como foi demonstrado no vídeo do QR-CODE.
Neste detalhe vemos que para cada cliente existente na tabela clientes podem ser geradas
28
várias ocorrências na tabela Clientes_turmas, pois a chave da Clientes_turmas e a combinação
Cliente_id e Turma_id. Bom, é exatamente isto que acontece em nossa escola de inglês, onde cada
aluno cadastrado é um cliente e ele pode se matricular em várias Clientes_turmas. O nome
Clientes_Turmas poderia ser melhorado para ficar mais claro, mas é muito importante que você
aprenda a interpretar o Diagrama.
Observando o detalhe do relacionamento entre as outras Tabelas:
Para cada registro em Clientes_turmas ele só aponta para 1 registro em turmas, se
analisarmos pelo outro lado cada registro em turmas pode apontar para várias matrículas em
Clientes_Turmas.
29
Veja esta abaixo:
Neste caso não existe o certo e errado existe o que a equipe consegue enxergar melhor e
qual anotação a empresa prefere incluir em sua documentação.
Vamos executar este Script SQL para construir um novo schema, iremos analisar a estrutura
criada e criar um Diagrama ER para representá-lo:
30
sala_id INT,
FOREIGN KEY (professor_id) REFERENCES Professores(id),
FOREIGN KEY (sala_id) REFERENCES Salas(id)
);
CREATE TABLE Horarios (
id INT PRIMARY KEY AUTO_INCREMENT,
turma_id INT,
sala_id INT,
dia_semana ENUM('Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta'),
horario TIME,
FOREIGN KEY (turma_id) REFERENCES Turmas(id),
FOREIGN KEY (sala_id) REFERENCES Salas(id)
);
CREATE TABLE Clientes_Turmas (
cliente_id INT,
turma_id INT,
PRIMARY KEY (cliente_id, turma_id),
FOREIGN KEY (cliente_id) REFERENCES Clientes(id),
FOREIGN KEY (turma_id) REFERENCES Turmas(id)
);
Fonte: Elaborado pelo autor <execução do programa> (2023).
Uma das representações possíveis, quanto mais claro ficar a ligação e cardinalidade melhor
será para a interpretação de como se dará o fluxo e armazenamento dos dados.
31
Fonte: Elaborado pelo autor <execução do programa> (2023).
Nota importante: Algumas anotações mais antigas ocupam muito espaço no Diagrama ER,
por isto a tendência é a de usar Formas mais parecidas com as vistas no Próprio Workbench,
conforme você tiver mais experiência você poderá criar as tabelas e relacionamentos diretos pelo
Diagrama ou por Script SQL, iremos nos aprofundar em SQL mais a frente em nosso curso.
Peça aos alunos para identificarem as possíveis entidades envolvidas em uma clínica dentária.
Por exemplo, eles podem listar entidades como "Paciente", "Dentista", "Consulta", "Procedimento",
etc.
1. Atividade: Determinar as Entidades
Nesta atividade o aluno tem que pensar em quais as tabelas de informação e quantas serão
necessárias para atender o bom andamento da clínica. Não existe um número certo mais a idéia e
listar e identificar o porquê das existência de cada tabela/entidade.
32
detalhada, incluindo o tipo de dado, tamanho e outras propriedades relevantes.
33
TEMA 03
Regras de Normalização
habilidades
34
volumes de dados maiores do que os efetivamente necessários); custo causado pelo atraso do
fornecimento da informação desejada.
● Fidelidade ao ambiente observado: ajuda a definir elementos que foram
despercebidos durante o processo de modelagem.
35
Fonte: Elaborado pelo autor (2023).execução do programa> (2023).
Uma relação encontra-se na segunda forma normal quando estiver na primeira forma normal
e todos os atributos que não participam da chave primária são dependentes desta.
Assim, devemos verificar se todos os atributos são dependentes da chave primária e
retirar-se da relação todos os atributos de um grupo não dependente que dará origem a uma nova
relação, que conterá esse atributo como não chave. Desta maneira, na segunda forma normal evita
inconsistências devido a duplicidade.
Para estar na terceira forma normal a tabela não pode ter atributos não-chave se referindo a
outros atributos não-chave. Assim devemos verificar se existe um atributo que não depende
36
diretamente da chave, retirá-lo criando uma relação que conterá esse grupo de atributos, e defina
com a chave, os atributos dos quais esse grupo depende diretamente. O processo de normalização
deve ser aplicado em uma relação por vez, pois durante o processo de normalização vamos obtendo
quebras, e, por conseguinte, novas relações. No momento em que o sistema estiver satisfatório, do
ponto de vista do analista, este processo iterativo é interrompido.
Resumo da normalização
O quadro abaixo descreve como realizar teste para identificação da desnormalização da
relação e procedimento para normalização.
1FN A relação não deve ter qualquer Forme novas relações para cada
atributo não-atômico nem relações atributo não- atômico ou relação
agrupadas. aninhada.
2FN Para relações nas quais a chave Decomponha e monte uma relaç
primária contém múltiplos atributos, para cada chave parcial com seu
nenhum atributo não- chave deve ser atributo(s) dependente(s). Certifique-se
funcionalmente dependente de uma manter uma relação com a chave primá
parte da original e quaisquer atributos que sej
chave primária. completamente
dependentes dela em termos
funcionais.
37
3FN A relação não deve ter um Decomponha e monte uma
atributo não-chave funcionalmente relação que inclua o(s) atributo(s)
determinado por um outro atributo não não-chave que funcionalmente
-chave (ou por um conjunto de determine(m) outros atributos
atributos não-chave). Ou seja, não deve não-chave.
haver dependência transitiva de um
atributo não chave na chave primária.
1. O que é normalização?
10. O que fazer quando há dependência transitiva de um atributo não chave na chave
primária?
38
TEMA 04
Habilidades
39
Além disso, é utilizada para a inserção e modificação de registros, a formação de objetos dentro do
banco de dados, a administração de usuários e a busca por informações, bem como o controle de
operações. Todas as transações realizadas no banco de dados podem ser requisitadas ao SGBD por
meio da linguagem SQL.
A programação SQL se presta a analisar e efetuar operações em tabelas, além de habilitar a
execução de tarefas. O SQL também capacita a realização de consultas e análises mais avançadas,
permitindo a formulação de consultas com múltiplos critérios.
Exatamente por poder interagir de várias formas com seu sistema de banco de dados a
linguagem é dividida em grupos:
● DDL
● DQL
● DML
● DCL e TCL.
A criação da Linguagem SQL, começou na Década de 70, dentro da IBM, veja histórico em:
https://pt.wikipedia.org/wiki/SQL
Você verá neste artigo da Wikipédia que ela sofreu várias alterações, melhorias, mas a sua
estrutura básica é usada em praticamente todos os Banco de Dados Relacionais da Atualidade.
Vamos começar pelo Começo:
Dentro do contexto de bases de dados relacionais, em cada tabela é possível encontrar uma
variedade de colunas. Estas colunas, por sua vez, representam os atributos ou campos específicos;
para cada um deles é associado um tipo de dado correspondente. Durante o processo de criação da
tabela, são estabelecidos os formatos dos tipos de dados. Os tipos primordiais de dados simples que
são especificados são:
40
Figura: Tipos de dados/ Fonte: Elaborado pelo autor (2023).
Para estudar mais a fundo as várias possibilidades de campos que o MYSQL pode armazenar
consulte:
https://dev.mysql.com/doc/refman/8.0/en/data-types.html
CREATE DATABASE
A indicação "create database", conforme seu próprio título indica, tem como propósito a
geração da estrutura de dados primordial onde as tabelas serão concebidas, utilizando uma forma de
escrita descomplicada.
CREATE DATABASE - Cria um novo banco de dados MySQL.
Para efetuar a criação de um banco de dados, é necessário possuir privilégios especiais de
superusuário ou a capacidade de CREATEDB.
Por padrão, a configuração inicial do banco de dados ocorrerá com base no modelo de
sistema conhecido como template1. Contudo, é viável especificar um modelo distinto ao mencionar o
nome do TEMPLATE. Especificamente, ao utilizar a nomenclatura TEMPLATE0, é possível gerar um
banco de dados vazio que inclui somente os elementos predefinidos padrão correspondentes à
versão específica do MySQL. Tal abordagem é útil caso se queira evitar a replicação de objetos locais
do sistema que possam ter sido incorporados ao template1.
41
EFETUAR CRIAÇÃO DO BANCO DE DADOS
[ [ COM ] [ PROPRIETÁRIO [=] nome_de_usuário ] [ MODELO [=] modelo ]
[ CODIFICAÇÃO [=] codificação ]
[ LC_COLLATE [=] lc_collate ] [ LC_CTYPE [=] lc_ctype ]
[ ESPAÇO_DE_TABELA [=] espaco_de_tabela ]
[ LIMITE_DE_CONEXÕES [=] limite_de_conexoes ] ]
Parâmetros
CREATE TABLE
Após a configuração da base de dados, torna-se necessário estabelecer as tabelas. Para esta
finalidade, emprega-se o comando de criação de tabela, que viabiliza a formação e a definição do
formato de uma tabela. No âmbito desse comando, é viável também estipular os campos
(denominados colunas), bem como as suas correspondentes restrições, juntamente com as chaves
primárias e estrangeiras.
A instrução CREATE TABLE delimita uma nova tabela, originalmente desprovida de quaisquer
entradas, no esquema do banco de dados corrente. A tabela recém-gerada está sob a
responsabilidade do usuário que executa a instrução (ou seja, o usuário conectado).
Existe a possibilidade de designar um esquema distinto do esquema em uso para a geração
da tabela, mediante a associação do esquema ao nome escolhido para a tabela (separado por um
ponto.), utilizando uma sintaxe tal como esquema nome.nome_tabela.
O esquema a ser seguido na elaboração de uma tabela é o seguinte:
Formatação fundamental:
42
CREATE TABLE IF NOT EXISTS nome_tabela (
nome_coluna1 tipo_de_dado1 [COLLATE colação1] restrição1,
nome_coluna2 tipo_de_dado2 restrição2,
nome_coluna3 tipo_de_dado3 restrição3,
Se a opção COLLATE não for utilizada, o padrão de colação será empregado. Os elementos contidos
entre colchetes
[ ] são opcionais durante a elaboração da tabela. A cláusula "SE NÃO EXISTIR" avalia se a tabela com o
nome especificado já existe antes de iniciar a criação.
43
Exemplo de ilustração sobre como estabelecer estruturas tabulares no
MySQL:
Exemplo 1
A demonstração a seguir envolve a formação de uma tabela denominada "autores_tabela".
Essa tabela será empregue para armazenar informações como COD_Autor, Nome_Autor,
Sobrenome_Autor e Data_Nasc:
Ao efetuarmos o comando abaixo, a tabela_autores será criada, com a inclusão dos seguintes
elementos: codigo_Autor (um número inteiro de até quatro dígitos, exclusivo e aumentado
automaticamente), nome_Autor (um texto de até 30 caracteres e que não pode ser deixado em
branco), sobrenome_Autor (um texto de até 50 caracteres) e data_Nasc (uma data específica). A
definição de PRIMARY KEY fica associada ao campo codigo_Autor.
44
Demonstração de como criar tabelas no MySQL:
Exemplo 3
Vamos exemplificar também a construção de uma tabela destinada a guardar informações
sobre gêneros literários:
45
Outros exemplos de criação de tabela:
46
4. Exemplo de criação de tabela com valor padrão (DEFAULT):
47
● nome-tabela representa o nome da tabela que será atualizada.
● nome-coluna representa o nome da coluna que será criada.
● tipo-do-dado a cláusula que define o tipo e tamanho dos campos definidos para a
tabela.
● DROP nome-coluna realiza a retirada da coluna especificada na estrutura da tabela.
ADD nome-coluna tipo-do-dado realiza a inclusão da coluna especificada na estrutura da tabela. Na
coluna correspondente a este campo nos registros já existentes será preenchido o valor NULL (Nulo).
As definições NOT NULL e NOT NULL WITH DEFAULT são semelhantes à do comando CREATE TABLE.
● MODIFY nome-coluna tipo-do-dado permite a alteração na característica da coluna
especificada.
Imagine que você deseja, por alguma razão, apagar a coluna que armazena o nome
Nome_Genero dos livros da tabela tabela_generos.
Exemplo
ALTER TABLE tabela_generos DROP Nome_Genero;
Modificando uma coluna de uma tabela
Se precisássemos mudar as características de uma coluna da tabela após a sua criação,
usaríamos o comando modify. Como exemplo, imagine que desejamos aceitar valores nulos no
atributo PedidoNumr da tabela Pedidos.
48
Figura: Tipos de dados/ Fonte: Elaborado pelo autor (2023).
49
SELECT
O operador SELECT é unário; isto é, ele é aplicado somente a uma relação. Assim, o SELECT
não pode ser usado para selecionar tuplas de mais de uma relação. Observe também que a operação
de seleção é aplicada individualmente para cada tupla. Assim, as condições de seleção não podem
ser aplicadas a mais que uma tupla. O grau da relação resultante é a mesma que a relação original.
O número de tuplas da relação resultante é sempre menor ou igual ao número de tuplas da
relação original. O comando SELECT permite recuperar os dados de um objeto do banco de dados,
como uma tabela, view e, em alguns casos, uma stored procedure (alguns bancos de dados permitem
a criação de procedimentos que retornam valor).
É possível selecionar o conteúdo de uma tabela parcial colocando restrições para as linhas a
serem incluídas no resultado. Isto é feito com a utilização da cláusula WHERE para adicionar
restrições condicionais ao comando SELECT. A sintaxe a seguir permite especificar quais linhas serão
selecionadas:
50
Operadores SQL
Operadores compostos
51
Operador Significado
DELETE
O comando DELETE nos permite remover um ou mais registros de uma tabela, sintaxe:
52
DELETE FROM Pedidos WHERE PedidoNumr>=1000
A cláusula WHERE permite aplicar uma condição para que seja realizado o comando SQL. O
objetivo dele é fazer a filtragem dos dados determinados pelos comandos SELECT, UPDATE e
DELETE.A condição é construída através de uma comparação entre dois valores, utilizando os
operadores relacionais.
Operadores Relacionais
Para aplicar a condição (ou filtro) podem ser utilizados os operadores de comparação: =, >, <,
>=,
<= e <>
(diferente). A tabela mostra os operadores de comparação que são usados:
Exemplos: para saber se um determinado valor está abaixo de 100, podemos utilizar a
comparação: valor < 100. Podemos testar se o código é igual
GROUP BY
Os dados resultantes de uma seleção podem ser agrupados de acordo com um critério
específico. Este procedimento é realizado usando a cláusula group by.
Exemplo
SELECT COUNT(PedidoNumr) FROM Pedidos GROUP BY PedidoNumr
Junções (join)
Quando precisamos realizar consultas que envolvam mais de uma tabela, uma das soluções
seria a utilização de junções. As junções permitem que acessemos mais de uma tabela utilizando
apenas um SELECT.
A junção interna entre tabelas é a modalidade de junção que faz com que somente
participem da relação resultante as linhas das tabelas de origem que atenderem à cláusula de junção.
SELECT * FROM tabela_Livros INNER JOIN tabela_autores
ON tabela_Livros.ID_Autor = tabela_autores.ID_Autor;
53
Junções externas (outer join)
COMANDO: SELECT...INTO
Esse comando é usado para armazenar o resultado de uma consulta em uma variável.
SELECT Nome, Sobrenome INTO Relacao_Autores FROM tabela_Autores
where ID = ID_Autor
O resultado da consulta deve ter sempre como retorno somente uma linha, caso o resultado
tenha mais de uma linha, deve ter o mesmo número de variáveis para receber esses valores.
Funções agregadas
Muitas vezes, precisamos de informações que resultado de alguma operação aritmética ou de
conjunto sobre os dados contidos nas tabelas de um banco de dados. Para isso, utilizamos as funções
agregadas. A seguir apresentaremos algumas delas.
Função count( )
A função count, como o próprio nome sugere, conta a quantidade de linhas de uma tabela
que satisfazem uma determinada condição.
Para contar o número de pedidos que existe na tabela pedidos, pode-se usar o count.
Exemplo
SELECT COUNT(PedidoNumr) FROM Pedidos
Função avg( )
A função avg é responsável por extrair a média aritmética dos valores de uma coluna. Para
calcular a média de pedidos da tabela pedidos, pode-se usar o avg.
Exemplo
SELECT AVG(PedidoNumr) FROM Pedidos
Função sum( )
A função sum é responsável por realizar a soma dos valores de uma coluna.
Para somar o total de pedidos abaixo de 1000 da tabela pedidos, pode-se usar o sum.
Exemplo
SELECT SUM(PedidoNumr) FROM Pedidos WHERE PedidoNumr<1000
54
Fonte: Elaborado pelo autor (2023).
CRIAÇÃO DE ÍNDICE
No banco de dados MySQL os índices podem ser criados com considerável facilidade, tanto
no momento da concepção da tabela quanto em uma tabela já existente.
CREATE INDEX
CREATE UNIQUE INDEX index_name ON table_name (column1, column2, ...);
Neste exemplo é criada uma tabela chamada CLIENTES com dois campos: Codigo, do tipo
inteiro e Nome do tipo texto.
CREATE TABLE CLIENTES(
Codigo INT,
Nome VARCHAR(50),
INDEX (Codigo)
);
55
O índice é criado com o uso da palavra reservada INDEX, seguida do nome da(s) coluna(s) a
ser(em) indexada(s). Porém, nem sempre sabemos onde vamos precisar de um índice e muitas vezes
é preciso criá-los quando a tabela já existe e inclusive quando já possui registros. Isso pode ser feito
com uma instrução DDL (Data Definition Language), como veremos a seguir. Inicialmente criamos a
tabela sem índice algum, em seguida adicionamos o índice à coluna “Codigo”.
CREATE TABLE CLIENTES(
Codigo INT,
Nome VARCHAR(50
);
Criando o índice separadamente
CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo);
Nesse caso precisamos definir um nome para o índice (por questão de padronização, alguns
profissionais optam por iniciar o nome do índice com um prefixo que indique que ele é um índice,
como “id” ou “idx” de “index”, em inglês). Após o nome do índice adicionamos a palavra reservada
“ON” que indica em que tabela e coluna o índice será criado, dados que vêm logo em seguida, como
vemos na listagem.
Nem sempre o uso de índice trará um bom desempenho, pois a escolha incorreta de um
índice pode causar um desempenho insatisfatório. Portanto, a tarefa do otimizador de consulta é
selecionar um índice ou uma combinação de índices apenas quando isso gerar melhoria de
desempenho e evitar a recuperação indexada quando isso atrapalhar o desempenho.
VIEW
Uma View é um objeto que pertence a um banco de dados, definida baseada em declarações
SELECT´s, retornando uma determinada visualização de dados de uma ou mais tabelas.Esses objetos
são chamados por vezes de “virtual tables“, formada a partir de outras tabelas que por sua vez são
chamadas de “based tables” ou ainda outras Views.
CRIANDO UMA VIEW
Create view
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table_name
WHERE condition; ou
CREATE VIEW nome_da_view AS SELECT * FROM nome_tabela;
Verificar se a View foi criada SHOW TABLES;
Caso exista uma nova tabela chamada “nome_da_view” foi o nome que definimos para essa
nova view; A criação da view foi executada com sucesso.
Alterando uma View
ALTER VIEW nome_da_view AS SELECT * FROM nome_outra_tabela;
56
1.Qual é o propósito da Linguagem SQL e como ela é utilizada em relação a Sistemas de
Gerenciamento de Banco de Dados (SGBD)?
2.Explique as principais categorias de comandos na Linguagem SQL e forneça exemplos de cada uma
delas.
3.O que são os comandos DDL, DML, DCL e TCL na Linguagem SQL, e como cada um deles contribui
para a manipulação e administração de um banco de dados?
4.Como é realizada a criação de uma tabela no MySQL utilizando o comando CREATE TABLE? Dê um
exemplo prático.
5.Explique o papel das restrições em uma tabela MySQL. Quais são alguns exemplos de restrições que
podem ser aplicadas a colunas?
6.Como é feita a criação de um banco de dados no MySQL? Quais são os parâmetros que podem ser
especificados durante esse processo?
7.Qual a importância das junções (joins) em consultas SQL? Explique a diferença entre junção interna
e junções externas.
8.O que são e para que servem as funções agregadas em SQL? Dê exemplos de funções como COUNT,
AVG e SUM.
10.Explique o conceito de Views em SQL. Como criar uma View e como ela pode ser útil em
operações de consulta?
PRÁTICA OBRIGATÓRIA: Lembre-se de solicitar ao seu instrutor que execute todos estes
exercícios com vocês dentro do MYSQL WORKBENCH. Criem outras situações para usar os comandos
vistos até aqui.
57
TEMA 05
habilidades
Quando se utiliza um SGBDR empresarial, antes de começar a criar tabelas é necessário ser
autenticado por esse sistema. A autenticação é o processo por meio do qual um SGBD garante que
somente usuários registrados possam acessar o banco de dados. Para ser autenticado, deve-se fazer
login no SGBDR utilizando um ID de usuário e uma senha criada pelo administrador de banco de
dados. Em um SGBDR empresarial todo ID de usuário está associado a um esquema de banco de
dados.No ambiente de SQL esquema é um grupo de objetos de banco de dados como tabelas e
índices relacionados entre si. Geralmente o esquema pertence a um único usuário ou aplicação. Um
único banco de dados pode manter vários esquemas que pertençam a vários usuários ou aplicações.
Pense no esquema como um agrupamento lógico de objetos de banco de dados, como tabelas,
índices e views. Eles são úteis, pois agrupam as tabelas por proprietários (ou função) e aplicam o
primeiro nível de segurança permitindo que cada usuário veja apenas as tabelas que lhe pertencem.
Os padrões de SQL ANSI definem um comando para a criação de um esquema de banco de
dados:
58
CREATE SCHEMA AUTHORIZATION {CRIADOR}
Após a criação do esquema de banco de dados, estamos prontos para definir as estruturas
das tabelas no banco de dados.
Especificações
Quando for indispensável haver dados disponíveis, a especificação NOT NULL não permitirá
que o usuário deixe o atributo vazio (sem nenhuma entrada de dados).
UNIQUE
Restrições são regras que o Mecanismo de Banco de Dados do SQL Server impõe a você. Por
exemplo, você pode usar as restrições UNIQUE para garantir que não há valores duplicados inseridos
em colunas específicas que não participam de uma chave primária. Embora a restrição UNIQUE e a
restrição PRIMARY KEY impõe exclusividade, use a restrição UNIQUE em vez da restrição PRIMARY
KEY quando for impor a exclusividade de uma coluna, ou uma combinação de colunas, que não seja
uma chave primária.
Diferente das restrições PRIMARY KEY, as restrições UNIQUE permitem o valor NULL. Porém,
como com qualquer valor que participa de uma restrição UNIQUE, só um valor nulo é permitido por
coluna. Uma restrição UNIQUE pode ser referenciada por uma restrição FOREIGN KEY.
Quando uma nova restrição UNIQUE é adicionada a uma coluna ou colunas existentes em
uma tabela, o Banco de Dados, por padrão, examina os dados existentes nas colunas para
certificar-se de que todos os valores são únicos. Se uma restrição UNIQUE for adicionada a uma
coluna que tem valores duplicados, o mecanismo de Banco de Dados retornará um erro e não
adicionará a restrição.
A especificação UNIQUE cria um índice exclusivo no respectivo atributo. Utilize-o para evitar a
duplicidade de valores em uma coluna.
Além dos formatos apresentados na tabela, a SQL dá suporte a muitos outros tipos de dados,
incluindo TIME(Hora), TIMESTAMP (registro de data e hora), REAL (número real), DOUBLE (duplo),
FLOAT (ponto flutuante), e intervalos como INTERVAL, DAY TO HOUR. Muitos SGBDR´s também
expandiram a lista para incluir outros tipos de dados como LOGICAL (lógico), CURRENCY (moeda),
AUTONUMBER (numeração automática) e sequência.
59
e bancos de dados.
Quando um usuário é criado, não possui permissão para fazer nada com os bancos de dados.
Na verdade, mesmo se tentar fazer login (com a senha password), ele não será capaz de chegar ao
shell do MySQL.
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
Portanto, a primeira coisa a ser feita é fornecer ao usuário o acesso às informações que eles
irão precisar.
GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';
Os asteriscos do comando referem-se ao banco de dados e tabela que ele pode acessar . Este
comando permite que o usuário leia, edite, execute e realize todas as tarefas em todos os bancos de
dados e tabelas. Observe que, nesse exemplo, estamos concedendo ao usuário acesso root completo
a tudo em nosso banco de dados.
Grant
Grant é usado para conceder permissões aos clientes. No banco de dados MySQL, ele oferece
60
ao servidor e ao cliente uma grande quantidade de privilégios de controle. No lado do servidor do
procedimento, ele incorpora a possibilidade de o servidor controlar determinados benefícios do
cliente sobre o banco de dados MySQL e reduzir suas permissões de conexão do banco de dados ou
conceder autorizações limitadas para uma tabela específica.
SELECT
Permite consultar (SELECT) qualquer coluna da tabela, visão ou sequência especificada.
Também permite utilizar o comando COPY TO. Para as sequências, este privilégio também permite o
uso da função currval.
INSERT
Permite inserir (INSERT) novas linhas na tabela especificada. Também permite utilizar o
comando COPY FROM.
UPDATE
Permite modificar (UPDATE) os dados de qualquer coluna da tabela especificada.
61
Os comandos SELECT ... FOR UPDATE e SELECT ... FOR SHARE também requerem este
privilégio (além do privilégio SELECT). Para as sequências, este privilégio permite o uso das funções
nextval e setval.
DELETE
Permite excluir (DELETE) linhas da tabela especificada. REFERENCES
Para criar uma restrição de chave estrangeira é necessário possuir este privilégio, tanto na
tabela que faz referência quanto na tabela que é referenciada.
TRIGGER
Permite criar gatilhos na tabela especificada (Consulte o comando CREATE TRIGGER).
CREATE
Para bancos de dados, permite a criação de novos esquemas no banco de dados.
Para esquemas, permite a criação de novos objetos no esquema. Para mudar o nome de um
objeto existente é necessário ser o dono do objeto e possuir este privilégio no esquema que o
contém. Para espaços de tabelas, permite a criação de tabelas e índices no espaço de tabelas, e
permite a criação de bancos de dados possuindo este espaço de tabelas como seu espaço de tabelas
padrão (Deve ser observado que revogar este privilégio não altera a colocação dos objetos
existentes).
CONNECT
Permite ao usuário se conectar ao banco de dados especificado. Este privilégio é verificado
no estabelecimento da conexão (além de serem verificadas as restrições impostas por pg_hba.conf).
TEMPORARY - TEMP
Permite a criação de tabelas temporárias ao usar o banco de dados. EXECUTE
Permite utilizar a função especificada e qualquer operador implementado utilizando a
função. Este é o único tipo de privilégio aplicável às funções (Esta sintaxe funciona para as funções de
agregação também).
USAGE
Para as linguagens procedurais, permite o uso da linguagem especificada para criar funções
nesta linguagem. Este é o único tipo de privilégio aplicável às linguagens procedurais.Para os
esquemas, permite acessar os objetos contidos no esquema especificado (assumindo que os
privilégios requeridos para os próprios objetos estejam atendidos). Essencialmente, concede a quem
recebe o direito de "procurar" por objetos dentro do esquema. Sem esta permissão ainda é possível
ver os nomes dos objetos, por exemplo consultando as tabelas do sistema. Além disso, após esta
permissão ter sido revogada os servidores existentes poderão conter comandos que realizaram
anteriormente esta procura, portanto esta não é uma forma inteiramente segura de impedir o acesso
aos objetos.
ALL PRIVILEGES
Concede todos os privilégios disponíveis de uma só vez. A palavra chave PRIVILEGES é
requerida pelo SQL estrito. Os privilégios requeridos por outros comandos estão listados nas páginas
de referência dos respectivos comandos.
Sintaxe
62
Exemplo
Visualizando o exemplo abaixo, o conceito de comando grant pode ser facilmente entendido.
REVOKE
63
Esta revogação recursiva somente afeta os privilégios que foram concedidos através de uma
cadeia de usuários começando pelo usuário objeto deste comando REVOKE. Portanto, os usuários
afetados poderão manter o privilégio, se o privilégio também tiver sido concedido por outros
usuários.
Ao revogar o privilégio de membro de um papel, GRANT OPTION passa a se chamar ADMIN
OPTION, mas o comportamento é semelhante.
Deve ser observado, também, que esta forma do comando não inclui a palavra GROUP.
<priv_type> [<column_list>]
[priv_type [<column_list>]] … ON [object_type] priv_level FROM user [user] …
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user [user] …
CREATE USER
Usada para criar um usuário no sistema (sem privilégios) Sintaxe:
CREATE USER usuário@host IDENTIFIED BY 'senha';
host é o nome do host a partir de onde o usuário pode se conectar ao banco de dados;
geralmente usamos localhost para a máquina local. Se não for especificado um host, o MySQL
acrescentará automaticamente o símbolo % como nome do host, o que significa que o usuário
poderá se conectar de qualquer lugar. É possível também usar o endereço IP de um host (por
exemplo, 127.0.0.1 para o host local).
Após a criação do usuário, ele não terá nenhum privilégio em nenhum banco de dados. Os
privilégios podem ser atribuídos por meio da declaração GRANT, que estudaremos na próxima lição.
Exemplos:
1. Criando um usuário de nome “fabio” com senha “1234” no MySQL, com acesso a
partir do host local:
CREATE USER fabio@localhost IDENTIFIED BY '1234';
Verificando se o usuário foi criado como especificado:
SELECT User, Host FROM mysql.user;
64
Fonte: Elaborado pelo autor <execução do programa> (2023).
Note que na coluna Host aparece o símbolo % para a usuária ana, significando que ela pode
acessar o SGBD de qualquer local.
RENAME USER
65
Fonte: Elaborado pelo autor <execução do programa> (2023).
1. O que é DCL?
66
TEMA 06
Conectividade Em Python
habilidades
67
import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="yourusername",
password="yourpassword"
)
print(mydb)
Criando um banco de dados
Para criar um banco de dados no MySQL, use uma instrução "CREATE DATABASE": Exemplo
Crie um banco de dados chamado "mydatabase": import mysql.connector
mydb = mysql.connector.connect(
host="localhost", user="yourusername",
password="yourpassword"
)
mycursor = mydb.cursor() mycursor.execute("CREATE DATABASE mydatabase")
Verifique se existe banco de dados
Você pode verificar se existe um banco de dados listando todos os bancos de dados em seu
sistema usando uma instrução "SHOW DATABASES":
Exemplo
Retorne uma lista dos bancos de dados do seu sistema:
import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="yourusername",
password="yourpassword"
)
mycursor = mydb.cursor() mycursor.execute("SHOW DATABASES")
Vamos agora criar uma tabela chamada Artist com colunas - name, id e track
68
Fonte: Elaborado pelo autor <execução do programa> (2023).
Agora nosso interesse é inserir algumas entidades de linha na tabela. Primeiro você tem que
escrever as consultas para inserir dados diferentes e, em seguida, executá-lo com a ajuda do cursor.
69
Python MySQL select
Nós inserimos duas linhas no código acima. Agora queremos recuperá-los. Para fazer isso, dê
uma olhada no seguinte exemplo:
70
password="yourpassword", database="mydatabase"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM customers WHERE address ='Park Lane 38'" mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
Caracteres curinga
Você também pode selecionar os registros que constam, incluindo ou terminam com uma
determinada letra ou frase.
Use o % para representar caracteres curinga:
Exemplo
Selecione os registros em que o endereço contenha a palavra "caminho": import
mysql.connector
mydb = mysql.connector.connect( host="localhost", user="yourusername",
password="yourpassword", database="mydatabase"
)
mycursor = mydb.cursor()
sql = "SELECT * FROM customers WHERE address LIKE '%way%'" mycursor.execute(sql)
myresult = mycursor.fetchall()
for x in myresult:
print(x)
CRUD - ( Create, Read, Update e Delete)
Pode ser traduzido como: criar, ler, atualizar e excluir, engloba os principais comandos da
linguagem SQL (Structured Query Language) para a manipulação de dados, que são: INSERT (inserir),
READ (ler), UPDATE (alterar) e DELETE (remover). As interfaces CRUD permitem cadastrar (create),
visualizar (read), editar (update) e excluir (delete) registros de um sistema.
INSERT – CREATE
Esse comando é responsável por inserir dados na tabela. Assim, toda vez que você quiser
adicionar algo novo, você precisa usar o comando INSERT, seguido do campo e do valor que você
quer adicionar.
71
SELECT – READ
O SELECT é de longe o comando mais utilizado do CRUD. Justamente porque é ele quem traz
todo o resultado da busca que você quer saber. Assim, ele traz para você exatamente o que você quer
saber quando pesquisa algo no banco de dados.
UPDATE
O comando UPDATE tem por finalidade a atualização dos dados que você inseriu na tabela. Se
por algum motivo você quer modificar um campo, atualizar o valor ou acrescentar novos dados, é o
UPDATE que você vai utilizar.
Python MySQL Update
Exemplo
UPDATE cliente SET endereco = ‘Rua da Flor’ WHERE nome = ‘Joana das Flores’;
Para atualizar um campo, basta especificar qual campo você vai modificar, com o valor antigo
pelo valor que você quer substituir.
DELETE
Por fim temos o comando DELETE que simplesmente exclui o dado especificado. Muito
cuidado, pois, uma vez excluído não tem Ctrl + z para voltar no tempo e desfazer o erro.
Python MySQL Delete
72
Fonte: Elaborado pelo autor <execução do programa> (2023).
Exemplo
DELETE from cliente WHERE nome = ‘Joana das Flores’;
Python MySQL – Drop Table
73
Exemplo
Comece na posição 3 e retorne 5 registros:
import mysql.connector
mydb = mysql.connector.connect( host="localhost", user="yourusername",
password="yourpassword", database="mydatabase"
)
mycursor = mydb.cursor()
mycursor.execute("SELECT * FROM customers LIMIT 5 OFFSET 2") myresult =
mycursor.fetchall()
for x in myresult:
print(x)
1. O que é o Python?
74