BANCO DE DADOS WEB AULA 7 criação de tabelas professor Luciano Roberto Rocha www.lrocha.com
Arquitetura de um Banco de Dados Todos os dados de um banco conceitualmente são organizados no formato de tabelas, onde cada coluna será um campo (atributo) e cada linha será um registro (tupla). O gerenciamento estrutural de tabelas é um dos conjuntos de comandos mais completos e customizáveis, tendo em vista a grande quantidade de parâmetros que podem ser utilizados. A estrutura básica para criação de uma tabela é: CREATE [ TEMPORARY TEMP ] TABLE nome_da_tabela ( colunas ) [ opções avançadas ] 2
Criação de Tabelas Se for fornecido o nome do esquema (por exemplo, CREATE TABLE meu_esquema.minha_tabela...) então a tabela será criada no esquema especificado, senão será criada no esquema corrente. As tabelas temporárias são criadas em um esquema especial e, portanto, não pode ser fornecido o nome do esquema ao se criar tabelas temporárias. Dentro dos parênteses, devem ser inseridas as informações correspondentes aos campos (colunas) que farão parte da tabela. As informações devem ser inseridas obedecendo a seguinte estrutura: nome_da_coluna tipo_de_dado [DEFAULT valor] [NULL NOT NULL] [PRIMARY KEY UNIQUE] 3
Criação de Tabelas Um exemplo de criação de tabelas utilizando vários dos tipos de dados é o seguinte: CREATE TABLE tabela_modelo ( ID SERIAL NOT NULL, NOME VARCHAR(65) NOT NULL, CPF VARCHAR(12) NOT NULL, DATA_NASCIMENTO DATE, SALARIO FLOAT NOT NULL DEFAULT '1000', COMENTARIO TEXT NULL, PRIMARY KEY (ID), UNIQUE (CPF) ); 4
Visualização de Tabelas Para visualizar a estrutura de uma tabela usando o psql utilizamos o seguinte comando : \d nome_da_tabela 5
Alteração de Tabelas A alteração de uma tabela envolve um conjunto de comandos para realizar diversas ações possíveis, entre as quais: Renomear tabelas; Renomear campos (colunas); Inserir novos campos; Remover campos existentes; Alterar a estrutura de uma coluna (tipo de dado e/ou seus parâmetros) As ações que envolvem a alteração de tabelas são realizadas po meio do comando ALTER TABLE. 6
Renomear uma Tabela Para renomear uma tabela é utilizado a seguinte sintaxe: ALTER TABLE nome_da_tabela RENAME TO novo_nome; Exemplo: ALTER TABLE distribuidores RENAME TO fornecedores; ALTER TABLE clientes RENAME TO consumidores; 7
Renomear um campo (coluna) Para renomear uma seguinte sintaxe: coluna de uma tabela é utilizado a ALTER TABLE nome_da_tabela RENAME COLUMN nome_da_coluna TO novo_nome; Exemplo: ALTER TABLE distribuidores RENAME COLUMN endereco TO cidade; 8
Adicionar um campo (coluna) Para adicionar uma nova coluna em uma tabela preexistente é utilizado a seguinte sintaxe: ALTER TABLE nome_da_tabela ADD COLUMN nome_da_coluna tipo_de_dado [parâmetros]; Exemplo: ALTER TABLE distribuidores ADD COLUMN endereco varchar(30); ALTER TABLE distribuidores ADD COLUMN endereco varchar(30) NOT NULL; Quando uma coluna é adicionada usando ADD COLUMN, todas as linhas existentes na tabela são inicializadas com o valor padrão da coluna (NULL, se não for especificada a cláusula DEFAULT). 9
Remover um campo (coluna) Para remover uma coluna de uma tabela preexistente é utilizado a seguinte sintaxe: ALTER TABLE nome_da_tabela DROP COLUMN nome_da_coluna [RESTRICT CASCADE]; Exemplo: ALTER TABLE distribuidores DROP COLUMN endereco CASCADE; CASCADE Remove, automaticamente, os objetos que dependem da coluna ou da restrição removida (por exemplo, visões fazendo referência à coluna). RESTRICT Recusa remover a coluna ou a restrição se existirem objetos que dependem das mesmas. Este é o comportamento padrão. A forma DROP COLUMN não remove fisicamente a coluna, simplesmente torna a coluna invisível para as operações SQL. As operações subseqüentes de inserção e de atualização na tabela armazenam o valor nulo na coluna. 10
Alterar a estrutura de uma coluna Para alterar a estrutura de uma coluna de uma tabela preexistente é utilizado a seguinte sintaxe: ALTER TABLE nome_da_tabela RENAME ALTER {TYPE} tipo expressão_sql; Exemplos: Para mudar o tipo de duas colunas existentes em uma única operação: ALTER TABLE distribuidores ALTER COLUMN endereco TYPE varchar(80), ALTER COLUMN nome TYPE varchar(100); Para renomear uma coluna existente: ALTER TABLE distribuidores RENAME COLUMN logradouro TO endereco; Para adicionar uma restrição de não nulo a uma coluna: ALTER TABLE distribuidores ALTER COLUMN logradouro SET NOT NULL; Para remover a restrição de não nulo da coluna: ALTER TABLE distribuidores ALTER COLUMN logradouro DROP NOT NULL; 11
Exclusão de Tabelas A exclusão de uma tabela preexistente é executada pelo comando DROP TABLE conforme a sintaxe a seguir: DROP TABLE nome_da_tabela [CASCADE]; O uso deste comando exclui fisicamente a estrutura da tabela, bem como todos os seus registros. Dependendo dos relacionamentos que esta tabela possua, o procedimento poderá não ser realizado. Para forçar a sua exclusão e de todos os objetos relacionados, utiliza-se o argumento CASCADE. (No caso da restrição de chave estrangeira somente a chave estrangeira é removida, e não a outra tabela inteiramente). Exemplos: Remover duas tabelas, filmes e distribuidores: DROP TABLE filmes, distribuidores; 12