Documentos relacionados


Banco de Dados. Professora: Luciana Faria

Banco de dados. Conteúdo: DDL Prof. Patrícia Lucas

Banco de Dados I Introdução SQL


FACULDADE INGÁ Unidade de Ensino Superior Ingá Ltda Ciência da Computação TRIGGERS. Prof. Erinaldo Sanches Nascimento

A linguagem SQL

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Triggers(Gatilhos) Tiago Alves de Oliveira

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Linguagem SQL Restrições, Triggers e Views

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Bruno Maciel

Professor Leonardo Larback

Banco de Dados. Diego Silveira Costa Nascimento. 20 de março de Instituto Federal do Rio Grande do Norte

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Teste Exemplo Revisão da tentativa 1

MODELAGEM DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

DDL DML DCL DTL Tipos Numéricos: INT FLOAT DOUBLE Tipos String: CHAR VARCHAR BINARY BLOB TEXT Tipos Data e Hora: DATE TIME TIMESTAMP YEAR

Linguagem de Consulta Estruturada (SQL)

A linguagem SQL

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

FTIN FORMAÇÃO TÉCNICA EM INFORMÁTICA. Módulo de Programação Prof. Flávio Dantas

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU


Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

Sumário. SQL - Criação de Tabelas. Structured Query Language. SQL Versões. André Restivo. October 18, 2010

Tabelas. Banco de Dados I MySQL

PSI Linguagem de Definição de dados. Módulo 15

Curso de Ciência da Computação

Disciplina: Banco de Dados Tema: SQL Parte 2

Transacções. Vitor Vaz da Silva

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Conceitos SQL SQL 19/03/2017 O que é dado? O que é BD? O que é uma informação? O que é SGBD? O que é SQL? O que é BD? O que é SGBD?

BANCO DE DADOS PARA WEB

PHP INTEGRAÇÃO COM MYSQL PARTE 1

Banco de Dados. Colégio Singular. Curso Profissionalizante: Informática

Atualização e Inserção de Dados. SQL Avançado. Pedro F. Carvalho OCP Oracle g

BANCO DE DADOS. Para a criação de um banco de dados, através de scripts SQL, deve-se usar a seguinte sintaxe: CREATE DATABASE <nome_banco_de_dados>

Utilizando o Postgres - comandos SQL para a manipulação de dados

Sistemas de Informação e Bases de Dados 2012/2013. Restrições de Integridade em SQL

A U L A 1 0 C R I A N D O V I E W S V I E W S ( V I S Õ E S )

Revisão Banco de Dados

SQL. Autor: Renata Viegas

Administração de Banco de Dados

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

Linguagem SQL (Parte II)

O modelo relacional encontra-se padronizado pela indústria de informática. Ele é chamado de

BANCO DE DADOS II SQL Básico. COTEMIG Gerson Borges

MySQL. Prof. César Melo. com a ajuda de vários

Banco de Dados - Senado

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Linguagem SQL. Comandos Básicos

UNIVERSIDADE FEDERAL DA GRANDE DOURADOS PRÓ-REITORIA DE GRADUAÇÃO PROGRAD FACULDADE DE CIÊNCIAS EXATAS E TECNOLOGIA CURSO DE SISTEMAS DE INFORMAÇÃO

A linguagem SQL

Os tipos de cardinalidade dos relacionamentos usados em Mysql são:

Flickr, shindotv/ / BASES DE DADOS. Laboratórios de Informática João Paulo Barraca, André Zúquete, Diogo Gomes

Aula 06 Sistemas Embarcados LT38C

Blob fields in MySQL Databases

Prof. Carlos Majer Aplicações Corporativas UNICID

SQL (Tópicos) Structured Query Language

Stored Procedures e Triggers

PCS3413. Engenharia de So-ware e Banco de Dados. Aula 20. Escola Politécnica da Universidade de São Paulo

Revisão de Bancos de Dados

Normalização. Anomalias Dependência e determinantes Normalização

Banco de Dados. -Aprendendo conceitos -Usando o SQL Conf para: -Conectar no banco de dados -Criar, alterar, excluir e consultar estruturas de tabelas

Preparação. Linguagem de Manipulação de Dados (DML) Estudo Dirigido 10/12/2013

Fundamentos de Banco de Dados Postgre com Sql

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Marcos Alexandruk Marcos Alexandruk

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

SQL E MYSQL - COMANDOS BÁSICOS

SQL. Definição do Esquema da Base de Dados. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Bases de Dados. DDL Data Definition Language

Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

MYSQL - PRIMEIROS COMANDOS CRIAÇÃCO DO BD E DAS TABELAS, INSERÇÃO E CONSULTA DE REGISTROS. create database [if not exists] <nome>

Aula de SQL Comandos DDL. André Luiz de Oliveira Eduardo Raul Hruschka

26/04/2017 Triggers no SQL Server: teoria e prática aplicada em uma situação real

Consultas SQL. Andre Noel

MySql. Introdução a MySQL. Andréa Garcia Trindade

SQL Básica. Andre Noel

Informática I. Aula 8. Aula 8-25/09/2006 1

NORMALIZAÇÃO. Lílian Simão Oliveira

Laboratório de Banco de Dados. Prof. Luiz Vivacqua.

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA total e disjuntiva.

Técnicas de Modelação de Dados

Bancos (Bases) de Dados

TECNÓLOGO EM ANÁLISE E DESENVOLVIMENTO DE SISTEMAS BANCO DE DADOS I PROFA. CLEIANE GONÇALVES OLIVEIRA ATIVIDADE 15

BCD29008 Banco de dados

S U B G R U P O S D M L E D Q L : A L T E R A N D O E A P A G A N D O D A D O S E M U M A T A B E L A

Prof. Dr. Joaquim Assunção Banco de Dados. SQL (parte 4) DDL Restrições

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

Transcrição:

Normalização: (Uma tabela muito Normalizada significa que ele é muito bem feita, e muito relacionado) 5FN (Somente 10% dos DBAs dos ADs conseguem ) A normalização de dados é uma série de passos que se seguem no projeto de um banco de dados, que permitem um armazenamento consistente e um eficiente acesso aos dados em bancos de dados relacionais. Esses passos reduzem a redundância de dados e as chances dos dados se tornarem inconsistentes. No entanto, muitos SGBDs relacionais não têm separação suficiente entre o projeto lógico da base de dados e a implementação física do banco de dados, e isso tem como consequência que as consultas feitas a um banco de dados totalmente normalizado tenham mau desempenho. Nestes casos, usa-se por vezes a desnormalização para melhorar o desempenho, com o custo de menores garantias de consistência. Diz-se que uma tabela num banco de dados relacional está numa certa forma normal se satisfaz certas condições. O trabalho original de Edgar F. Codd definiu três dessas formas, mas existem hoje outras formas normais geralmente aceitas. Damos aqui uma curta panorâmica informal das mais comuns. Cada forma normal listada abaixo representa uma condição mais forte que a precede na lista. Para a maioria dos efeitos práticos, considera-se que as bases de dados estão normalizadas se aderirem à terceira forma normal. Primeira Forma Normal (ou 1FN) requer que todos os valores de colunas em uma tabela sejam atômicos (exemplo: um número é um átomo, enquanto uma lista ou um conjunto não o são). A normalização para a primeira forma normal elimina grupos repetidos, pondo-os cada um em uma tabela separada, conectando-os com uma chave primária ou estrangeira; Segunda Forma Normal (ou 2FN) requer que não haja dependência funcional não-trivial de um atributo que não seja a chave, em parte da chave candidata; Terceira Forma Normal (ou 3FN) requer não haver dependências funcionais não-triviais de atributos que não sejam chave, em qualquer coisa exceto um superconjunto de uma chave candidata; Forma Normal de Boyce-Codd (ou BCNF) requer que não exista nenhuma dependência funcional não-trivial de atributos em algo mais do que um 1

superconjunto de uma chave candidata. Neste estágio, todos os atributos são dependentes de uma chave, de uma chave inteira e de nada mais que uma chave (excluindo dependências triviais, como A A); Quarta Forma Normal (ou 4FN) requer que não exista nenhuma dependência multi-valorada não-trivial de conjuntos de atributo em algo mais de que um superconjunto de uma chave candidata; Quinta Forma Normal (ou 5FN ou PJ/NF) requer que não exista dependências de joins (associações) não triviais que não venham de restrições chave; Domain-Key Normal Form (ou DK/NF) requer que todas as restrições sigam os domínios e restrições chave. 1 Forma Normal, Evitar Campos muiltivalorados... igual a Vetores (Atributo ele tem vários Valores ele é multivalorado... telefone[]={98199-0108, 3174666, 226293 } nome _ só temos um nome email _ Um e-mail em qualquer site é sua indentificação datanascimento _ uma só.. Estudo de Caso: Armazenar um Aluno que possua, codigo, nome, email, cpf, disciplina, nota1, nota2, media, telefone, situacao... Tabelão Sem Normalização E regra _ Nomes que possuem valores preso a ele (Nomes transitivos) Antes {Aluno_ codigo, nome,email,cpf, disciplina, nota1, nota2,media, telefone, situacao} de 1 tabela sem Normalização 1FN (Normalização) Evitar redundância 3 tabelas na 1FN {Aluno _ idalunopk, nome, email, cpf} {Disciplina_ iddisciplinapk, nome, nota1, nota2, media, id_alunofk} {Telefone _ idtelefone, numero, operadora, tipo,id_alunofk } _ Vetores (Telefone) Acabando a Idéia de Vetores _ Campos com vários Valores (Disciplina) 2

1ª Forma Normal {Pede não tenha campos mult valorados, não tenha campos de total, jamais armazene totais em tabela} Porque não guardamos total: discipina {nota1= 5.0, nota2=7.0, media=6} Em tabelas as pessoas podem alterar {nota1= 9.0, nota2=7.0, media=6} por automação (Automaticamente a média é alterada) _ trigger Trigger é um programa que se prende na tabela, para alterar, inserir, deletar O Total é Gerado pelo Select... {Aluno _ idalunopk, nome, email, cpf} {Disciplina_ iddisciplinapk, nome, nota1, nota2, media, id_alunofk} {Telefone _ idtelefone, numero, operadora, tipo,id_alunofk } #2 create database modelo2; use modelo2; select now(); +---------------------+ now() +---------------------+ 2016--14 09:47:53 +---------------------+ select user(); +----------------+ user() +----------------+ root@localhost +----------------+ 3

#CRUD em Uma Tabela (Inserir, Alterar, Excluir, Read (select) #Create, Read, Update e Delete #logo aluno estará preso a modelo #Geralmente na WEB o Email obrigatório... #Auto_increment (significa automático) #email não é obrigatorio #CRUD #Create,insert _ Read(select), u _ update, D _ delete drop table if exists aluno; #ou drop table aluno; create table Aluno ( idaluno int primary key auto_increment, nome varchar (35), email varchar (50), cpf varchar (15) unique ); #Cpf (Campo unique não pode ser duplicado, ou seja a pessoa só pode ter um cpf) #idaluno (automaticamente) ou Não, que se você quiser inserir na mão você pode pode insert into aluno values (null, 'jose', 'jose@gmail.com','2222'); insert into aluno values (null, 'profirio', 'profirio@gmail.com','3333'); insert into aluno values (null, 'lu', null,'4444'); insert into aluno values (null, 'belem', 'profedsonbelem@gmail.com','5555'); #Parte 1 (inserção) #Parte 2 leitura (select) #buscar todos os dados do ALuno 4

select * from aluno; idaluno nome email cpf 1 jose jose@gmail.com 2222 2 profirio profirio@gmail.com 3333 3 lu NULL 4444 5 belem profedsonbelem@gmail.com 5555 select count(*) as quantidade from aluno; +------------+ quantidade +------------+ 4 +------------+ #Alterar o Nome da Luciana de Lu para lucina #geralmente eu faço tudo por codigo #UPDATE update aluno set nome='luciana' where idaluno=3; select * from aluno; idaluno nome email cpf 1 jose jose@gmail.com 2222 2 profirio profirio@gmail.com 3333 3 luciana NULL 4444 4 belem profedsonbelem@gmail.com 5555 # alterar dois campos de Aluno #nome=belem para =Edson #cpf=5555 cpf=6666 update aluno set nome='edson',cpf='6666' where idaluno=5; #Geralmente a condição é feita pelo Código... #D #estou apagando o José... 5

delete from aluno where idaluno=1; select * from aluno; idaluno nome email cpf 2 profirio profirio@gmail.com 3333 3 luciana NULL 4444 5 belem profedsonbelem@gmail.com 5555 #----------------------------------------------- #Vamos mudar essa idéia # Essa idéia de apagar é desativar.. #----------------------------------------------- drop table if exists aluno; create table alunonovo( idaluno int primary key auto_increment, nome varchar (50), email varchar (50), cpf varchar (20), ativo int ); insert into alunonovo values (null,'porfirio','porfirio@gmail.com', '2222',1); insert into alunonovo values (null,'belem','belem@gmail.com', '3333',1); insert into alunonovo values (null,'lu','lu@gmail.com', '4444',1); insert into alunonovo values (null,'garra','garra@gmail.com', '5555',1); select * from alunonovo; 4 garra garra@gmail.com 5555 1 6

#apaga o aluno garra #A idéia se apagar deve possuir uma tabela para recebe a lixeira... update alunonovo set ativo=0 where idaluno=4; select * from alunonovo where ativo=1; select * from alunonovo where ativo=0; 4 garra garra@gmail.com 5555 0 #Criando uma tabela de BACKUP #BACKUP #ELE irà CRIAR A TABELA ALUNOEXCLUIDO EM BRANCO... create table alunoexcluido as select * from alunonovo where idaluno<0; #Qual a Intenção (criar a tabela com nenhum registro) #criar uma tabela em branco... # Pergunta absurda para criar essa tabela #Importante verificar se são iguais desc alunonovo; +---------+-------------+------+-----+---------+---------------- Field Type Null Key Default Extra +---------+-------------+------+-----+---------+---------------- idaluno int(11) NO PRI NULL auto_increment nome varchar(50) YES NULL email varchar(50) YES NULL cpf varchar(20) YES NULL ativo int(11) YES NULL +---------+-------------+------+-----+---------+---------------- 7

desc AlunoExcluido; +---------+-------------+------+-----+---------+-------+ Field Type Null Key Default Extra +---------+-------------+------+-----+---------+-------+ idaluno int(11) NO 0 nome varchar(50) YES NULL email varchar(50) YES NULL cpf varchar(20) YES NULL ativo int(11) YES NULL +---------+-------------+------+-----+---------+-------+ select * from alunonovo; 4 garra garra@gmail.com 5555 0 select * from alunoexcluido; #Quando apagar do AlunoNovo e ir para Excluído utilizarei uma trigger #delimiter espaço o que você quer #Toda vez que eu deletar de alunonovo ele irá para Aluno_Excluído... #Quando eu apagar de AlunoNOvo ele irá para Aluno Excluído... Gatilho ou trigger é um recurso de programação executado sempre que o evento associado ocorrer. Trigger é um tipo especial de procedimento armazenado, que é executado sempre que há uma tentativa de modificar os dados de uma tabela que é protegida por ele. É muito utilizada para ajudar a manter a consistência dos dados ou para propagar alterações em um determinado dado de uma tabela para outras. Um bom exemplo é um gatilho criado para controle de quem alterou a tabela, nesse caso, quando a alteração for efetuada, o gatilho é "disparado" e grava em uma tabela de histórico de alteração, o usuário e data/hora da alteração. Em SQL, para se criar um trigger utiliza-se do CREATE TRIGGER, e para removê-lo deve-se usar DROP TRIGGER. Um gatilho típico é composto de três componentes, que seguem o Modelo: evento - condição - ação [1]. 8

drop trigger if exists gat_delecao_alunonovo; delimiter $$ create trigger gat_delecao_alunonovo before delete on alunonovo for each row begin insert into alunoexcluido values (old.idaluno, old.nome, old.email, old.cpf, old.ativo); end; $$ delimiter ; #Volta ao Normal no Final da Programação # delimiter ; #toda vez que eu for programar no Mysql, sou Obrigado #Sempre, a mudar o fim, o fim é ponto vírgula #mas programar devo mudar de ; para qualquer outro sinal # o que eu utilizo muito $$ # Irá Dar Erro #create trigger gat_erro # before delete on alunonovo # for each row # begin # # insert into alunoexcluido values # (old.idaluno, old.nome, old.email, old.cpf, old.ativo); # # end; #Mostra A TRIGGER show create trigger gat_delecao_alunonovo; +-----------------------+--------------------------------------- -------------------------+-------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------------------------------------------- Trigger sql_mode SQL Original Statement 9

+-----------------------+--------------------------------------- -------------------------+-------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------------------------------------------- gat_delecao_alunonovo STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION CREATE DEFINER=`root`@`localhost` trigger gat_delecao_alunonovo before delete on alunonovo for each row begin insert into alunoexcluido values (old.idaluno, old.nome, old.email, old.cpf, old.ativo); end latin1 latin1_swedish_ci latin1_swedish_ci +-----------------------+--------------------------------------- -------------------------+-------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- --------------------------------------------------------- select * from alunonovo; 4 garra garra@gmail.com 5555 0 select * from alunoexcluido; #Testar o Gatiho delete from alunonovo where idaluno=4; 10

select * from alunonovo; select * from ALunoExcluido; 4 garra garra@gmail.com 5555 0 #AlunoExcluido é um Backup da AlunoNovo para Delecao #isso AConteceu devido A TRIGGER (AO GATILHO)... {Aluno _ idalunopk, nome, email, cpf, ativo} {Disciplina_ iddisciplinapk, nome, nota1, nota2, media, id_alunofk} {Telefone _ idtelefone, numero, operadora, tipo,id_alunofk } create table disciplina( iddisciplina int primary key Auto_increment, nomedisciplina varchar (35), nota1 double, nota2 double, id_aluno int, foreign key(id_aluno) references AlunoNovo(idAluno) on delete cascade ); create table disciplinaexcluida as select * from disciplina where iddisciplina <0; drop trigger if exists gat_delecao_disciplina; delimiter $$ create trigger gat_delecao_disciplina before delete on disciplina for each row begin 11

insert into disciplinaexcluida values (old.iddisciplina, old.nomedisciplina, old.nota1, old.nota2, old.id_aluno); end; $$ delimiter ; desc disciplina; +----------------+-------------+------+-----+---------+--------- Field Type Null Key Default Extra +----------------+-------------+------+-----+---------+--------- iddisciplina int(11) NO PRI NULL auto_increment nomedisciplina varchar(35) YES NULL nota1 double YES NULL nota2 double YES NULL id_aluno int(11) YES MUL NULL +----------------+-------------+------+-----+---------+--------- select * from alunonovo; insert into disciplina values (null,'mysql',9,9, 1); insert into disciplina values (null,'java',7,8, 2); insert into disciplina values (null,'java',9,8, 3); #Atualiza... commit; select * from alunonovo; 12

select * from disciplina; +--------------+----------------+-------+-------+----------+ iddisciplina nomedisciplina nota1 nota2 id_aluno +--------------+----------------+-------+-------+----------+ 1 mysql 9 9 1 2 java 7 8 2 3 java 9 8 3 +--------------+----------------+-------+-------+----------+ delete from alunonovo where idaluno=2; #irá apagar o ALunoNovo o idaluno da tabela ALunoNovo e a Disciplina select * from alunonovo; select * from disciplina; +--------------+----------------+-------+-------+----------+ iddisciplina nomedisciplina nota1 nota2 id_aluno +--------------+----------------+-------+-------+----------+ 1 mysql 9 9 1 3 java 9 8 3 +--------------+----------------+-------+-------+----------+ select * from alunoexcluido; 4 garra garra@gmail.com 5555 0 select * from disciplinaexcluida; 13

select a.nome, d.nomedisciplina,(d.nota1 + d.nota2)/2 as media from alunonovo a, disciplina d where a.idaluno = d.id_aluno; +----------+----------------+-------+ nome nomedisciplina media +----------+----------------+-------+ porfirio mysql 9 lu java 8.5 +----------+----------------+-------+ 14