agbd aula4 sql_ddl

47
Arquitetura e Gerenciamento de Banco de Dados SQL – (DDL) Profª Débora Souza [email protected]

Upload: daniel-fernandes-costa

Post on 15-Apr-2017

338 views

Category:

Engineering


0 download

TRANSCRIPT

Page 1: Agbd aula4 sql_ddl

Arquitetura e Gerenciamento de Banco

de Dados

SQL – (DDL)

Profª Débora Souza

[email protected]

Page 2: Agbd aula4 sql_ddl

Introdução

• SQL (Structured Query Language) é um padrão delinguagem de consulta comercial.

• SQL usa uma combinação de construtores emálgebra relacional e cálculo relacional.

• Embora o próprio nome se refira a SQL como umalinguagem de consulta, ela possui outros recursos.

Page 3: Agbd aula4 sql_ddl

Introdução

• Modelo relacional encontra-se padronizado pelaindústria de informática. Ele é chamado de padrãoSQL.

• O padrão SQL define precisamente uma interfaceSQL para a definição de:• Tabelas

• Operações sobre tabelas (seleção, junção e outras); e

• Definição de regras de integridade de bancos de dados.

Page 4: Agbd aula4 sql_ddl

Introdução

• A SQL é implementada em praticamente todos ossistemas de bancos de dados relacionais existentes.

• Fabricantes de diferentes SGBDs apresentamvariações de SQL.• Ex.: PL/SQL

• A existência de padrões facilita ainteroperabilidade.

Page 5: Agbd aula4 sql_ddl

Histórico

• A IBM desenvolveu a versão original da SQL,originalmente chamada Sequel, no início da décadade 1970.• Parte do projeto System R.

• Com a evolução da linguagem, está passou a serchamada de SQL (Structured Query Language).

• A SQL se estabeleceu como linguagem padrão debanco de dados relacional.

Page 6: Agbd aula4 sql_ddl

Histórico

• Em 1986 o ANSI e a ISO publicaram um padrão SQLo SQL-86. Apos este, alguns outros surgiram:• SQL-89

• SQL-92

• SQL:1999

• SQL:2003

Page 7: Agbd aula4 sql_ddl

Partes da SQL

• A SQL possui várias partes:• Linguagem de definição de dados (DDL)• Linguagem de manipulação de dados (DML)• Integridade (DDL)• Definições de visões (DDL)• Controle de transações (DDL) - Especificar o início e o

fim de transações.• SQL embutida e SQL dinâmica - Definem como as

instruções SQL podem ser incorporadas dentro daslinguagens de programação de finalidade geral (C, C++,Java).

• Autorização (DDL)

Page 8: Agbd aula4 sql_ddl

Tipos de Domínios Básicos

• char(n) - string de caracteres de tamanho fixo n.

• varchar(n) - string de caracteres de tamanho variável, com tamanho n máximo.

• int - subconjunto finito de inteiros que é dependente da máquina.

• smallint - inteiro pequeno (dependente da máquina).

• numeric(p,d) - número de ponto fixo com precisão especificada. • Ex.: numeric(3,1) aceita o valor 33,1, mas não aceita 333,1.

• real, double precision - números de ponto flutuante.

• float(n) - número de ponto flutuante, com precisão de pelo menos n dígitos.

Page 9: Agbd aula4 sql_ddl

Comandos SQL

• Os comandos SQL para definição de dados são:• CREATE

• DROP

• ALTER

Page 10: Agbd aula4 sql_ddl

O comando CREATE

• O comando CREATE pode ser utilizado para criaçãode:• Tabelas (relações)

• Domínios próprios

• View

• Entre outros.

Page 11: Agbd aula4 sql_ddl

O Comando CREATE

• Para criação de tabelas (relações):• CREATE TABLE : especifica uma nova relação (tabela). Cada

relação possui um nome e um conjunto de atributos(colunas), bem como o tipo deste e possíveis restrições.

• Sintaxe:CREATE TABLE nome (A1 D1, A2 D2, ..., An Dn,

<regra de integridade1>,...,<regra de integridadeK> )

• Onde nome é o nome da relação, Ai é um nome de atributo eDi é o domínio do atributo Ai.

Page 12: Agbd aula4 sql_ddl

O Comando CREATE

• As definições dos atributos têm o seguinte formato:• Atributo Tipo [NOT NULL [UNIQUE]] [DEFAULT valor]

[AUTO_INCREMENT]

• Onde:• Atributo: nome do atributo que está sendo definido.• Tipo: domínio do atributo.• NOT NULL: expressa que o atributo não pode receber valores

nulos.• UNIQUE: indica que o atributo tem valor único na tabela.• DEFAULT valor: indica um valor a ser atribuído ao atributo

caso não seja determinado um valor na inserção.• AUTO_INCREMENT : utilizado para automatizar um código,

geralmente a chave primária.

Page 13: Agbd aula4 sql_ddl

O Comando CREATE

• Existem diversas restrições de integridadepermitidas, entre elas:• Integridade de chave:

• PRIMARY KEY (atributos chave)

• Integridade referencial:• FOREIGN KEY (atributos) REFERENCES tabela_base(atributos)

• Integridade de domínio:• CHECK (condição)

Page 14: Agbd aula4 sql_ddl

Integridade de Chave

• Definida com a cláusula PRIMARY KEY.

• Não são permitidos valores duplicados em umachave primária, ou seja, a chave primária é única.

• Geralmente, não é possível alterar chavesprimárias.

Page 15: Agbd aula4 sql_ddl

Integridade de Chave

• Exemplo da construção de uma relação utilizandochave primária.

CREATE TABLE empregado

(matricula INT AUTO_INCREMENT,

nome VARCHAR(40) NOT NULL,

sexo CHAR,

salario NUMERIC(10,2),

depto INT NOT NULL,

PRIMARY KEY (matricula));

Page 16: Agbd aula4 sql_ddl

Integridade Referencial

• Definida com a cláusula FOREIGN KEY

• Não é possível definir chaves estrangeiras semchaves primárias (exclusivas) existentes.

• Uma chave estrangeira deve corresponder a umvalor de chave primária existente

Page 17: Agbd aula4 sql_ddl

Integridade Referencial

• Exemplo da construção de uma relação utilizando chave estrangeira.

CREATE TABLE empregado

(matricula INT AUTO_INCREMENT,

...

FOREIGN KEY (depto)

REFERENCES

departamento(codDep));

Page 18: Agbd aula4 sql_ddl

Integridade Referencial

• A cláusula FOREIGN KEY inclui regras deremoção/atualização:• FOREIGN KEY (nome_coluna) REFERENCES nome_tabela

[ON DELETE {RESTRICT|CASCADE|SET NULL| SETDEFAULT}]

[ON UPDATE {RESTRICT|CASCADE|SET NULL| SETDEFAULT}]

• Supondo que T2 tem uma chave estrangeira paraT1, vejamos as cláusulas ON DELETE e ON UPDATE

Page 19: Agbd aula4 sql_ddl

Integridade Referencial

• ON DELETE:• RESTRICT: (default) significa que uma tentativa de se

remover uma linha de T1 falhará se alguma linha em T2combina com a chave.

• CASCADE: remoção de uma linha de T1 implica emremoção de todas as linhas de T2 que combina com achave de T1.

• SET NULL: remoção de T1 implica em colocar NULL emtodos os atributos da chave estrangeira de cada linha deT2 que combina.

• SET DEFAULT: remoção de linha em T1 implica emcolocar valores DEFAULT nos atributos da chaveestrangeira de cada linha de T2 que combina.

Page 20: Agbd aula4 sql_ddl

Integridade Referencial

• ON UPDATE• RESTRICT: (default) update de um atributo de T1 falha se

existem linhas em T2 combinando.

• CASCADE: update de atributo em T1 implica que linhasque combinam em T2 também serão atualizadas.

• SET NULL: update de T1 implica que valores da chaveestrangeira em T2 nas linhas que combinam são postospara NULL.

• SET DEFAULT: update de T1 implica que valores da chaveestrangeira de T2 nas linhas que combinam terãovalores default aplicados.

Page 21: Agbd aula4 sql_ddl

Integridade Referencial

• Exemplo da construção de uma relação utilizandochave estrangeira.

CREATE TABLE empregado

(matricula INT AUTO_INCREMENT,

...

FOREIGN KEY (depto)

REFERENCES

departamento(codDep) ON UPDATE CASCADE);

Page 22: Agbd aula4 sql_ddl

A Cláusula CHECK

• Define uma condição que cada linha devesatisfazer.

• Uma única coluna pode ter várias restrições CHECKque fazem referência à coluna na sua definição.

• As restrições CHECK podem ser definidas no nívelda coluna ou da tabela.

Page 23: Agbd aula4 sql_ddl

A Cláusula CHECK

• Exemplo da construção de uma relação utilizando acláusula CHECK.

CREATE TABLE estudante (

nome char(15) NOT NULL,

id_estudante char(10) NOT NULL,

nivel char(15) NOT NULL,

PRIMARY KEY (id_estudante),

CHECK (nivel IN (“Bacharelado”, ”Mestrado”, ”Doutorado”)));

Page 24: Agbd aula4 sql_ddl

O Comando CREATE – Exemplo

CREATE TABLE empregado

(matricula INT NOT NULL AUTO_INCREMENT,

nome VARCHAR(40) NOT NULL,

sexo CHAR,

salario NUMERIC(10,2),

depto INT NOT NULL,

PRIMARY KEY (matricula),

CHECK (salario >= 724,00),

FOREIGN KEY (depto)

REFERENCES

departamento(codDep) ON UPDATE CASCADE ON DELETE CASCADE);

Observação: este exemplo supõe que a tabela departamento já exista.

Page 25: Agbd aula4 sql_ddl

O Comando DROP

• Remove uma relação do banco de dados.• Exclui todas as informações sobre a relação removida.

• Sintaxe:DROP TABLE [IF EXISTS] nome;

Onde:• IF EXISTS: preveni um erro de ocorrer se a relação não existir.• nome: nome da relação a ser removida.

• Exemplo:• DROP TABLE IF EXISTS empregado;

Page 26: Agbd aula4 sql_ddl

O Comando ALTER

• Permite alterar a estrutura da tabela existente.• Adicionar ou deletar colunas, alterar o tipo de coluna

existentes, ou renomear coluna ou tabelas, entre outros.

• Os novos atributos terão valores nulos em todas aslinhas.

• A inclusão de uma coluna requer a especificação do seutipo de dado.• Está não pode ser definida como NOT NULL.

Page 27: Agbd aula4 sql_ddl

O Comando ALTER

• Sintaxe:• ALTER TABLE nome_relação

Opção Descrição

ADD [COLUMN] Adiciona uma ou mais colunas

CHANGE [COLUMN] Altera o nome da coluna

MODIFY [COLUMN] Altera o domínio da coluna

DROP [COLUMN] Exclui uma coluna

RENAME [TO] Renomeia a Tabela

Tabela 1 – Algumas das especificações de ALTER TABLE

Page 28: Agbd aula4 sql_ddl

O Comando ALTER

• Exemplos:• ALTER TABLE nome_tbl

RENAME TO novo_nome;

• ALTER TABLE clientes DROP email;

• ALTER TABLE tarefa

ADD COLUMN complete DECIMAL(2,1)

AFTER description;

Page 29: Agbd aula4 sql_ddl

Escolha do SGBD

• Para está disciplina o SGBD foi escolhido o MySQL.

Page 30: Agbd aula4 sql_ddl

Escolha do SGBD

• O download do MySQL pode ser feito através dosite:• http://dev.mysql.com/downloads/

• Nesta disciplina vamos utiliza-lo através do sistemaoperacional Ubuntu.• Para fazer o acesso é necessário pelo terminal digite:

• mysql -uroot -p

Page 31: Agbd aula4 sql_ddl

Criação do BD

• Criação do banco de dados: • create database nome_do_banco;

• Usando o banco de dados: • use nome_do_banco;

Page 32: Agbd aula4 sql_ddl

Exercício

1. Criar três relações baseadas no funcionamentodo IFAL.• Uma das relações deve conter no mínimo 4 domínios de

atributos diferentes.• Cada relação deve conter ao menos uma regra de

integridade.

2. Escolha uma das relações e faça no mínimo 3alterações diferentes, sendo uma de cada vez.

3. Pesquise a sintaxe completa para ALTER TABLE efaça, ao menos, 2 modificações diferentes na(s)tabela(s) a sua escolha.

Page 33: Agbd aula4 sql_ddl

Exercício

4. Crie uma relação cliente e a relação vendedor.5. Defina as relações a seguir usando SQL:

Fornecedor (codigo, nome, cidade)Venda (cod_venda, quantidade, data, cod_forn)

• Ser on delete – cascade• Ser on update – cascade

Peca (cod_peca, nome, descricao)

• É obrigatório que:• Todos os atributos das cinco relações não sejam nulos. • cod_venda seja auto incrementado pelo sistema.• quantidade seja maior que zero.• Nome da peça seja único.

Page 34: Agbd aula4 sql_ddl

Tipos Definidos pelo Usuário

• A SQL aceita duas formas de tipos de dados definidospelo usuário:• Tipos distintos; e• Tipos estruturados.

• É possível que vários atributos possuam o mesmo tipode dados.

• O tipos de dados definidos pelo usuário se propõe afazer algumas separações como comparar um valormonetário em dólares e em libras, por exemplo.

Page 35: Agbd aula4 sql_ddl

Tipos Definidos pelo Usuário

• A cláusula CREATE TYPE (SQL:1999) pode ser utilizadapara criação de um novo tipo.

Ex.: CREATE TYPE Dolar AS numeric (10,2) final CREATE TYPE Libra AS numeric (10,2) final

• Os tipos recém criados podem ser utilizados como tiposde atributos nas relações.

Ex.: CREATE TABLE Conta (num_conta char(10), nome_agenciavarchar(15), saldo Dolar)

Page 36: Agbd aula4 sql_ddl

Tipos Definidos pelo Usuário

• Anterior ao SQL:1999 a SQL possuia uma notaçãosemelhante chamada tipo de domínio (SQL-92).

• A cláusula em questão era CREATE DOMAIN.

Ex.: CREATE DOMAIN Dolar AS numeric (10,2)

Page 37: Agbd aula4 sql_ddl

Índices

• Utilizados para encontrar registros com um valorespecífico de uma coluna rapidamente.

• Sem um índice a procura de um registro ocorre deforma sequencial.

• Qual a implicação disto?• Quanto maior a tabela, maior será o custo.

Page 38: Agbd aula4 sql_ddl

Índices

• A utilização de índices torna a busca maisotimizada.• Não há necessidade de se varrer todos os registros.

• Como os Índices são Criados?• Automaticamente: Um índice exclusivo é criado

automaticamente quando você define uma restriçãoPRIMARY KEY ou UNIQUE em uma definição de tabela.

• Manualmente: Usuários podem criar índices não-exclusivos em colunas para acelerar o tempo de acessoàs linhas

Page 39: Agbd aula4 sql_ddl

Índices

• Quando não utilizar índices:• Quando a tabela for pequena.

• Quando as colunas não forem utilizadas com frequênciacomo uma condição na consulta.

• Quando a tabela for atualizada com frequência.

Page 40: Agbd aula4 sql_ddl

Índices

• Índices podem ser criados tanto no momento daconcepção da tabela quanto em uma tabela jáexistente.

• Sintaxe de criação de índices:

CREATE [UNIQUE|FULLTEXT] INDEX nome_indice

ON nome_tabela (index_col_name,...)

Page 41: Agbd aula4 sql_ddl

Índices

• Exemplos:CREATE TABLE CLIENTES(Codigo INT, Nome VARCHAR(50),

INDEX (Codigo));

CREATE TABLE TESTE(Nome VARCHAR(40) NOT NULL, INDEX Nome_indice (Nome(10)));

CREATE TABLE TESTE (id INT NOT NULL, ultimo_nomeCHAR(30) NOT NULL, primeiro_nome CHAR(30) NOT NULL, PRIMARY KEY (id), INDEX nome (ultimo_nome,

primeiro_nome));

Page 42: Agbd aula4 sql_ddl

Índices

• Caso a tabela já existir:

CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo);

• Para alterar:

ALTER TABLE TESTE ADD INDEX(campo1, campo2);

Page 43: Agbd aula4 sql_ddl

Índices

• Para eliminar um índice:DROP INDEX indice_nome ON tabela_nome

• Ex.: DROP INDEX

OBS.: Para excluir uma chave primária, o nome do índice ésempre PRIMARY, que deve ser especificado como umidentificador entre aspas porque PRIMARY é uma palavrareservada.

Page 44: Agbd aula4 sql_ddl

Exercício

• Elabore as relações a seguir conforme o solicitadonas regras.

Empregado(matricula, nome, salario, supervisor, depto)

Departamento(codDep, nome, gerente, dataIni)

Projeto(codProj, nome, local, depart)

Alocacao(matricula, codProj, horas)

Dependente(codDepend, matricula, nome, sexo)

Page 45: Agbd aula4 sql_ddl

Exercício

• Regras:• As chaves primárias das relações devem ser

automaticamente incrementadas pelo sistema.

• Nenhum dos atributos pode ser nulo, com exceção doatributo supervisor pertencente a relação Empregado.

• O nome do projeto e o nome do departamento devemser únicos.

• Quando nada for digitado para ser armazenado noatributo supervisor, na relação Empregado, “Não temsupervisor” deve ser escrito em seu lugar.

Page 46: Agbd aula4 sql_ddl

Exercício

• Qualquer atualização ou deleção deve ser feito emcascata pelo sistema.

• Na relação Empregado, o atributo nome deve serutilizado como um índice de tamanho 10.

• Crie um índice para a relação Empregado e inclua oatributo matricula como índice.

• Altere a relação Departamento de modo a incluir umíndice nos atributos nome e gerente.

• Altere a relação Dependente de modo a incluir umíndice nos atributos codDepend e matricula.

• Exclua o índice presente na relação Empregado.

Page 47: Agbd aula4 sql_ddl

Arquitetura e Gerenciamento de Banco

de Dados

SQL – (DDL)

Profª Débora Souza

[email protected]