DDL em SQL

Post on 21-Jan-2016

73 views 1 download

description

DDL em SQL. Álvaro Vinícius de Souza Coêlho alvaro.degas@terra.com.br. O Que é DDL. DDL – Data Definition Language Conjunto de comandos utilizado pelo SQL (ou por outras linguagens) para estabelecer (estruturas de) dados - PowerPoint PPT Presentation

Transcript of DDL em SQL

DDL em SQL

Álvaro Vinícius de Souza Coêlhoalvaro.degas@terra.com.br

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!

“Estatísticas provam que a mortalidade no exército aumenta sensivelmente em tempo de guerra”

Alphonse AllaisAnita Malfatti