SQL - Criação de Tabelas
André Restivo
Faculdade de Engenharia da Universidade do Porto
March 15, 2011
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 1 / 25
Sumário
1 Introdução
2 Tabelas
3 Colunas
4 Restrições de Integridade
5 Modificação de Tabelas
6 Domínios
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 2 / 25
Introdução
Structured Query Language
SQL - Linguagem para definir, manipular e questionar uma Base de
Dados Relacional.
SQL = DDL + DML + DQL + ...
◮ DDL = Data Definition Language.
◮ DML = Data Manipulation Language.
◮ DQL = Data Query Language.
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 3 / 25
Introdução
SQL Versões
1986 (SQL-86 e SQL-87) Publicado pela ANSI e ratificado pela ISO.
1989 (SQL-89)
1992 (SQL-92) Também conhecido como SQL2.
1999 (SQL:1999) Também conhecido como SQL 3. Inclui expressões
regultares, queries recursivas, gatilhos, tipos não escalares e
algumas funcionalidades orientadas a objectos.
2003 (SQL:2003) Inclui suporte a XML e colunas com numeração
automática.
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 4 / 25
Tabelas
Criação de Tabelas
Na sua forma mais básica é preciso apenas indicar o nome da tabela, os
nomes das várias colunas e o tipo de cada uma delas.
Exemplo
create table <nometabela> (
<nomecoluna> <tipocoluna >,
<nomecoluna> <tipocoluna >
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 5 / 25
Tabelas
Remoção de Tabelas
Para remover uma tabela basta indicar o seu nome.
Exemplo
drop table <nometabela >;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 6 / 25
Colunas
Tipos de Dados
Os tipos de dados mais utilizados são:
char(n) ou character(n) - Cadeia de caractéres de tamanho fixo n
varchar(n) ou character varying(n) - Cadeia de caractéres com
tamanho máximo n
text - Cadeia de caractéres sem tamanho definido
int ou integer - Números inteiros (4 bytes)
numeric(precisão, escala) - Números reais sem limite de tamanho
date e time - Data e hora
timestamp - Data + hora no mesmo campo
boolean - Valores booleanos
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 7 / 25
Colunas
Exemplo
Exemplo
create table empregado (
bi integer ,
nome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 8 / 25
Colunas
Valores por Omissão
Podem ainda ser definidos valores por omissão para cada coluna usando
a palavra-chave default.
Exemplo
create table empregado (
bi integer ,
nome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 ) d e f a u l t 0 ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 9 / 25
Restrições de Integridade
Restrições de Integridade
Em SQL podem ser definidas restrições de integridade de vários tipos.
Check
Not Null
Unique (Chaves candidatas não primárias)
Primary Key (Chaves candidatas)
Foreign Key (Chaves estrangeiras)
As restrições podem ser de dois tipos: de coluna (referem-se a apenas
uma coluna e são descritas em frente à coluna em causa) ou de tabela
(referem-se a mais do que a uma coluna e ficam separadas da definição
das colunas).
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 10 / 25
Restrições de Integridade
Restrições Check
As restrições do tipo CHECK permitem garantir que uma ou mais colunas
seguem uma determinada regra que pode ser expressa como uma
expressão matemática.
Exemplo
create table empregado (
bi integer ,
nome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 )
d e f a u l t 0
check ( s a l a r i o >= 0 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 11 / 25
Restrições de Integridade
Restrições Check
Podemos e devemos sempre dar nomes às restrições para que seja mais
fácil identificar a razão pela qual a inserção de dados falha.
Exemplo
create table empregado (
bi integer ,
nome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 )
d e f a u l t 0
c o n s t r a i n t s a l _ p o s i t i v o check ( s a l a r i o >= 0 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 12 / 25
Restrições de Integridade
Restrições Check
No caso da restrição abranger mais de uma coluna temos de usar uma
restrição de tabela.
Exemplo
create table empregado (
bi integer ,
nome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 ) ,
descontos numeric ( 9 , 2 ) ,
c o n s t r a i n t desconto_menor_salario
check ( desconto < s a l a r i o )
. . .
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 13 / 25
Restrições de Integridade
Restrições Not Null
Para garantir que uma coluna não vai ter valores nulos podemos usar
uma restrição do tipo not null.
Exemplo
create table empregado (
bi integer ,
nome varchar (256) not null ,
s a l a r i o numeric ( 9 , 2 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 14 / 25
Restrições de Integridade
Restrições Chave Primária
Podemos definir uma, e só uma, chave primária para a tabela.
Uma chave primária não pode conter valores nulos nem pode ter
valores repetidos.
Exemplo
create table empregado (
bi integer primary key ,
nome varchar (256) not null ,
s a l a r i o numeric ( 9 , 2 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 15 / 25
Restrições de Integridade
Restrições Chave Primária
Uma chave primária pode ser composta por mais de do que um
atributo.
Nesse caso temos de usar uma restrição de tabela.
Exemplo
create table empregado (
pnome varchar ( 2 5 6 ) ,
unome varchar ( 2 5 6 ) ,
s a l a r i o numeric ( 9 , 2 ) ,
datanascimento date ,
primary key ( pnome , unome )
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 16 / 25
Restrições de Integridade
Restrições Chaves Candidatas
Chaves candidatas alternativas podem ser definidas usando
restrições do tipo unique.
Estas restrições são equivalentes às restrições de chave primária
mas não obrigam os valores a ser não nulos.
Exemplo
create table empregado (
bi integer primary key ,
n i f integer unique ,
nome varchar (256) not null ,
s a l a r i o numeric ( 9 , 2 ) ,
datanascimento date
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 17 / 25
Restrições de Integridade
Restrições Chaves Candidatas
Tal como as outras restrições devem ser nomeadas e no caso de incluirem
mais de uma coluna devem ser declaradas como restrições de tabela.
Exemplo
create table empregado (
bi integer primary key ,
n i f integer c o n s t r a i n t n i f _ u n i c o unique ,
pnome varchar ( 2 5 6 ) ,
unome varchar ( 2 5 6 ) ,
. . .
c o n s t r a i n t nome_unico
unique ( pnome , unome )
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 18 / 25
Restrições de Integridade
Restrições Chaves Estrangeiras
Uma restrição do tipo foreign key permite declarar chaves
estrangeiras.
Uma chave estrangeira deve sempre referenciar uma chave primária
ou única.
Exemplo
create table empregado (
bi integer primary key ,
depid integer r e f e r e n c e s departamento ( id )
. . .
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 19 / 25
Restrições de Integridade
Restrições Chaves Estrangeiras
No caso da coluna (ou colunas) referenciada ser a chave primária de
outra tabela, podemos omitir o nome da coluna referenciada.
Exemplo
create table empregado (
bi integer primary key ,
depid integer r e f e r e n c e s departamento
. . .
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 20 / 25
Restrições de Integridade
Restrições Chaves Estrangeiras
No caso da chave estrangeira ser composta por mais de uma coluna
usa-se uma restrição de tabela:
Exemplo
create table empregado (
bi integer primary key ,
rua varchar ( 2 5 6 ) ,
cidade varchar ( 2 5 6 ) ,
foreign key ( rua , cidade ) r e f e r e n c e s rua ,
. . .
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 21 / 25
Restrições de Integridade
Restrições Chaves Estrangeiras
Devemos sempre definir o que acontece quando uma chave estrangeira é
violada durante uma operação de remoção ou alteração.
Exemplo
create table empregado (
bi integer primary key ,
depid integer r e f e r e n c e s departamento
on delete set null on update cascade ,
. . .
) ;
Neste exemplo estamos a definir que no caso de um departamento ser apagado
os empregados que pertençam a esse departamento devem ficar com o depid a
null. No caso da chave primária do departamento ser modificada, essa
modificação deve propagar-se e modificar também o depid da tabela empregado.
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 22 / 25
Restrições de Integridade
Restrições Chaves Estrangeiras
As alternativas para os valores de on delete e on update são:
◮ - restrict - Não deixa efectuar a operação
◮ - cascade - Apaga os registos associados (delete) ou altera a chave
estrangeira (update).
◮ - set null - A chave estrangeira passa a null.
◮ - set default - A chave estrangeira passa a ter o valor por omissão.
No caso de não ser possível corrigir o erro, as chaves estrangeiras
funcionam como se a restrição fosse do tipo restrict.
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 23 / 25
Modificação de Tabelas
Modificação de tabelas
Depois de criada, uma tabela pode ser modificada.
Exemplo
ALTER TABLE empregado ADD COLUMN nome character varying ( 6 4 ) ;
ALTER TABLE empregado DROP COLUMN nome ;
ALTER TABLE empregado ADD CHECK ( s a l a r i o > 0 ) ;
ALTER TABLE empregado ADD CONSTRAINT n i f _ u n i c o UNIQUE ( n i f ) ;
ALTER TABLE empregado ADD FOREIGN KEY ( depid ) REFERENCES departamento ;
ALTER TABLE empregado ALTER COLUMN s a l a r i o SET NOT NULL;
ALTER TABLE empregado DROP CONSTRAINT n i f _ u n i c o ;
ALTER TABLE empregado ALTER COLUMN s a l a r i o DROP NOT NULL;
ALTER TABLE empregado ALTER COLUMN s a l a r i o SET DEFAULT 0;
ALTER TABLE empregado ALTER COLUMN s a l a r i o DROP DEFAULT;
ALTER TABLE empregado RENAME COLUMN depid TO departamento_id ;
ALTER TABLE empregado RENAME TO f u n c i o n a r i o ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 24 / 25
Domínios
Domains
Os domains são tipos de dados definidos pelo utilizador de forma a
evitar repetições.
Um domain pode conter um valor default, restrições do tipo not null
e check.
Exemplo
CREATE DOMAIN d _ s a l a r i o integer
NOT NULL CHECK ( s a l a r i o > 0 ) ;
CREATE TABLE empregado (
bi integer ,
s a l a r i o d _ s a l a r i o
) ;
André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 25 / 25

sql-ddl_KHKDSFKSDHFKSDHFKSHDFKSDHFKSHF.pdf

  • 1.
    SQL - Criaçãode Tabelas André Restivo Faculdade de Engenharia da Universidade do Porto March 15, 2011 André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 1 / 25
  • 2.
    Sumário 1 Introdução 2 Tabelas 3Colunas 4 Restrições de Integridade 5 Modificação de Tabelas 6 Domínios André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 2 / 25
  • 3.
    Introdução Structured Query Language SQL- Linguagem para definir, manipular e questionar uma Base de Dados Relacional. SQL = DDL + DML + DQL + ... ◮ DDL = Data Definition Language. ◮ DML = Data Manipulation Language. ◮ DQL = Data Query Language. André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 3 / 25
  • 4.
    Introdução SQL Versões 1986 (SQL-86e SQL-87) Publicado pela ANSI e ratificado pela ISO. 1989 (SQL-89) 1992 (SQL-92) Também conhecido como SQL2. 1999 (SQL:1999) Também conhecido como SQL 3. Inclui expressões regultares, queries recursivas, gatilhos, tipos não escalares e algumas funcionalidades orientadas a objectos. 2003 (SQL:2003) Inclui suporte a XML e colunas com numeração automática. André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 4 / 25
  • 5.
    Tabelas Criação de Tabelas Nasua forma mais básica é preciso apenas indicar o nome da tabela, os nomes das várias colunas e o tipo de cada uma delas. Exemplo create table <nometabela> ( <nomecoluna> <tipocoluna >, <nomecoluna> <tipocoluna > ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 5 / 25
  • 6.
    Tabelas Remoção de Tabelas Pararemover uma tabela basta indicar o seu nome. Exemplo drop table <nometabela >; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 6 / 25
  • 7.
    Colunas Tipos de Dados Ostipos de dados mais utilizados são: char(n) ou character(n) - Cadeia de caractéres de tamanho fixo n varchar(n) ou character varying(n) - Cadeia de caractéres com tamanho máximo n text - Cadeia de caractéres sem tamanho definido int ou integer - Números inteiros (4 bytes) numeric(precisão, escala) - Números reais sem limite de tamanho date e time - Data e hora timestamp - Data + hora no mesmo campo boolean - Valores booleanos André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 7 / 25
  • 8.
    Colunas Exemplo Exemplo create table empregado( bi integer , nome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 8 / 25
  • 9.
    Colunas Valores por Omissão Podemainda ser definidos valores por omissão para cada coluna usando a palavra-chave default. Exemplo create table empregado ( bi integer , nome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) d e f a u l t 0 , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 9 / 25
  • 10.
    Restrições de Integridade Restriçõesde Integridade Em SQL podem ser definidas restrições de integridade de vários tipos. Check Not Null Unique (Chaves candidatas não primárias) Primary Key (Chaves candidatas) Foreign Key (Chaves estrangeiras) As restrições podem ser de dois tipos: de coluna (referem-se a apenas uma coluna e são descritas em frente à coluna em causa) ou de tabela (referem-se a mais do que a uma coluna e ficam separadas da definição das colunas). André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 10 / 25
  • 11.
    Restrições de Integridade RestriçõesCheck As restrições do tipo CHECK permitem garantir que uma ou mais colunas seguem uma determinada regra que pode ser expressa como uma expressão matemática. Exemplo create table empregado ( bi integer , nome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) d e f a u l t 0 check ( s a l a r i o >= 0 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 11 / 25
  • 12.
    Restrições de Integridade RestriçõesCheck Podemos e devemos sempre dar nomes às restrições para que seja mais fácil identificar a razão pela qual a inserção de dados falha. Exemplo create table empregado ( bi integer , nome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) d e f a u l t 0 c o n s t r a i n t s a l _ p o s i t i v o check ( s a l a r i o >= 0 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 12 / 25
  • 13.
    Restrições de Integridade RestriçõesCheck No caso da restrição abranger mais de uma coluna temos de usar uma restrição de tabela. Exemplo create table empregado ( bi integer , nome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) , descontos numeric ( 9 , 2 ) , c o n s t r a i n t desconto_menor_salario check ( desconto < s a l a r i o ) . . . ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 13 / 25
  • 14.
    Restrições de Integridade RestriçõesNot Null Para garantir que uma coluna não vai ter valores nulos podemos usar uma restrição do tipo not null. Exemplo create table empregado ( bi integer , nome varchar (256) not null , s a l a r i o numeric ( 9 , 2 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 14 / 25
  • 15.
    Restrições de Integridade RestriçõesChave Primária Podemos definir uma, e só uma, chave primária para a tabela. Uma chave primária não pode conter valores nulos nem pode ter valores repetidos. Exemplo create table empregado ( bi integer primary key , nome varchar (256) not null , s a l a r i o numeric ( 9 , 2 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 15 / 25
  • 16.
    Restrições de Integridade RestriçõesChave Primária Uma chave primária pode ser composta por mais de do que um atributo. Nesse caso temos de usar uma restrição de tabela. Exemplo create table empregado ( pnome varchar ( 2 5 6 ) , unome varchar ( 2 5 6 ) , s a l a r i o numeric ( 9 , 2 ) , datanascimento date , primary key ( pnome , unome ) ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 16 / 25
  • 17.
    Restrições de Integridade RestriçõesChaves Candidatas Chaves candidatas alternativas podem ser definidas usando restrições do tipo unique. Estas restrições são equivalentes às restrições de chave primária mas não obrigam os valores a ser não nulos. Exemplo create table empregado ( bi integer primary key , n i f integer unique , nome varchar (256) not null , s a l a r i o numeric ( 9 , 2 ) , datanascimento date ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 17 / 25
  • 18.
    Restrições de Integridade RestriçõesChaves Candidatas Tal como as outras restrições devem ser nomeadas e no caso de incluirem mais de uma coluna devem ser declaradas como restrições de tabela. Exemplo create table empregado ( bi integer primary key , n i f integer c o n s t r a i n t n i f _ u n i c o unique , pnome varchar ( 2 5 6 ) , unome varchar ( 2 5 6 ) , . . . c o n s t r a i n t nome_unico unique ( pnome , unome ) ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 18 / 25
  • 19.
    Restrições de Integridade RestriçõesChaves Estrangeiras Uma restrição do tipo foreign key permite declarar chaves estrangeiras. Uma chave estrangeira deve sempre referenciar uma chave primária ou única. Exemplo create table empregado ( bi integer primary key , depid integer r e f e r e n c e s departamento ( id ) . . . ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 19 / 25
  • 20.
    Restrições de Integridade RestriçõesChaves Estrangeiras No caso da coluna (ou colunas) referenciada ser a chave primária de outra tabela, podemos omitir o nome da coluna referenciada. Exemplo create table empregado ( bi integer primary key , depid integer r e f e r e n c e s departamento . . . ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 20 / 25
  • 21.
    Restrições de Integridade RestriçõesChaves Estrangeiras No caso da chave estrangeira ser composta por mais de uma coluna usa-se uma restrição de tabela: Exemplo create table empregado ( bi integer primary key , rua varchar ( 2 5 6 ) , cidade varchar ( 2 5 6 ) , foreign key ( rua , cidade ) r e f e r e n c e s rua , . . . ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 21 / 25
  • 22.
    Restrições de Integridade RestriçõesChaves Estrangeiras Devemos sempre definir o que acontece quando uma chave estrangeira é violada durante uma operação de remoção ou alteração. Exemplo create table empregado ( bi integer primary key , depid integer r e f e r e n c e s departamento on delete set null on update cascade , . . . ) ; Neste exemplo estamos a definir que no caso de um departamento ser apagado os empregados que pertençam a esse departamento devem ficar com o depid a null. No caso da chave primária do departamento ser modificada, essa modificação deve propagar-se e modificar também o depid da tabela empregado. André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 22 / 25
  • 23.
    Restrições de Integridade RestriçõesChaves Estrangeiras As alternativas para os valores de on delete e on update são: ◮ - restrict - Não deixa efectuar a operação ◮ - cascade - Apaga os registos associados (delete) ou altera a chave estrangeira (update). ◮ - set null - A chave estrangeira passa a null. ◮ - set default - A chave estrangeira passa a ter o valor por omissão. No caso de não ser possível corrigir o erro, as chaves estrangeiras funcionam como se a restrição fosse do tipo restrict. André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 23 / 25
  • 24.
    Modificação de Tabelas Modificaçãode tabelas Depois de criada, uma tabela pode ser modificada. Exemplo ALTER TABLE empregado ADD COLUMN nome character varying ( 6 4 ) ; ALTER TABLE empregado DROP COLUMN nome ; ALTER TABLE empregado ADD CHECK ( s a l a r i o > 0 ) ; ALTER TABLE empregado ADD CONSTRAINT n i f _ u n i c o UNIQUE ( n i f ) ; ALTER TABLE empregado ADD FOREIGN KEY ( depid ) REFERENCES departamento ; ALTER TABLE empregado ALTER COLUMN s a l a r i o SET NOT NULL; ALTER TABLE empregado DROP CONSTRAINT n i f _ u n i c o ; ALTER TABLE empregado ALTER COLUMN s a l a r i o DROP NOT NULL; ALTER TABLE empregado ALTER COLUMN s a l a r i o SET DEFAULT 0; ALTER TABLE empregado ALTER COLUMN s a l a r i o DROP DEFAULT; ALTER TABLE empregado RENAME COLUMN depid TO departamento_id ; ALTER TABLE empregado RENAME TO f u n c i o n a r i o ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 24 / 25
  • 25.
    Domínios Domains Os domains sãotipos de dados definidos pelo utilizador de forma a evitar repetições. Um domain pode conter um valor default, restrições do tipo not null e check. Exemplo CREATE DOMAIN d _ s a l a r i o integer NOT NULL CHECK ( s a l a r i o > 0 ) ; CREATE TABLE empregado ( bi integer , s a l a r i o d _ s a l a r i o ) ; André Restivo (FEUP) SQL - Criação de Tabelas March 15, 2011 25 / 25