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