Banco de Dados I
SQL – DDL
Frederico D. Bortoloti
[email protected]
Introdução
• Modelo relacional encontra-se
padronizado p
p
pela indústria de informática.
Ele é chamado de padrão SQL (Structured
Query Language)
• SQL usa uma combinação de construtores
em álgebra
á
relacional e cálculo
á
relacional
• Embora o próprio nome se refira a SQL
como uma linguagem de consulta, ela
possui outros recursos
Introdução
• O padrão SQL define precisamente uma
interface SQL para a definição de tabelas,
para as operações
õ sobre
b as mesmas
(seleção, projeção, junção e outras) e para a
d fi i ã d
definição
de regras d
de iintegridade
t id d d
de b
bancos
de dados
• A interface SQL é implementada em todos os
sistemas de bancos de dados relacionais
existentes
• A existência de padrões facilita a
interoperabilidade
Introdução
• Um SGBD necessita possuir duas
linguagens
– DDL (Data Definition Language) - Usada para
definir os esquemas, atributos, visões, regras
de integridade, índices, etc.
– DML (Data Manipulation Language) - Usada
para se ter acesso aos dados armazenados
no BD
• Exemplos de linguagens de consulta
– QUEL
– QBE
– SQL
Histórico
• A versão original de SQL foi desenvolvida pela
IBM
– Originalmente chamada de SEQUEL
– Parte do projeto System R
• Tornou-se a linguagem padrão para SGBD’s
relacionais
• Existem diversos padrões para SQL
–
–
–
–
ANSI SQL (SQL
ANSI-SQL
(SQL-86)
86)
IBM SQL (SQL-89)
ANSI/ISO SQL (SQL 92)
SQL-3 (SQL 99)
Partes do SQL
• SQL é dividido em diversas partes
– Linguagem
g g
de definição
ç de dados ((DDL)) –
proporciona comandos para a definição,
exclusão e modificação
ç de esquemas
q
de
relações e criação de índices
– Linguagem interativa de manipulação de
dados (DML) – linguagem de consulta
baseada na álgebra e no cálculo relacional de
tuplas, incluindo inserção, exclusão e
modificação de tuplas
Partes do SQL
– Incorporação DML (Embedded DML) – projetada
para aplicação em linguagens de programação
d uso geral,l como C
de
Cobol,
b l P
Pascal,
l F
Fortran
t
eC
– Definição de visões
– Autorização – definição de direitos de acesso a
relações e visões
– Integridade – especificação de regras de
integridade que os dados que serão
armazenados
d d
deverão
ã satisfazer
i f
– Controle de transações – comandos para
especificação de iniciação e finalização de
transações
Domínios
Tipos de Domínios em SQL-92
Tipo
p
Descrição
ç
Char(n) ou character String de tamanho fixo n
Varchar(n) ou
String de tamanho variável com
Character varying
tamanho máximo n
int ou integer
Número inteiro
Smallint
Inteiro pequeno
Numeric(p,d)
Número ponto fixo com precisão
definida pelo usuário. Com p
indicando o número de dígitos e d
indicando dos p dígitos os que
estão
ã à direita
di i do
d ponto decimal
d i l
real,
Ponto flutuante e ponto flutuante
double precision
de precisão dupla
Float(n)
Ponto flutuante com precisão
definida pelo usuário
Date
Data: aaaa/mm/dd
Time
Hora: hh:mm:ss
Comandos SQL – DDL
• Os comandos SQL para definição de
dados são:
– CREATE
– DROP
– ALTER
• SQL permite a criação de domínios
– CREATE DOMAIN nome_pessoa
nome pessoa char(20)
• depois nome_pessoa pode ser usado
como domínio
d í i d
de um atributo
t ib t qualquer
l
Comandos SQL – DDL
• CREATE TABLE:
TABLE especifica
ifi uma nova tabela
t b l
(relação), dando o seu nome e especificando as
colunas (atributos)
(atributos), cada uma com seu nome
nome,
tipo e restrições
• Sintaxe:
CREATE TABLE r (A1D1, A2D2, ..., ANDN,
<regra de
d iintegridade
t id d 1>,
...,
<regra de integridadeK> )
• Onde r é o nome da relação, Ai é um nome de
atributo e Di é o domínio do atributo Ai
Comandos SQL – DDL
• As definições dos atributos têm o seguinte
formato:
– atributo tipo [NOT NULL [UNIQUE]] [DEFAULT valor]
• Onde:
– atributo: nome do atributo que está sendo definido
– tipo_dado:
tipo dado: 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. Qualquer tentativa de se introduzir uma linha
na tabela contendo um valor igual ao do atributo será
rejeitada.
– DEFAULT valor: indica um valor a ser atribuído ao
atributo caso não seja determinado um valor na
inserção
Comandos SQL – DDL
• Regras de integridade (constraints)
– Integridade
g
de chave
• PRIMARY KEY (atributos chave)
– Integridade referencial
• FOREIGN KEY (atributos) REFERENCES
tabela base(atributos)
tabela_base(atributos)
– Integridade de domínio
• CHECK (condição)
Comandos SQL – DDL
CREATE TABLE
empregado
( nome VARCHAR(15)
NOT NULL,
matricula char(9) NOT
NULL,
dataNasc DATE
DATE,
endereco VARCHAR(30),
sexo CHAR,
CHAR
salario NUMERIC(10,2),
supervisor CHAR(9),
CHAR(9)
depto INT NOT NULL,
PRIMARY KEY (matricula),
CHECK (salario >= 0),
FOREIGN KEY (supervisor)
REFERENCES
empregado(matricula),
FOREIGN KEY (depto)
REFERENCES
departamento(codDep)
);
Comandos SQL – DDL
CREATE TABLE departamento
d
t
t
( nomeDep
VARCHAR(15) NOT NULL,
codDep
INT
NOT NULL,
gerente
g
CHAR(9)
( ) NOT NULL,
dataInicioGer DATE,
PRIMARY KEY(codDep),
UNIQUE (nomeDep),
FOREIGN KEY (gerente) REFERENCES
empregado(matricula)
);
Comandos SQL – DDL
CREATE TABLE estudante (
nome
char(15) NOT NULL
NULL,
id-estudante char(10) NOT NULL,
nivel
char(15) NOT NULL,
PRIMARY KEY (id-estudante)
(id-estudante),
CHECK (nivel IN (“Bacharelado”,
”Mestrado”, ”Doutorado”)))
Comandos SQL – DDL
• O valor NULL é um valor válido para todos
p em SQL,, salvo se o tipo
p for
os tipos
definido como NOT NULL
• Sabemos que uma chave primária não
pode conter valores nulos e repetições
– O SQL-89 obrigava os atributos da chave
primária a serem declarados como NOT
NULL e UNIQUE
– SQL-92 jjá assume essas condições,
ç
, sua
declaração é redundante
Comandos SQL – DDL
• Exercício: Defina as tabelas abaixo
usando SQL
– Fornecedor (codigo, nome, cidade)
– Venda (codForn
(codForn, codPeca
codPeca, quantidade,
quantidade data)
– Peca (codPeca, nome, descricao)
• É obrigatório que:
– quantidade seja maior que zero
– nome da peça não seja nulo
Comandos SQL – DDL
CREATE TABLE F
Fornecedor
d (
codigo CHAR(10) NOT NULL,
nome VARCHAR(50) NOT NULL,
cidade VARCHAR(80),
PRIMARY KEY(codigo));
Comandos SQL – DDL
CREATE TABLE V
Venda
d (
codForn CHAR(10) NOT NULL,
codPeca CHAR(10) NOT NULL,
quantidade INT NOT NULL,
data DATE NOT NULL,
PRIMARY KEY (codForn
(codForn,codPeca),
codPeca)
FOREIGN KEY (codForn) REFERENCES
Fornecedor(codigo),
Fornecedor(codigo)
CHECK (quantidade > 0));
Comandos SQL – DDL
CREATE TABLE P
Peca (
codPeca CHAR(10) NOT NULL,
nome VARCHAR(50) NOT NULL,
descricao VARCHAR(100),
PRIMARY KEY (codPeca))
Comandos SQL – DDL
• Chave estrangeira
g
– É definida com a cláusula FOREIGN KEY
– Alguns SGBD’s permitem que se use uma
notação
t ã abreviada
b i d para chave
h
estrangeira
t
i
quando esta é formada por um único atributo
CREATE TABLE Empregado (
matricula CHAR(9) NOT NULL,
nome VARCHAR(15) NOT NULL,
…
supervisor
p
CHAR(9)
( ) REFERENCES
Empregado(matricula),
codDep INT NOT NULL REFERENCES
Departamento(codigo),
Departamento(codigo)
…);
Comandos SQL – DDL
• U
Uma cláusula
lá
l FOREIGN KEY iinclui
l i regras d
de
remoção / atualização:
FOREIGN KEY (coluna) REFERENCES tabela
[ON DELETE {RESTRICT|CASCADE|SET
NULL| SET DEFAULT}]
[ON UPDATE {RESTRICT|CASCADE|SET
NULL| SET DEFAULT}]
• Supondo que T2 tem uma chave estrangeira
para T1, vejamos as cláusulas ON DELETE e
ON UPDATE
Comandos SQL – DDL
• ON DELETE
– RESTRICT: (default) significa que uma tentativa de
se remover uma linha de T1 falhará se alguma linha
em T2 combina com a chave
– CASCADE: remoção
ç de uma linha de T1 implica
p
em
remoção de todas as linhas de T2 que combina com
a chave de T1
– SET NULL
NULL: remoção
ã d
de T1 iimplica
li em colocar
l
NULL
em todos os atributos da chave estrangeira de cada
linha
a de T2 que co
combina
b a
– SET DEFAULT: remoção de linha em T1 implica em
colocar valores DEFAULT nos atributos da chave
estrangeira
t
i d
de cada
d lilinha
h d
de T2 que combina
bi
Comandos SQL – DDL
• 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
li h que combinam
linhas
bi
em T2 ttambém
bé serão
ã
atualizadas
– SET NULL: update de T1 implica que valores da
chave estrangeira em T2 nas linhas que combinam
são postos para NULL
– SET DEFAULT: update de T1 implica que valores da
g
de T2 nas linhas q
que combinam
chave estrangeira
terão valores default aplicados
Comandos SQL – DDL
• As restrições de integridade podem ter um
p
com a
nome e serem especificadas
cláusula CONSTRAINT
• Isto permite que possamos no futuro
eliminar (DROP) ou alterar (ALTER) o
constraint
• O exemplo a seguir mostra o uso de
CONSTRAINT, DEFAULT, ON DELETE e
ON UPDATE
Comandos SQL – DDL
CREATE TABLE empregado (
…
depto
INT NOT NULL DEFAULT 1,
CONSTRAINT empPK
PRIMARY KEY(matricula),
CONSTRAINT empSuperFK
FOREIGN KEY(supervisor) REFERENCES
empregado(matricula)
ON DELETE SET NULL ON UPDATE
CASCADE,
CONSTRAINT deptoFK
FOREIGN KEY (depto) REFERENCES
departamento(codigo)
ON DELETE SET DEFAULT ON UPDATE
CASCADE
)
Comandos SQL – DDL
• ALTER TABLE
– Permite que se altere os atributos de uma
determinada tabela ou que se adicione
novos atributos (evolução de esquemas)
– Os novos atributos terão valores nulos em
t d as linhas
todas
li h
– Ao incluirmos uma coluna devemos
especificar o seu tipo de dado, não
podendo esta coluna ser NOT NULL
p
Comandos SQL – DDL
• Sintaxe:
ALTER TABLE tabela_base
ADD atributo tipo_dado
• Exemplo:
ALTER TABLE Peca
ADD espessura INT
Comandos SQL – DDL
• Podemos remover um atributo usando a
sintaxe
ALTER TABLE tabela_base
DROP atributo [CASCADE|RESTRICT]
• CASCADE: remove todas as restrições
relativas ao atributo e visões que contêm o
atributo
• RESTRICT: não permite a remoção do
atributo se este é usado numa visão ou como
chave estrangeira numa outra tabela
Comandos SQL – DDL
• Exemplos:
ALTER TABLE empregado DROP endereco
CASCADE;
ALTER TABLE departamento ALTER gerente DROP
DEFAULT
ALTER TABLE departamento ALTER gerente
SET DEFAULT “333444555”
ALTER TABLE empregado
DROP CONSTRAINT empsuperFK;
ALTER TABLE empregado
ADD CONSTRAINT empsuperFK FOREIGN KEY
(supervisor) REFERENCES empregado (matricula)
Comandos SQL – DDL
• DROP TABLE
– Remove uma tabela-base do BD. Remove
tanto os dados quanto a definição da tabela
• Sintaxe
– DROP TABLE <nomeTabela>
• Exemplo
– DROP TABLE Peca
Comandos SQL – DDL
• Especificando
E
ifi
d ííndices
di
em SQL
– SQL possui comandos para criar e remover
índices em atributos de relações base (faz
parte da SQL DDL)
– Um índice é uma estrutura de acesso físico
que é especificado em um ou mais atributos
d um arquivo,
de
i
permitindo
iti d um acesso mais
i
eficiente aos dados
– Se
S os atributos
t ib t usados
d nas condições
di õ
d
de
seleção e junção de uma query são
indexados o tempo de execução da query é
indexados,
melhorado
Comandos SQL – DDL
• Ex.: Criar um índice no atributo nome da
ç Empregado
p g
relação
CREATE INDEX nomeEmpIndex
ON Empregado(nome)
• O default é ordem ascendente, se
quisermos uma ordem descendente
palavra chave DESC
adicionamos a p
depois do nome do atributo
Comandos SQL – DDL
• Para especificar a restrição de chave
palavra UNIQUE
usamos a p
CREATE UNIQUE INDEX matrEmpIndex
ON Empregado(matricula)
• Para eliminarmos um índice usamos o
comando DROP
– Ex. DROP INDEX nome
nome-indice
indice
Comandos SQL – DDL
• Restrições
R ti õ d
de d
domínios
í i
– Na criação de domínios, é possível aplicar constraints
para realizar algumas restrições
– Exemplos
CREATE DOMAIN turno
turno_trabalho
trabalho NUMERIC(5
NUMERIC(5,2)
2)
CONSTRAINT valor_teste_turno CHECK (VALUE >=
4,00))
CREATE DOMAIN numero_conta CHAR(10)
CONSTRAINT teste_nulo_numero_conta CHECK
(
(VALUE
NOT
O NULL))
CREATE DOMAIN tipo_conta CHAR(10)
CONSTRAINT teste_tipo_conta
t t ti
t CHECK (VALUE IN
(“Corrente”, “Poupança”))
Download

Banco de Dados I