Definição de Dados com SQL - FACOM | Faculdade de ... · Definição de Dados com SQL 3...

Post on 14-Jul-2020

1 views 0 download

Transcript of Definição de Dados com SQL - FACOM | Faculdade de ... · Definição de Dados com SQL 3...

Definição de Dados com SQL

Definição de Dados com SQL

Wendel Melo

Faculdade de Computação

Universidade Federal de Uberlândia

www.facom.ufu.br/~wendelmelo

Banco de Dados I

2Definição de Dados com SQL

Structured Query Language (SQL)

• “Linguagem de consulta estruturada”;

• Padrão em SGBD’s relacionais, o que favorece a portabili-dade entre diferentes SGBD’s;

• Possui um conjunto de instruções normatizado (ANSI 1986, ISO 1987, 1992, 1999, 2003, 2006, 2008, 2011, 2016, …);

• Adicionalmente, SGBD’s incorporam recursos adicionais para facilitar o uso;

3Definição de Dados com SQL

Structured Query Language (SQL)

• Linguagem declarativa: usuários se preocupam em dizer o que deve ser feito, e não como deve ser feito, simplifi-cando assim seu uso;

• Insensível a caixa: comandos podem estar em maiúsculo ou minúsculo;

• Comandos SQL terminam com o caracter ‘;’ (ponto e vír-gula).

• Atributos deixados em branco são marcados com o valor NULL;

4Definição de Dados com SQL

Structured Query Language (SQL)

• SQL possui cláusulas para atuar como:

– Linguagem de Definição de Dados (DDL);

– Linguagem de Manipulação de Dados (DML);

– Linguagem de Consulta de Dados (DQL);

– Linguagem de Transação de Dados (DTL);

– Linguagem de Controle de Dados (DCL).

5Definição de Dados com SQL

Structured Query Language (SQL)

• SQL possui cláusulas para atuar como:

– Linguagem de Definição de Dados (DDL) (tema da aula);

– Linguagem de Manipulação de Dados (DML);

– Linguagem de Consulta de Dados (DQL);

– Linguagem de Transação de Dados (DTL);

– Linguagem de Controle de Dados (DCL).

6Definição de Dados com SQL

Linguagem de Definição de Dados (DDL)

• Através de uma DDL, é possível especificar o esquema geral de um modelo de dados.

• A DDL SQL possui mecanismos para descrever:

– O esquema para cada relação;

– Os tipos de dados associados a cada atributo;

– Restrições de integridade;

– O conjunto de índices gerados para cada relação;

– Informações de segurança e autorização para cada relação;

– A estrutura de armazenamento físico de cada relação.

7Definição de Dados com SQL

Principais Cláusulas DDL em SQL

Em SQL, as principais cláusulas de definição de dados são:

• CREATE <elemento>: cria um elemento, que pode ser um es-quema, tabela, visão, etc;

• ALTER <elemento>: altera propriedades de um elemento exis-tente;

• DROP <elemento>: remove um elemento existente;

8Definição de Dados com SQL

Modelo Relacional e SQL

• Em SQL:

– Relações são denominadas Tabelas;

– Tuplas são denominadas Linhas;

– Atributos são denominados Colunas.

• SQL também define um esquema como sendo um agrupa-mento de elementos (Domínios, Tabelas, Visões, etc) que per-tencem a uma mesma aplicação no banco de dados;

• Um catálogo é definido como uma coleção de esquemas em um BD.

9Definição de Dados com SQL

Criação de Esquemas em SQL

• As 3 cláusulas DDL principais, CREATE, ALTER e DROP, podem ser aplicadas a esquemas usando o modificador SCHEMA;

• Forma geral:

CREATE SCHEMA <nome do esquema> [AUTHORIZATION <nome de usuario>] [<elemento de esquema>];

• É possível definir elementos como tabelas já durante a criação de um esquema na parte <elemento de esquema>;

10Definição de Dados com SQL

Criação de Esquemas em SQL

• Exemplo: Criando um esquema BIBLIOTECA

CREATE SCHEMA BIBLIOTECA;

• Criando um esquema EMPRESA que pertencerá ao usuário jessica:

CREATE SCHEMA EMPRESA AUTHORIZATION ‘jessica’;

11Definição de Dados com SQL

Esquemas em SQL

• Em cada catálogo, há um esquema especial denominado IN-FORMATION_SCHEMA, que contém informações sobre todos os demais esquemas no catálogo;

• SQL trabalha com o conceito do esquema corrente: Por pa-drão, os comandos de definição e manipulação de dados se-rão aplicados ao esquema corrente (exceto quando outro es-quema é explicitamente indicado);

• Por padrão, SGBD’s possuem um esquema público (public) que começa sendo definido como o corrente.

12Definição de Dados com SQL

Esquemas em SQL

• Para selecionar qual esquema será adotado como corrente no PostgreSQL, podemos alterar a variável de ambiente search_path:

SET search_path TO EMPRESA;

• Não é recomendado usar o esquema público para definir ban-co de dados. O ideal é criar um esquema próprio com permis-sões adequadas e utilizá-lo;

13Definição de Dados com SQL

Tipos de dados básicos em SQL

Para descrever atributos, podemos usar os seguintes tipos de dados:

• Números inteiros:

– SMALLINT: inteiros pequenos;

– INT ou INTEGER.

• Números reais:

– FLOAT ou REAL: ponto flutuante de precisão simples;

– DOUBLE PRECISION: ponto flutuante de precisão dupla;

– NUMERIC(p, d), DECIMAL(p, d) ou DEC(p, d): números reais com no máximo p dígitos sendo d dígitos após a vírgula.

14Definição de Dados com SQL

• Cadeias de caracteres:

– CHAR(n) ou CHARACTER(n): cadeias fixas de n caracteres. Se menos de n caracteres forem usados, o espaço restante será preenchido com caracteres de espaço;

– VARCHAR(n) ou CHARACTER VARYING(n): cadeias de tama-nho variável de até n caracteres. VARCHAR armazena ape-nas os caracteres usados, sem uso de espaços adicionais;

– CLOB(T) ou CHARACTER LARGE OBJECT(T): cadeias variá-veis de tamanho máximo T, onde T é especificado em KB (K), MB (M), GB (G), etc, ex: CLOB(10M).

Tipos de dados básicos em SQL

15Definição de Dados com SQL

Observações importantes:

• Cadeias de tamanho fixo otimizam a performance para con-sulta e manipulação de dados, pois o tamanho do campo é sempre pré-definido;

• Cadeias de tamanho variável otimizam o espaço de armaze-namento e o tráfego de dados pela rede.

Tipos de dados básicos em SQL

16Definição de Dados com SQL

Tipos de dados básicos em SQL

• Booleano: Tipo que além dos valores TRUE (verdadeiro) e FALSE (falso), também suporta o valor UNKNOWN (desconhe-cido) devido aos valores em branco (NULL):

• SQL adota uma lógica de 3 valores para lidar com campos em branco ou valores desconhecidos (UNKNOWN).

17Definição de Dados com SQL

Tipos de dados básicos em SQLTabela verdade do operador ou na lógica de 3 valores: T (True), F (False) e U (Unknown):

18Definição de Dados com SQL

Tipos de dados básicos em SQLTabela verdade do operador ou na lógica de 3 valores: T (True), F (False) e U (Unknown):

X Y X ou Y

F F F

F T T

F U U

19Definição de Dados com SQL

Tipos de dados básicos em SQLTabela verdade do operador ou na lógica de 3 valores: T (True), F (False) e U (Unknown):

X Y X ou Y

F F F

F T T

F U U

X Y X ou Y

T F T

T T T

T U T

20Definição de Dados com SQL

Tipos de dados básicos em SQLTabela verdade do operador ou na lógica de 3 valores: T (True), F (False) e U (Unknown):

X Y X ou Y

F F F

F T T

F U U

X Y X ou Y

T F T

T T T

T U T

X Y X ou Y

U F U

U T T

U U U

21Definição de Dados com SQL

Tipos de dados básicos em SQLTabela verdade do operador ou na lógica de 3 valores: T (True), F (False) e U (Unknown):

X Y X ou Y

F F F

F T T

F U U

X Y X ou Y

T F T

T T T

T U T

X Y X ou Y

U F U

U T T

U U U

• Para o operador ou, se um dos operandos for T, o resultado será T, mesmo que o outro operando seja desconhecido;

• Se um dos operandos for F e outro desconhecido, ou ambos desconhecidos, então o resultado é desconhecido;

• Exercício: tabelas verdade dos operadores e (and) e não (not).

22Definição de Dados com SQL

Tipos de dados básicos em SQL

• Cadeia de bits: ex: B’10110’

– BIT(n): cadeia fixa de n bits. Espaço não utilizado é preen-chido com zeros a frente;

– BINARY VARYING(n): cadeia de tamanho variável de n bits;

– BINARY LARGE OBJECT(T) ou BLOB(T): cabeias grandes de bits de tamanho T, onde pode ser especificado em Kb (K), Mb (M), Gb (G), etc. Ex: BLOB(10K).

• BLOB’s são úteis para armazenar arquivos e dados bi-nários em geral, como imagens ou vídeos.

23Definição de Dados com SQL

Tipos de dados básicos em SQL

• Hora:

– TIME: representa uma hora do dia no formato HH:MM:SS. Ex: TIME ‘07:45:34’;

– TIME(i): especifica i casas decimais para os segundos (pa-ra medidas de tempo mais precisas);

– TIME WITH TIME ZONE: hora com descolamento baseado no fuso horário universal padrão na faixa de +13:00 a -12:59.

24Definição de Dados com SQL

Tipos de dados básicos em SQL

• Data:

– DATE: Representa uma data válida, por exemplo na forma DD-MM-YYYY ou MM-DD-YYYY (pode variar dependendo do SGBD). Ex: DATE ‘19-03-1991’;

– TIMESTAMP ou DATE/TIME: representa uma data junto com um horário. Há opção de uso do qualificador WITH TIME ZONE para especificar fuso horário.

25Definição de Dados com SQL

Tipos de dados básicos em SQL

• Intervalo de tempo:

– INTERVAL: intervalo de tempo. Pode ser usado para incre-mentar ou decrementar uma data hora, ou na diferença en-tre medidas de tempo;

– Intervalos são qualificados para serem de YEAR/MONTH ou DAY/TIME.

26Definição de Dados com SQL

Domínios em SQL

• As 3 cláusulas DDL principais, CREATE, ALTER e DROP podem ser aplicadas a domínions usando o modificador DOMAIN;

CREATE DOMAIN TIPO_CPF AS CHAR(11);

• O comando acima cria o domínio TIPO_CPF funcionando qua-se como um typedef na linguagem C;

• Uma das vantagens de se criar um domínio é facilitar futuras alterações. Se muitas relações possuírem campos para CPF e um dia o CPF passar a ter 12 dígitos, basta fazer (pode variar dependendo do SGBD):

ALTER DOMAIN TIPO_CPF TYPE CHAR(12);

27Definição de Dados com SQL

Domínios em SQL

• Também é possível remover um domínio:

DROP DOMAIN TIPO_CPF;

• Outra vantagem de uso dos domínios é a criação de restrições sobre o mesmo:

CREATE DOMAIN TIPO_ALTURA AS DECIMAL(3, 2)

CHECK( TIPO_ALTURA > 0 AND TIPO_ALTURA <= 3.0 );

• A linha acima cria o domínio TIPO_ALTURA com a restrição de que seus valores devem estar no intervalo (0 3].

28Definição de Dados com SQL

Criação de Tabelas em SQL

• As 3 cláusulas DDL principais, CREATE, ALTER e DROP podem ser aplicadas a tabelas usando o modificador TABLE;

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

29Definição de Dados com SQL

Criação de Tabelas em SQL

• Cria um domínio para armazenar telefones;

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

30Definição de Dados com SQL

Criação de Tabelas em SQL

• Cria tabela

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

31Definição de Dados com SQL

Criação de Tabelas em SQL

• Define o nome da tabela

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

32Definição de Dados com SQL

Criação de Tabelas em SQL

• Especifica os atributos da tabela

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

33Definição de Dados com SQL

Criação de Tabelas em SQL

• Especifica um atributo: nome, tipo e possíveis propriedades;

• Aqui, declaramos um atributo idContato do tipo SERIAL (inteiro auto-incrementável)

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

34Definição de Dados com SQL

Criação de Tabelas em SQL• Ao declarar um atributo como serial (auto-incrementável), permi-

timos que o SGBD gere um valor automaticamente para o mes-mo incrementando o valor da a última linha inserida.

• Assim, a primeira linha terá idContato com o valor 1, a segunda terá idContato com o valor 2, e, assim, sucessivamente.

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

35Definição de Dados com SQL

Criação de Tabelas em SQL• Apesar de auto-incrementável, ainda é possível inserir valores

para o campo IdContato manualmente, evitando assim a geração automática.

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

36Definição de Dados com SQL

Criação de Tabelas em SQL

• NULL especifica que o atributo pode ser deixado em branco no preenchimento da tabela. NOT NULL especifica que o preenchimento é obrigatório. Por padrão, atributos são NULL.

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

37Definição de Dados com SQL

Criação de Tabelas em SQL

• PRIMARY KEY especifica os campos que atuarão como chave primária da Tabela. A chave primária é sempre de preenchi-mento obrigatório e com valor único para cada linha da Tabela.

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

38Definição de Dados com SQL

Criação de Tabelas em SQL• Só deve haver, no máximo, uma cláusula PRIMARY KEY no con-

texto de uma cláusula CREATE TABLE. Todos os campos que compõe a chave primária devem ser listados em sequência dentro dos parênteses.

CREATE DOMAIN D_TEL AS VARCHAR(15);

CREATE TABLE Contato (

idContato SERIAL,nome CHAR(200) NOT NULL,dt_nasc DATE NULL,telefone D_TEL,

PRIMARY KEY (idContato) );

39Definição de Dados com SQL

Criação de Tabelas em SQL

Outro exemplo

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

40Definição de Dados com SQL

Criação de Tabelas em SQL

• UNIQUE especifica que o valor de campo é único, isto é, não pode haver duas ou mais linhas com o mesmo valor para este campo.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

41Definição de Dados com SQL

Criação de Tabelas em SQL• DEFAULT estabelece um valor padrão para o campo, caso, no ato do

preenchimento, não seja fornecido um valor para o mesmo.

• Aqui, se estabelece que o campo booleano interno terá o valor padrão TRUE se o mesmo não for explicitamente preenchido.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

42Definição de Dados com SQL

Criação de Tabelas em SQL

• Apesar do valor default, ainda assim, o campo interno pode ficar em branco. Para isso, é preciso preenchê-lo explicitamente com o valor NULL, pois, do contrário, será preenchido com TRUE.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

43Definição de Dados com SQL

Criação de Tabelas em SQL

• Note que um mesmo campo pode ter mais de uma propriedade. nome, por exemplo, detém as propriedades UNIQUE e NOT NULL.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

44Definição de Dados com SQL

Criação de Tabelas em SQL

• PRIMARY KEY define os campos utilizados como chave primária.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

45Definição de Dados com SQL

Criação de Tabelas em SQL• FOREIGN KEY/REFERENCES define os campos usados como chave

estrangeira com a tabela/campo que os mesmos referenciam.

• Usamos uma cláusula FOREIGN KEY para cada Tabela externa sen-do referenciada.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

46Definição de Dados com SQL

Criação de Tabelas em SQL• Note que uma chave estrangeira deve referenciar totalmente a cha-

ves primária de outra tabela (se a chave primária da tabela sendo referenciada contiver dois campos, será necessário definir dois campos correspondentes para chave estrangeira).

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

47Definição de Dados com SQL

Criação de Tabelas em SQL

• O tipo do campo sendo usado como chave estrangeira deve casar com o tipo da chave primária da tabela sendo referenciada

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

48Definição de Dados com SQL

Criação de Tabelas em SQL• A cláusula CHECK impõe uma restrição para todas as linhas da tabela.

Aqui, impomos que a data final do projeto deve ser maior ou igual que a data de início. A cada inserção ou alteração na tabela, essa restrição será verificada. Caso haja violação, a operação é rejeitada.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

49Definição de Dados com SQL

Criação de Tabelas em SQL

• A definição de chaves primárias, estrangeiras e testes com CHECK geram restrições na tabela.

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

50Definição de Dados com SQL

Criação de Tabelas em SQL• Podemos nomear uma restrição com a cláusula CONSTRAINT:

CONSTRAINT chaveProjeto PRIMARY KEY(id_projeto);

• Nomeando restrições, é possível removê-las ou substituí-las posteriormente

CREATE TABLE Projeto (id_projeto SERIAL,nome VARCHAR(500) UNIQUE NOT NULL,dt_inicio DATE NOT NULL,dt_fim DATE NOT NULL,interno BOOLEAN DEFAULT TRUE,cpf_coordenador CHAR(11),

PRIMARY KEY(id_projeto),FOREIGN KEY(cpf_coordenador)

REFERENCES Funcionario(cpf),

CHECK( dt_fim >= dt_inicio ) );

51Definição de Dados com SQL

Alteração de Tabelas em SQL

ALTER TABLE – Altera as definições de campos e de restrições.

• ALTER TABLE <nome da tabela>

ADD <definição de Coluna>

ADD <Restrição de integridade> -- Chaves primárias, Estrangeiras

ALTER <definição de Coluna>

ALTER <definição de Coluna> DEFAULT <default-value>

ALTER <definição de Coluna> [ NOT ] NULL

DROP <definição de Coluna>

DROP CONSTRAINT <nome da restrição> -- Remove uma restrição

RENAME TO <novo nome> -- Renomeia a tabela

RENAME <Atributo> TO <novo atributo>

Onde <definição de coluna> pode ser:

<Nome Atributo> <Tipo de Dado> [NULL ] |

[ DEFAULT default-value ] -- nao vale [NOT NULL]

52Definição de Dados com SQL

Alteração de Tabelas em SQL

• Podemos adicionar uma coluna em uma tabela com:

ALTER TABLE <tabela> ADD COLUMN <coluna> <tipo>;

• Adicionando coluna salario do tipo float na tabela Funcionario:

ALTER TABLE Funcionario ADD COLUMN salario FLOAT;

• Pode-se especificar propriedades para columa:

ALTER TABLE Funcionario ADD COLUMN salario float NOT NULL;

53Definição de Dados com SQL

Alteração de Tabelas em SQL

• Para remover uma coluna:

ALTER TABLE <tabela> DROP COLUMN <coluna> <tipo remoção>;

Onde <tipo remoção> pode ser:

– CASCADE: remoção em cascata se a coluna for referenciada em outras tabelas;

– RESTRICT: remoção apenas na tabela em questão. A opera-ção é rejeitada se a coluna for referenciada em outra tabela:

Removendo a coluna dt_nasc:

ALTER TABLE Funcionario DROP COLUMN dt_nasc RESTRICT;

54Definição de Dados com SQL

Alteração de Tabelas em SQL

• Alterando tipo de uma coluna:

ALTER TABLE <tabela> ALTER COLUMN <coluna> TYPE <tipo>;

• Mudando o tipo do campo nome para VARCHAR:

ALTER TABLE Funcionario

ALTER COLUMN nome VARCHAR(200);

55Definição de Dados com SQL

Remoção de Tabelas em SQL

• Podemos remover uma tabela com a cláusula DROP TABLE;

DROP TABLE Projeto;

• A operação erá rejeitada se houver outra Tabela com chave estrangeira para a tabela sendo deletada. É preciso primeiro remover qualquer referência para a Tabela antes de apagá-la.

56Definição de Dados com SQL

Tratando Integridade Referencial

• Ao declarar uma chave primária, podemos es-pecificar como a integridade referencial será tratada;

• No nosso exemplo, se tentarmos remover al-gum funcionário que seja coordenador de al-gum projeto, a ação padrão do SGBD seria re-jeitar a operação, pois deixaria seu(s) projeto(s) com valor inválido para o campo cpf_coordenador.

57Definição de Dados com SQL

Tratando Integridade Referencial

Podemos modificar este comportamento padrão através das cláusulas:

• ON DELETE: especifica ação no caso de remoção

• ON UPDATE: especifica ação no caso de atualização

As possíveis ações são:

• SET NULL: mudar o campo chave estrangeira para NULL;

• SET DEFAULT: mudar o campo chave estrangeira para o valor padrão;

• CASCADE: propagar a operação na tabela em questão.

58Definição de Dados com SQL

Tratando Integridade Referencial

• Por exemplo, poderíamos substituir a linha de definição da chave estrangeira por:

FOREIGN KEY (cpf_coordenador) REFERENCES Funcionario(cpf)

ON DELETE SET NULL ON UPDATE CASCADE,

59Definição de Dados com SQL

Tratando Integridade Referencial

• Por exemplo, poderíamos substituir a linha de definição da chave estrangeira por:

FOREIGN KEY (cpf_coordenador) REFERENCES Funcionario(cpf)

ON DELETE SET NULL ON UPDATE CASCADE,

Especifica que se um co-ordenador de projeto for deletado na tabela Funci-onário, o campo cpf_coordenador deve fi-car com o valor NULL.

Especifica que se o cpf de um coordenador de projeto for alterado na tabela Funcionário, o campo cpf_coordenador deve refletir a alteração.