agbd aula4 sql_ddl
TRANSCRIPT
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.
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.
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.
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.
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
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)
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.
Comandos SQL
• Os comandos SQL para definição de dados são:• CREATE
• DROP
• ALTER
O comando CREATE
• O comando CREATE pode ser utilizado para criaçãode:• Tabelas (relações)
• Domínios próprios
• View
• Entre outros.
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.
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.
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)
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.
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));
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
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));
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
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.
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.
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);
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.
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”)));
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.
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;
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.
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
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;
Escolha do SGBD
• Para está disciplina o SGBD foi escolhido o MySQL.
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
Criação do BD
• Criação do banco de dados: • create database nome_do_banco;
• Usando o banco de dados: • use nome_do_banco;
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.
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.
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.
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)
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)
Í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.
Í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
Í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.
Í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,...)
Í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));
Índices
• Caso a tabela já existir:
CREATE INDEX idx_CLIENTES_CODIGO ON CLIENTES(Codigo);
• Para alterar:
ALTER TABLE TESTE ADD INDEX(campo1, campo2);
Í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.
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)
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.
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.