Bases de Dados DDL Data Definition Language
SQL SQL = Structured Query Language Foi originalmente criada pela IBM nos anos 70 como parte de um protótipo de sistema relacional Posteriormente foi implementada em muitos outros produtos comerciais Tornou-se um standard de linguagem de manipulação de dados É utilizada para formular operações relacionais (isto é, operações que definem e manipulam dados de forma relacional)
Características do SQL É uma linguagem semelhante à linguagem corrente, neste caso a inglesa Não é procedimental, isto é, não se indica como obter informação mas sim que informação se pretende Processa um conjunto de registos e não um só registo de cada vez (operações relacionais sobre conjuntos, em que a forma de conjunto de registos mais comum é uma tabela) Possui todos os comandos necessários tanto para a criação das estruturas que armazenam dados como dos próprios dados Extrai e manipula toda a informação da base de dados recorrendo aos operadores da Álgebra Relacional
Comandos SQL Dividem-se em dois tipos Definição de Dados: DDL ou Data Definition Language Manipulação de Dados: DML ou Data Manipulation Language
Comandos da sublinguagem DML UPDATE categoria SET nome_categoria = Professor Adjunto Equiparado WHERE nome_categoria LIKE %adjunto% Alterar o nome da categoria Professor adjunto Equiparado para Professor Adjunto Equiparado INSERT INTO curso VALUES(5, Informatica de Economia ); INSERT INTO curso VALUES(6, Economia e Gestao ); Inserir dois novos curso que tenham a palavra Economia no no seu nome (utilizar os códigos 5 e 6) DELETE FROM curso WHERE nome_cruso LIKE %Economia% ); Apagar os tuplos inseridos anteriormente.
DDL Data Definition Language (1) Conjunto de instruções SQL destinadas à criação de objectos numa base de dados: Domínios Tabelas Índices Chaves Vistas Restrições
DDL - Data Definition Language (2) Para permitir a definição de tais objectos a DDL oferece-nos três comandos diferentes: CREATE : criar objectos na base de dados ALTER : modificar objectos da base de dados DROP : remover objectos da base de dados
Tipos de Dados SQL Oracle Os tipos de dados (mais comuns) a utilizar em SQL na definição das colunas das tabelas são os seguintes: NUMBER(n) DATE VARCHAR2(n)...
Tipos de Dados SQL Oracle VARCHAR2(n): string de dimensão variável, com dimensão máxima n em bytes. A dimensão máxima permitida é 4000 e a mínima 1. NVARCHAR(n): string de dimensão variável, com dimensão máxima n em caracteres ou bytes, dependente do mapa de caracteres escolhido. A dimensão máxima permitida é 4000 e a mínima é 1. NUMBER(p, s): número com precisão p e escala s. A precisão p varia entre 1 e 38 e a escala s de -84 a 127. LONG: dados tipo caracter de dimensão variável até 2Gb. DATE: datas de 1 de Janeiro de 4712 AC até 31 de Dezembro de 4712 DC. RAW(n): dados binários de dimensão n em bytes. A dimensão é de 2000 bytes. LONG RAW: dados binários de dimensao variável até 2 Gb. ROWID: string hexadecimal que representa o endereço único de uma linha numa tabela. CHAR(n): string de dimensão fixa n em bytes. A dimensão máxima permitida é 2000 e a mínima 1. NCHAR(n): string com dimensão fixa n em caracteres ou bytes, dependente do mapa de caracteres escolhido. A dimensão máxima permitida é 2000 e a mínima 1. CLOB: objecto com caracteres de um byte. A dimensão máxima é de 4 Gb. NCLOB: objecto com caracteres de um ou mais bytes. A dimensão máxima é de 4 Gb. BLOB: objecto binário. A dimensão máxima é de 4 Gb. BFILE: contém a localização de um ficheiro binário armazenado fora da base de dados.
CREATE Suponhamos que vamos criar uma tabela A sintaxe do comando CREATE é a seguinte: CREATE TABLE <nome_tabela> (lista_parametros); Em que lista_parametros pode conter diversos itens de dois tipos distintos: Definição de colunas Definição de restrições sobre a tabela
Exemplo: CREATE e DROP CREATE TABLE funcionario (num_funcionario NUMBER(3) NOT NULL, nome_funcionario VARCHAR2(50) NOT NULL, data_nsc_funcionario DATE NOT NULL); Criar uma tabela funcionario DROP TABLE funcionario CASCADE CONSTRAINTS; Apagar a tabela funcionario
Definição de uma coluna/atributo Cada coluna/atributo aparece na criação da tabela separada por vírgulas e tem a sintaxe seguinte: Nome da coluna/atributo nome_atributo data_type [ definicao_default ] Tipo de dados - Valor por omissão para a coluna - Assume NULL quando nada é especificado ou não depende de nenhum domínio
Definição de uma Restrição Uma restrição, também conhecida por constraint pode ser um dos seguintes itens: candidate key foreign key check constraint
Candidate Keys Uma candidate key toma geralmente a forma seguinte: UNIQUE (lista_atributos_separadas_por_virgulas) Ou então PRIMARY KEY (lista_atributos_separadas_por_virgulas) Em que a lista de atributos a utilizar em cada um destes tipos de chave não pode em nenhum dos casos ser vazia. Uma dada tabela pode ter diversas unique keys mas em cada instante só terá uma primary key Cada atributo pertencente a estas chaves tem assumidamente um valor diferente de NULL para cada registo!
Foreign Keys (1) São as designadas chaves externas, que relacionam cada registo de uma tabela com os registos de outras. Tomam a forma seguinte: FOREIGN KEY (lista_atributos_separadas_por_virgulas) REFERENCES nome_tabela_destino [ (lista_atributos_destino_separadas_por_virgulas) ] [ON DELETE option] [ON UPDATE option] Necessária apenas se a foreign key referencia uma chave candidata que não é chave primária na tabela de destino
Foreign Keys (2) Option pode ter os seguintes valores: NO ACTION (não fazer nada) CASCADE (propagar acção às tabelas referenciadas) SET DEFAULT (utilizar default) SET NULL (colocar foreign key a NULL)
Check Constraints Uma check constraint verifica na inserção ou actualização de os valores a guardar respeitam uma determinada condição ou restrição. Toma geralmente a forma: CHECK (expressao_condicional_a_verificar)
Alterar tabelas Esta operação efectua-se com o comando ALTER TABLE. Permite-nos efectuar várias operações: Adicionar e remover atributos Mudar, adicionar ou remover valores default de colunas já existentes Adicionar ou remover restrições sobre a tabela
ALTER TABLE Adicionar colunas: ALTER TABLE nome_tabela ADD COLUMN nome_atributos_a_adicionar tipo_dados DEFAULT valor_default; Remover colunas: ALTER TABLE nome_tabela DROP COLUMN nome_atributo_a_remover; Modificar colunas... ALTER TABLE nome_tabela MODIFY [atributo_a_modificar tipo_dados] [DEFAULT expr] [restricoes_atributo]
Exemplo Criação de uma tabela (restrições adicionadas no CREATE) Chave Primária CREATE TABLE sala (cod_sala NUMBER NOT NULL PRIMARY KEY, nome_sala VARCHAR2(50) NOT NULL CHECK (nome_sala=(upper(nome_sala))); Check constraint CREATE TABLE sala_disciplina (cod_sala NUMBER NOT NULL, cod_cadeira NUMBER(5) NOT NULL, cod_curso NUMBER(5) NOT NULL, dia DATE NOT NULL, hora_inicio NUMBER(2) NOT NULL CHECK (hora_inicio >=8), hora_fim NUMBER(2) NOT NULL CHECK (hora_fim <= 20), CHECK (hora_fim > hora_inicio + 1));
Exemplo Adição de Restrições a uma tabela após a sua criação Nome Restrição ALTER TABLE aluno ADD CONSTRAINT chave_aluno PRIMARY KEY(num_aluno); ALTER TABLE sala_disciplina ADD CONSTRAINT pk_sala_disciplina PRIMARY KEY (cod_sala, dia, hora_inicio); Chave primária múltipla (envolve 3 colunas da tabela) Chave Primária sobre a coluna que representa o número de aluno ALTER TABLE sala_disciplina ADD CONSTRAINT fk_cod_sala FOREIGN KEY (cod_sala) REFERENCES sala(cod_sala); ALTER TABLE sala_disciplina ADD CONSTRAINT fk_cod_disciplina FOREIGN KEY (cod_cadeira, cod_curso) REFERENCES curso_cadeira (cod_cadeira, cod_curso); Chave externa múltipla (envolve 2 colunas da tabela de origem face às duas colunas idênticas na tabela de destino) Chave Externa baseada no código da sala que referencia a tabela sala no atributo que representa o mesmo valor!
Sequências (1) Uma sequência é um objecto da base de dados sobre o qual múltiplos utilizadores podem aceder de modo a gerar números inteiros únicos. Depois de criada pode ser acedida através de CURRVAL(valor actual) e NEXTVAL(próximo valor)
Sequências (2) Criar uma sequência Incremento a sofrer cada vez que for utilizado o NEXTVAL CREATE SEQUENCE seq_sala INCREMENT BY 1 START WITH 1; Aceder a uma sequência SELECT seq_sala.nextval FROM dual; Valor inicial Tabela de sistema dummy
Remover Objectos da BD Para remover um objecto do nosso repositório (base de dados) utilizamos o comando DROP: DROP TABLE nome_objecto opcao; Opção pode tomar os seguintes valores: RESTRICT (DROP falha se, no caso de uma remoção de uma tabela, a mesma for referenciada por alguma outra tabela, VIEW ou CONSTRAINT) CASCADE (DROP será bem sucedido, removendo consigo todas as tabelas VIEW s ou CONSTRAINT s que referenciem a tabela a remover)
ROLLBACK e COMMIT Os comandos ROLLBACK e COMMIT, permitem controlar as transacções efectuadas sobre uma bas de dados. Uma transação é uma sequência de instruções SQL. ROLLBACK: repõe o estado da base de dados até ao último COMMIT; COMMIT: para acaba uma transação e tornar permanentes todas as alterações efectuadas sobre a base de dados. Note-se que o Oracle garante um COMMIT implicito antes e depois de qualquer instrução da DDL.
Referências e Links Úteis An Introduction to Database Systems C. J. Date Addison Wesley The Practical SQL Handbook Judith S. Bowman et al Addison Wesley Sintaxe de todos os comandos SQL para Oracle http://www.ss64.com/ora/ Tutorial Resumido de comandos Oracle http://www.engin.umich.edu/caen/technotes/oracletut.pdf