Tópicos em Banco de Dados Prof. Edson Scalabrin e Aroldo Vieira [email protected] 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 Visão simplificada de um sistema de banco de dados Aplicativos DBMS Banco de dados Usuários Arquitetura – Visão Global Nível Externo Visão de cada usuário Visão de cada usuário Nível Conceitual Visão da comunidade de usuários Nível Interno Visão do armazenamento de dados SGBD 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 Segunda Forma Normal Terceira Forma Normal Aumenta as restrições Diminui o desempenho 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 Tabela Pessoa id_pessoa nome contato Não Satisfaz 1FN Brigadeiro Franco 233-3932 [email protected] Tabela Pessoa id_pessoa nome endereço telefone email Satisfaz 1FN Exercício – 1FN Cadastro de clientes COD CLIENTE NUM_CPF_CGC VALOR_DEVEDOR Não atende a 1FN Atende a 1FN • Cadastro de clientes – – – – – – – – COD CLIENTE NUM_CPF_CGC NUM_DV_CPF NUM_CGC NUM_DV_CGC VALOR_EMPREST VALOR JUROS VALOR_CORR_MON 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. chave primária: id_pessoa + conta Não Satisfaz 2FN id_pessoa nome endereço conta saldo agência endereço_agência Satisfaz 2FN chave primária: id_pessoa id_pessoa nome endereço conta chave primária: conta 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 Exercício – 2 FN Peça_Carro Cod_peça Desc_peça Qtde_estoque End_local_estoque Não atende a 1FN Atende a 1FN • Peça_Carro – – – – – – Cod_peça Desc_peça Qtde_estoque Rua_End_local Num_end_local Etc_endereço Exercício – 2 FN Peça_Carro Cod_peça Desc_peça Qtde_estoque End_local_estoque Não atende a 2FN Atende a 2FN • 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 Terceira Forma Normal – 3FN Definição: cada tabela deve satisfazer a 2FN e cada atributo não chave primária depende diretamente da chave primária. id_pessoa nome endereço conta o endereço da agência não depende da conta, mas da agência. conta saldo agência endereço_agência conta saldo agência agência endereço_agência Não Satisfaz 3FN Satisfaz 3FN Exercício – 3 FN Nota_aluno Cod_aluno Nome_aluno Nome_disciplina Cod_professor Nota Não atende a 3FN Atende a 3FN • Aluno – Cod_aluno – Nome_aluno • Disciplina – Cod_disciplina – Nome_disciplina – Cod_professor • Nota_aluno – Cod_aluno – Cod_disciplina – Nota 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 Criar tabela aluno Coluna Tipo Null Id_aluno smallint N Nome_aluno Char(40) N Sexo_aluno Char(01) N Dt_nasc Smalldatetime Dt_alter_tab Datetime Observacoes Varchar(250) N Default Constraint PK ‘NP’ ‘M’ , ‘F’ GETDATE() 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 Nome_curso Dt_implantação Dt_alt_tab tipo smallint tipo char(30) tipo smalldate 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 Desc_sit_aluno Dt_alt_tab tipo smallint tipo char(30) 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 ! ! ! !