Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br...

Post on 07-Apr-2016

216 views 0 download

Transcript of Fundamentos de Banco de Dados Prof. André Cypriano M. Costa amonteiro@catolica-es.edu.br...

Fundamentos de Banco de Dados

Prof. André Cypriano M. Costaamonteiro@catolica-es.edu.br

acostaprofessor@gmail.com

LINGUAGEM SQL – STRUCTURED QUERY

LANGUAGE

INTRODUÇÃO À LINGUAGEM SQL

A SQL engloba vários tipos de comandos:Comandos de manipulação de dados (DML - Data

Manipulation Language) São comandos que nos permitem consultar, incluir, excluir ou alterar dados de tabelas.

Comandos de definição de dados (DDL - Data Definition Language) São comandos que nos permitem manipular a estrutura do banco de dados, criando cada uma de suas tabelas com seus atributos, chaves etc.

INTRODUÇÃO À LINGUAGEM SQL

Nesta parte iremos ver os Comandos de Definição de Dados, chamados de DDL - Data Definition Language (por exemplo: Create, Alter e Drop)

São comandos que nos permitem manipular a estrutura do banco de dados, criando cada uma de suas tabelas com seus atributos, chaves primárias e estrangeiras etc.

Em seguida, veremos outros comandos de manipulação de dados (DML), como o insert, update e delete

DEFINIÇÃO DE DADOS

O conjunto de relações (tabelas) de um BD precisa ser especificado ao sistema por meio de uma linguagem de definição de dados - DDL.

A SQL DDL permite a especificação não apenas de um conjunto de relações, mas também de informações sobre cada relação, incluindo:Esquema para cada relação (seus atributos);Domínio de valores associados a cada atributo;Conjunto de índices a ser mantido para cada relação;Restrições de integridade;Definição de chaves primárias e chaves estrangeiras etc.

CRIANDO E APAGANDO BANCO DE DADOS

Um banco de dados em SQL é definido usando o comando create database:

create database <nome>; onde <nome> é o nome do banco de dados

Exemplo:create database myDatabase;

Para apagar um banco de dados use o comando:drop database <nome>;

CRIANDO RELAÇÕES EM BANCO DE DADOS Uma relação SQL é definida usando o comando create

table:create table R (

A1 D1 [N1] [d1], A2 D2 [N2] [d2], ..., An Dn [Nn] [dn],<regras de integridade1>,...,<regras de integridadek>

);

CRIANDO RELAÇÕES EM BANCO DE DADOS R é o nome da relação Cada Ai é o nome de um atributo em R Di é o tipo dos atributos Ai, [Ni] indica que o atributo deve ser obrigatoriamente

preenchido ou não.Por padrão, Ni recebe o valor NULL.

[di] indica que o atributo possui algum valor padrão ou não.Por padrão, os atributos não possuem valor padrão.

CRIANDO RELAÇÕES EM BANCO DE DADOS Exemplo:

create table Time (numCadastro INTEGER NOT NULL,nome VARCHAR(30) NOT NULL,cidade VARCHAR(50) default ‘Vitória’,situacao INTEGER NOT NULL

);

R

Ai

Didi

Ni

CRIANDO RELAÇÕES EM BANCO DE DADOS As Regras de Integridade permitidas englobam:

Chaves primárias

Chaves estrangeiras

CHAVES PRIMÁRIAS

Toda tabela deve ter uma chave primária que pode ser simples ou composta.Simples usa apenas um atributo.Composta usa dois ou mais atributos.

O objetivo da chave primária é identificar unicamente entidades dentro de um conjunto de entidades.A chave primária nunca se repetirá. Ela é única.

Para criar uma chave primária basta usar a palavra chave primary key e entre parênteses colocar o nome dos campos que compõem a chave[constraint [identificado]] primary key (A1, A2, ...., AJ)

CHAVES PRIMÁRIAS

Criando uma tabela com chave primária:

create table NOME_TABELA (atrib1 <tipo> not null,atrib2 <tipo> not null,....,atribX <tipo>, primary key (atrib1, atrib2, ...)

);

CHAVES PRIMÁRIAS

Exemplos :create table cliente(

id integer not nullauto_increment,

nome varchar(45) not null,cpf varchar(20) not null,endereco varchar(100) not null,primary key (id)

);

CHAVES PRIMÁRIAS

create table agencia(

numAgencia integer not null,nome varchar(45) not null,endereco varchar(100) not null,fundos decimal(10,2) not null,constraint pk_agencia primary key (numAgencia)

);create table correntista(

idCliente integer not null,numAgencia integer not null,numConta integer not null,primary key (idCliente, numAgencia, numConta)

);

CHAVES ESTRANGEIRAS

O conceito de chave estrangeira se refere ao tipo de relacionamento entre as tabelas de dados do BD.

Uma chave estrangeira (foreign key) é a chave formada através de um relacionamento com a chave primária de outra tabela.A chave estrangeira é um campo que aponta para a chave

primária de outra tabela.

Ela define um relacionamento entre as tabelas e pode ocorrer repetidas vezes.A chave estrangeira pode repetir em uma tabela.

CHAVES ESTRANGEIRAS

Caso a chave primária seja composta na origem, a chave estrangeira também será.

A finalidade da chave estrangeira é garantir a integridade dos dados referenciais.Apenas serão permitidos valores que aparecem ou que

supostamente vão aparecer na Base de Dados.

CHAVES ESTRANGEIRAS

Exemplo

O relacionamento entre AGENCIA e CONTA é feita via atributo numAgenciaEm AGENCIA é a chave primária, logo seu valor é únicoEm CONTA é uma chave estrangeira, portanto seu valor

pode aparecer diversas vezes

Tabela AGENCIA Tabela CONTA- numAgencia (PK)- nome- endereco- fundos

- numeroConta- numAgencia (FK)- saldo

CHAVES ESTRANGEIRAS

Para se definir uma chave estrangeira deve usar a seguinte sintaxe:

[constraint [identificador]] foreign key (atrib1, atrib2, ...) references nome_tabela [(atribX, atribY, ...)] [on delete opção] [on update opção]

ou seja, deve-se referenciar os campos da tabela corrente (atrib1, atrib2, ...) com os atributos a que estão relacionados na tabela nome_tabela (atribX, atribY, ...)

Se os atributos da tabela corrente forem iguais aos atributos da tabela referenciada, pode-se omitir os nomes desses atributos.

CHAVES ESTRANGEIRAS

Exemplo

create table agencia ( numAgencia integer not null, nome varchar(45) not null, endereco varchar(100) not null, fundos decimal(10,2) not null, primary key (numAgencia));

create table conta ( numConta integer not null, numAgencia integer not null, saldo decimal(10,2) not null , primary key (numConta, numAgencia), foreign key (numAgencia)

references agencia(numAgencia));

CHAVES ESTRANGEIRAS

Algumas ações podem estar associadas a chaves estrangeiras

Essas ações ocorrem quando se atualiza ou se remove um valor que é chave PRIMÁRIA na tabela referenciada pela chave estrangeira.

CHAVES ESTRANGEIRAS

ON UPDATE:A cláusula ON UPDATE indica que quando uma atualização

é executada sobre uma linha na tabela referenciada, uma das seguintes ações será executada:○ NO ACTION (RESTRICT)

A atualização de uma chave primária pode ser abortada caso um registro em uma tabela referenciada tenha um valor mais antigo.

Este parâmetro é o default quando esta cláusula não recebe nenhum parâmetro.

Exemplo:Tentar atualizar o código de um cliente quando esse cliente já

possui um pedido.Um erro é gerado!

CHAVES ESTRANGEIRAS

ON UPDATE:○ CASCADE (Em Cascata)

Quando o campo da chave primária é atualizado, registros na tabela referenciada são atualizados em cascata.

Exemplo:Tentar atualizar o código de um cliente quando esse cliente já

possui um pedido.Nenhum erro é gerado, pois o código do cliente também será

atualizado na tabela PEDIDO.

CHAVES ESTRANGEIRAS

ON DELETE:Esta cláusula indica que quando uma exclusão é executada

sobre uma linha na tabela referenciada, uma das seguintes ações será executada:○ NO ACTION (RESTRICT)

Quando um campo de chave primária está para ser deletado, a exclusão será abortada caso o valor de um registro na tabela referenciada seja mais velho.

Este parâmetro é o default quando esta cláusula não recebe nenhum parâmetro.

Exemplo:Tentar excluir um cliente que possui um pedidoUm erro será gerado!

CHAVES ESTRANGEIRAS

ON DELETE:○ CASCADE

Quando um registro com a chave primária é excluído, todos os registros relacionados com aquela chave são excluídos.

○ SET NULLQuando um registro com a chave primária é excluído, os respectivos

campos na tabela relacionada recebem NULL.○ SET DEFAULT

Quando um registro com a chave primária é excluído, os campos respectivos da tabela relacionada recebem o valor DEFAULT.

CHAVES ESTRANGEIRAS

Exemplo:

create table conta ( numConta integer not null, numAgencia integer not null, saldo decimal(10,2) not null , primary key (numConta, numAgencia), foreign key (numAgencia) references agencia(numAgencia)

on update cascadeon delete set null

);

ALTERANDO RELAÇÕES

O comando alter table é usado para alterar a estrutura de uma relação existente.

Ele permite que o usuário faça a inclusão, exclusão de atributos e alteração de restrições nos atributos em uma tabela.

A forma geral para o comando alter table é a seguinte:

alter table <tabela> <add, drop column, alter column> <coluna>

[<tipo_coluna>];

onde add, adiciona uma coluna; drop, remove uma coluna; e alter, modifica algo em uma tabela.

ALTERANDO RELAÇÕES

Exemplos:create table agencia (

nome_agencia varchar(20) not null,cidade_aencia varchar(20) default '',fundo integer(10),primary key (nome_agencia)

); Inserindo nova coluna chamada cep como char(9);

alter table agencia add cep char(9); Inserindo uma coluna chamada num como um valor inteiro

e com zero como valor padrão;alter table agencia add num decimal default 0;

ALTERANDO RELAÇÕES

Exemplos:

nome_agencia varchar(20)

cidade_agencia varchar(20)

fundos double

cep char(9) num int

Redwood Palo Alto 2100000 <null> 0

Perryridge Horseneck 1700000 <null> 0

Mianus Horseneck 400000 <null> 0

Round Hill Horseneck 8000000 <null> 0

Pownal Bennington 300000 <null> 0

North Town Rye 3700000 <null> 0

Brighton Brooklyn 7100000 <null> 0

Down Brooklyn 9000000 <null> 0

ALTERANDO RELAÇÕES

Exemplos: create table agencia (

nome_agencia varchar(20) not null,cidade_aencia varchar(20) default '',fundo integer(10),cep char(9),num integer default 0, primary key (nome_agencia)

); Excluindo a coluna CEP

alter table agencia drop column cep; Excluindo a coluna fundos

alter table agencia drop column fundos;

ALTERANDO RELAÇÕES

Exemplos:

nome_agencia varchar(20)

cidade_agencia varchar(20)

num int

Redwood Palo Alto 0

Perryridge Horseneck 0

Mianus Horseneck 0

Round Hill Horseneck 0

Pownal Bennington 0

North Town Rye 0

Brighton Brooklyn 0

Down Brooklyn 0

ALTERANDO RELAÇÕES

Alterando restrições numa tabela. Exemplos:

alter table agencia alter column cod set not null;alter table agencia alter column cod set default 0;

É possível inserir uma chave estrangeira numa tabela depois de criada usando o comando:

alter table tabela add foreign key (campo) references tabela(campo);

APAGANDO RELAÇÕES

Para apagar uma tabela do banco de dados use o comando:

drop table <nome>; onde <nome> é o nome da tabela.

O comando drop table remove todas as informações da relação no banco de dados.

Exemplo: Para eliminar uma tabela chamada EMPREGADO, fazemos:

drop table EMPREGADO;

APAGANDO RELAÇÕES

OBSERVAÇÃO:Existem casos em que a chave primária da tabela que se

está apagando é utilizada como chave estrangeira ou como chave primária composta em diversas tabelas que devem ser devidamente corrigidas.

Este processo não é assim tão simples pois, a exclusão da tabela EMPREGADO implica na alteração do projeto físico de diversas tabelas.

Isto acaba implicando na construção de uma nova base de dados.

CRIANDO ÍNDICES

Um índice pode ser criado em uma tabela para encontrar dados mais rápido e eficiente, sem a necessidade de percorrer toda a tabela.

Os índices não podem ser visualizados pelos usuários. Observação: Atualizar uma tabela com índice leva mais

tempo do que atualizar uma tabela sem índice.Portanto, apenas crie índices em colunas (e tabelas) que

serão usadas mais para consultas do que inserção/exclusão.

CRIANDO ÍNDICES

Para criar um índice:

create index nomeIndice on nomeTabela (nomeColuna)

Para apagar um índice*:

alter table nomeTabela drop index nomeIndice

* Sintaxe usada no MySQL.

BIBLIOGRAFIA

SILBERSCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S.. Sistema de banco de dados. 3 ed. São Paulo: Pearson Makron Books, 2005, Cap. 4