DDL em SQL
Álvaro Vinícius de Souza Coêlho
[email protected]
O Que é DDL
• DDL – Data Definition Language
• Conjunto de comandos utilizado pelo SQL
(ou por outras linguagens) para estabelecer
(estruturas de) dados
• Dados em Bancos de Dados Relacionais ->
Tabelas e Relações entre tabelas
Criando Tabelas
• Create Table
• Formato:
Create table NomeTabela (
NomeColuna TipoDado <RestriçãoColuna>,
...,
<RestriçãoTabela>
)
Criando Tabelas
• Onde:
– NomeTabela é o nome da tabela a ser criada
– NomeColuna é o nome da coluna a ser criada
– TipoDado é o tipo de dado armazenado naquela
coluna
Criando Tabelas
• Onde:
– RestriçãoColuna é uma restrição (constraint)
de valores possíveis para uma coluna específica
– RestriçãoTabela é uma restrição (constraint) de
valores possíveis para algumas colunas (não
uma especificamente)
Tipos de Dados
• Em SQL há alguns tipos de dados padrão
• E uma infinidade de tipos específicos de
cada fabricante (Oracle, Microsoft SQL
Server, Informix, DB2, etc.)
Tipos de Dados
• Os tipos mais comuns:
– Number(i,d) onde i é o número de dígitos na
parte inteira e d número de dígitos na parte
decimal Ex: Number(6,2)
– Char(n) onde n é o número fixo de caracteres
reservados
– VarChar(n) onde n é o número máximo
(variável) de caracteres reservados
Tipos de Dados
• Os tipos mais comuns:
– Date (ou DateTime) que armazena dados do
tipo Data e Hora – normalmente sem distinção
• O formato de armazenamento é interno. Os SGBDs
oferecem métodos de se escrever e ler datas via
funções de conversão ou conversões automáticas a
partir de caracteres
Tipos de Dados
• Os tipos mais comuns:
– Long (ou Blob) para armazenar dados especiais
• Imagens, documentos de texto, dados multimídia,
etc.
– Devem ser interpretados por aplicativos
específicos (RealPlayer, Paint, Netscape, etc.)
• O SGBD apenas armazena: Não ordena, não usa
como chave, não compara
Tipos de Dados
• Tipos específicos
• De acordo com o fabricante podem surgir
diversos outros tipos
– Memo – Textos longos
– Integer, Real, Money, etc. – variações de
Number
– Hiperlinks – Para Internet
Exemplo Create Table
Create Table Aluno (
Matricula char(11),
RG char(11),
Nome varchar(50),
DataNasc date,
PontosVest number(4,0)
)
Chave Primária
• Uma tabela, em Bancos de Dados Relacionais,
deve ter pelo menos uma coluna que identifique
unicamente cada linha
• Chama-se a esta coluna Chave Primária
• Uma Chave primária
– Não se repete
– Não pode ser Nulo
– É automaticamente indexada pelo BD
Chave Primária
• Declara-se uma chave primária com uma
restrição
– De coluna, caso a chave seja uma única coluna
– De tabela, caso a chave seja múltipla (mais de
uma coluna)
• Em caso de chaves múltiplas, a tupla de
colunas tem que ser única e nenhuma delas
pode ser nula
Chave Primária
• Chaves Naturais e Artificiais
• Em alguns projetos de BD alguns atributos
se candidatam a chave primária
naturalmente
– Matrícula, RG, Placa, CPF, Código, etc.
• Em outros casos a chave pode precisar ser
gerada pelo sistema
Chave Primária
• Chaves Geradas (Artificiais)
• Uma coluna é criada, e a cada nova linha
incluída na tabela, um valor em seqüência é
dado automaticamente a ela
– Nunca se repete
– Nunca será nulo
Chave Primária
• No exemplo de aluno
– Matrícula pode ser uma chave primária
– RG também
• Considerando um domínio de Controle
Acadêmico, Matrícula parece mais razoável
– RG fica como chave alternativa (também é
única, mas não primária)
Chave Primária
Create Table Aluno (
Matricula char(11) primary key,
RG char(11),
Nome varchar(50),
DataNasc date,
PontosVest number(4,0)
)
Chave Primária
• Caso a chave seja formada por mais de uma
coluna, deve ser explicitada numa restrição
de tabela
• Numa tabela do INSS que registra os
funcionários na RAIS a identificação de um
trabalhador poderia ser feita com:
Primary key (CNPJ,Matricula)
Chave Alternativa
• Caso se deseje estabelecer uma chave
alternativa, mas sem as restrições de uma
chave primária
– Por exemplo, RG não deve se repetir (único)
mas eventualmente pode ser nulo
Chave Alternativa
Create Table Aluno (
Matricula char(11) primary key,
RG char(11) unique,
Nome varchar(50),
DataNasc date,
PontosVest number(4,0)
)
Demais Restrições
• Pode-se estabelecer ainda os seguintes tipos
de restrições numa tabela
–
–
–
–
Checagem de valores
Permissão ou não de valores nulos
Valores padrão
Referências a chaves de outras tabelas (Chaves
Estrangeiras)
Demais Restrições
• Checagem de Valores
• A cláusula Check verifica os valores
possíveis para um conjunto de colunas
• Check(Condição)
• Uma linha só é inclusa numa tabela se todas
as condições estabelecidas nas cláusulas
Check são satisfeitas
Demais Restrições
Create Table Aluno (
Matricula char(11) primary key,
RG char(11) unique,
Nome varchar(50),
Sexo char(1),
DataNasc date,
PontosVest number(4,0),
Check (Sexo in (‘M’, ‘F’)
)
Demais Restrições
• Notar que Check apareceu como restrição
de Tabela, apesar de ser de uma coluna
apenas
• Check não precisa se restringir a testes de
apenas uma coluna
• Caso haja uma coluna NumReservista,
válida apenas para rapazes:
Demais Restrições
Create Table Aluno (
Matricula char(11) primary key,
...
Sexo char(1),
NumReservista char(15),
...
Check (
(Sexo = ‘M’ and NumReservista
is not null) or
(Sexo = ‘F’ and NumReservista
is null))
)
Demais Restrições
• Não Nulo
• Para obrigar que uma coluna tenha sempre
um valor há duas alternativas
– Estabelecer como Chave Primária
– Checa-la (Check) como não nula (Not Null)
• A segunda opção pode ser simplificada
numa restrição de coluna
Demais Restrições
Create Table Aluno (
Matricula char(11) primary key,
RG char(11) unique,
Nome varchar(50) not null,
DataNasc date not null,
PontosVest number(4,0) not null,
)
Demais Restrições
• Valores Default
• Pode-se estabelecer um valor padrão para
uma coluna. Neste caso, caso ela não tenha
sido valorada num comando Insert ela
receberá o valor definido por default
Demais Restrições
Create Table Curso (
Codigo Char(10) primary key,
Nome Varchar(20) unique not
null,
NumSemestres number(2)
default 8
)
Referências
• Chaves Estrangeiras
• Quando uma coluna de uma tabela é dita
chave estrangeira ela:
– Se refere a uma linha de outra tabela
– Só pode receber como valor uma cópia de
alguma chave primária da tabela referenciada
Referências
• Para identificar que um aluo é de um
determinado curso, por exemplo:
• Uma coluna CodCurso pode ser criada
• Estabelece-se que esta coluna é chave
estrangeira da tabela Curso
– Só pode receber um código de curso existente
– Vai “apontar” para este curso
Referências
Create Table Aluno (
Matricula char(11) primary key,
RG char(11) unique,
Nome varchar(50) not null,
DataNasc date not null,
PontosVest number(4,0) not null,
CodCurso Char(10) references Curso
)
Referências
• Não é necessário se estabelecer quem é a
coluna na tabela Curso – Será a chave
primária
• Os tipos dos dados tem que ser compatíveis
(não se pode usar Data numa tabela e
Caractere noutra)
Referências
• Pode-se desejar que a relação seja
obrigatória ou não
– Um aluno pode existir sem estar em nenhum
curso?
• Caso a resposta seja Não, deve-se impor
uma restrição a mais em CodCurso
Referências
Create Table Aluno (
Matricula char(11) primary key,
RG char(11) unique,
Nome varchar(50) not null,
DataNasc date not null,
PontosVest number(4,0) not null,
CodCurso Char(10) references Curso
Not Null
)
Referências
• Restrições de chave estrangeira podem ser
feitas usando-se mais de uma coluna
• Neste caso usa-se uma restrição de tabela
Referências
• No exemplo do INSS, caso se deseje
referenciar numa tabela Rendimentos a
tabela de trabalhadores, cuja chave primária
é o par (CNPJ, Matricula)
Foreign key (RendCNPJ,
RendMatricula) references
Funcionarios(Cnpj, Matricula)
DDL em SQL.
FIM!
Anita Malfatti
“Estatísticas provam que a mortalidade no exército
aumenta sensivelmente em tempo de guerra”
Alphonse Allais
Download

DDL_SQL - GEOCITIES.ws