Tópicos em Banco de Dados Prof. Edson Scalabrin e Aroldo Vieira [email protected].
Transcript of Tópicos em Banco de Dados Prof. Edson Scalabrin e Aroldo Vieira [email protected].
Tópicos em Banco de Dados
Prof. Edson Scalabrin e Aroldo Vieira
Conceitos e Arquitetura
O que é um SGBD
SGBD – Sistema Gerenciador de Banco de Dados.
DBMS – Data Base Management System
Sistema que visa gerenciar de modo adequado e eficiente as bases de dados
DBMSAplicativos Usuários
Banco de dados
Visão simplificada de um sistema de banco de dados
SGBD
Arquitetura – Visão Global
Nível ConceitualVisão da comunidade de usuários
Nível InternoVisão do armazenamento de dados
Nível ExternoVisão de cada usuário Visão de cada usuário
Vantagens do uso de DBMS
Redução de redundância de informações
Redução de inconsistência
Compartilhamento de informações
Manutenção da integridade dos dados
Independência de dados em relação ao aspecto físico de armazenamento
Vantagens do uso de DBMS
Reforço dos padrões da empresa
Melhoria na segurança das informações
Balanceamento das necessidades conflitantes
Objetos do DBMS
Objetos de um DBMS
Usuários / Autorizações / Papéis
Tabelas / Colunas
Nulos e defaults
Índices
Constraints de Integridade
Stored Procedures
Triggers
Objetos do DBMS
Conexões Client / Server
Controles de acessos multiusuários Integridade Segurança
Otimizador e Planos de acesso
Catálogo de dados
Logs
DBMS Relacional
DBMS Relacional
Representação dos dados em formas de tabelas, como conjunto de linhas e colunas Como conjunto não possui ordenação
Maior facilidade na implementação
Possuem regras para a nomenclatura
As tabelas devem estar normalizadas
DBMS Relacional
Os arquivos obedecem a limitações que podem ser consideradas como relações matemáticas
Linhas
Colunas
Domínios => Reservatório de valores
DBMS Relacional
Dicionário de dados integrado (catálogo)
Linguagem SQL padrão: DDL – Data Definition Language DML – Data Manipulation Language DCL – Data Control Language
DBMS Relacional
Chave Primária (PK): Coluna(s) que identifica unicamente uma linha da tabela Não pode possuir valores nulos Não pode ter valores duplicados Não pode ter seus valores alterados
Chaves estrangeiras (FK): Coluna(s) cujos valores fazem referência a uma PK em outra tabela
Modelo Relacional
Formas Normais
Formas Normais
Regras desenvolvidas para: Evitar inconsistências lógicas nas operações de atualização das tabelas. Evitar redundância na organização das tabelas.
Primeira Forma Normal
SegundaForma Normal
TerceiraForma Normal
Diminui o desempenho
Aumenta as restrições
Primeira Forma Normal – 1FN
Definição: o domínio de todos os atributos das tabelas deve ser atômico (indivisível) Cada coluna da tabela deve conter só um tipo de
atributos
id_pessoaid_pessoa nome contatoTabela Pessoa
Não Satisfaz 1FN
Brigadeiro [email protected]
id_pessoaid_pessoa nome endereçoTabela Pessoa
telefone Satisfaz 1FN
Exercício – 1FN
Cadastro de clientes COD CLIENTE NUM_CPF_CGC VALOR_DEVEDOR
• Cadastro de clientes– COD CLIENTE– NUM_CPF_CGC– NUM_DV_CPF– NUM_CGC– NUM_DV_CGC– VALOR_EMPREST– VALOR JUROS– VALOR_CORR_MON
Não atende a 1FN
Atende a 1FN
Segunda Forma Normal – 2FN• Definição: cada tabela deve satisfazer a 1FN, cada
registro deve ter uma chave primária e cada campo não chave deve depender totalmente da chave primária.
Não Satisfaz 2FN
id_pessoaid_pessoa nome endereço conta saldo agência endereço_agência
os campos dependem apenas de parte da chave primária, alguns apenas de conta outros apenas de id_pessoa
chave primária: id_pessoa + conta
Satisfaz 2FN
conta saldo agência endereço_agência
id_pessoaid_pessoa nome endereço conta
chave primária: id_pessoa
chave primária: conta
Exercício – 2 FN
Peça_Carro Cod_peça Desc_peça Qtde_estoque End_local_estoque
• Peça_Carro– Cod_peça– Desc_peça– Qtde_estoque– Rua_End_local– Num_end_local– Etc_endereço
Não atende a 1FN
Atende a 1FN
Exercício – 2 FNPeça_Carro Cod_peça Desc_peça Qtde_estoque End_local_estoque
• Peça_Carro– Cod_peça– Desc_peça– Qtde_estoque– Cod_local_estoque
• Local_estoque– Cod_local_estoque– Rua_End_local– Num_end_local– Etc_endereço
Não atende a 2FN
Atende a 2FN
Terceira Forma Normal – 3FNDefinição: cada tabela deve satisfazer a 2FN e cada atributo não chave primária depende diretamente da chave primária.
Não Satisfaz 3FNconta saldo agência endereço_agência
id_pessoaid_pessoa nome endereço conta
o endereço da agência não depende da conta, mas da agência.
Satisfaz 3FN
endereço_agência
conta saldo agência
agência
Exercício – 3 FNNota_aluno Cod_aluno Nome_aluno Nome_disciplina Cod_professor Nota
• Aluno– Cod_aluno– Nome_aluno
• Disciplina– Cod_disciplina– Nome_disciplina– Cod_professor
• Nota_aluno– Cod_aluno– Cod_disciplina– Nota
Não atende a 3FN
Atende a 3FN
Comandos básicos de SQL
SQL – Criação de tabela
CREATE TABLE tabela
(
coluna1 int not null,
coluna2 varchar(50) not null default (‘XX'),
coluna3 datetime not null default (getdate())
)
SQL - Insert
Insert into tabela
(coluna, coluna)
Values
(valor_coluna, valor_coluna)
SQL - Update
Update tabela
Set coluna = novo_valor
Where condição
SQL - Delete
Delete from tabela
Where condição
SQL – Seleção de dados
Select função(colunas), coluna
From tabela
Where condição
Order by coluna
Group by coluna
Having condição
Obs: having deve ser usado quando existir restrição e utilização de funções de grupo.
SQL – Operadores do Where
= > < >= < >Between
In
Like
Is null
NOT (pode ser utilizado com todos os operadores)
SQL – Funções de agrupamento
Sum ( n )
Avg ( n )
Min (exp )
Max (exp )
Count ( exp )
Exercício
Coluna Tipo Null Default Constraint
Id_aluno smallint N PK
Nome_aluno Char(40) N ‘NP’
Sexo_aluno Char(01) N ‘M’ , ‘F’
Dt_nasc Smalldatetime
Dt_alter_tab Datetime N GETDATE()
Observacoes Varchar(250)
Criar tabela aluno
Inserir as linhas abaixo
Id_aluno = 1 / Sexo_aluno = ‘X’
Id_aluno = 1 / Sexo_aluno = ‘M’
Id_aluno = 1 / Sexo_aluno = ‘F’
Observar as mensagens que ocorreram e o resultado final
Obs: Utilizar o query analizer e inserir as linhas utilizando o comando “insert into...”
Inserir as colunas em “aluno”
Cd_sit_aluno tipo smallint
Id_curso tipo smallint
Verificar a possibilidade de incluir restrição de “not null” para as novas colunas
Utilizar enterprise manager ou query analizer
Criar tabela “curso”
Id_curso tipo smallintNome_curso tipo char(30)Dt_implantação tipo smalldateDt_alt_tab tipo datetime
Considerar todos os campos sendo “not null”Incluir default “data atual” para dt_alt_tab
Inserir linhas nesta tabela
Criar tabela “situacao_aluno”
Cd_sit_aluno tipo smallintDesc_sit_aluno tipo char(30)Dt_alt_tab tipo datetime
Considerar todos os campos sendo “not null”Incluir default “data atual” para dt_alt_tab
Inserir linhas nesta tabela
Implementar Foreign key
Alterar a tabela “aluno”, implementando a integridade relacional com as demais tabelas criadas
Em caso de erro, verificar e acertar os dados nas tabelas, para não ferir a integridade
Select
Obter todos os alunos do sexo “M”
Obter todos os alunos do sexo “F”
Contar o total de linhas da tabela aluno
Contar a qtde de alunos do sexo “F” e “M”
Contar os alunos por curso
Contar os alunos por situação
Contar os alunos por curso e situação
Exercício
Exercício – Banco de dados
Definir modelo normalizado, para a questão apresentada anexa
Implementar e popular as tabelas do modelo
Mãos à obra ! ! ! !