Escolar Documentos
Profissional Documentos
Cultura Documentos
Linguagem SQL
O Modelo Relacional prev, desde sua concepo, a existncia de uma linguagem baseada em caracteres que suporte a definio do esquema fsico (tabelas, restries, etc.), e sua manipulao (insero, consulta, atualizao e remoo)
Linguagem SQL
Embora seja capaz de prover acesso facilitado aos dados, a linguagem SQL possui certas limitaes, como a impossibilidade de manipular uma tabela linha-a-linha, exigindo sua extenso, neste caso, atravs da definio de cursores
O Modelo Relacional no previa, originalmente, a possibilidade de armazenar trechos de cdigo no banco de dados. No entanto, foi adaptado para permitir a definio de
Stored Procedures: trechos de cdigo escritos em linguagem SQL, armazenados no BD, e que podem ser ativados a partir de aplicaes-cliente, comandos SQL, outras stored procedures, etc. Triggers: trechos de cdigo armazenados no BD ativados automaticamente aps determinados eventos
No Oracle, os trechos de cdigo armazenado (triggers, stored procedures e stored functions) so criados utilizando-se a linguagem PLSQL PL-SQL uma linguagem de programao de cdigo procedural
Exemplo de Trigger
create trigger t_itens_pedidos after insert or update or delete on pedidos_produtos for each row begin if inserting or updating then update pedidos set valor_total = valor_total + :new.valor * :new.quantidade where num_pedido = :new.num_pedido; endif; if deleting or updating then update pedidos set valor_total = valor_total - :old.valor * :old.quantidade where num_pedido = :old.num_pedido; endif; end; /
O Estudo de caso aqui utilizado visa modelar a realidade de uma livraria So apresentados os esquemas conceitual, lgico e fsico Todas as tabelas esto populadas e sobre estas devem ser executados os exerccios
CREATE TABLE tipos_telefones ( cod_tipo_telefone NUMBER ( 2 ) NOT NULL, descricao VARCHAR2 ( 20 ) NOT NULL, CONSTRAINT PK_TIPOS_TELEFONES PRIMARY KEY (cod_tipo_telefone) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE administradores ( cod_administrador NUMBER ( 6 ) NOT NULL, nivel_privilegio NUMBER ( 1 ) NOT NULL, CONSTRAINT PK_ADMINISTRADORES PRIMARY KEY (cod_administrador) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE clientes_enderecos ( cod_cliente NUMBER ( 6 ) NOT NULL, cod_endereco NUMBER ( 2 ) NOT NULL, data_cadastro DATE NOT NULL, CONSTRAINT PK_CLIENTES_ENDERECOS PRIMARY KEY (cod_cliente, cod_endereco) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE produtos ( cod_produto NUMBER ( 5 ) NOT NULL, titulo VARCHAR2 ( 200 ) NOT NULL, ano_lancamento DATE NOT NULL, importado CHAR ( 1 ) NOT NULL, preco NUMBER ( 10, 2 ) NOT NULL, prazo_entrega NUMBER ( 3 ) NOT NULL, CONSTRAINT PK_PRODUTOS PRIMARY KEY (cod_produto), CONSTRAINT CHK_PROD_IMPORTADO CHECK (importado in ('S','N')) ) TABLESPACE TSP_CURSOSQL /
CREATE TABLE enderecos ( cod_endereco NUMBER ( 2 ) NOT NULL, rua VARCHAR2 ( 30 ) NOT NULL, numero NUMBER ( 5 ) NOT NULL, complemento VARCHAR2 ( 20 ), cod_cidade NUMBER ( 4 ) NOT NULL, cep CHAR ( 8 ) NOT NULL, CONSTRAINT PK_ENDERECOS PRIMARY KEY (cod_endereco) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE telefones ( cod_cliente NUMBER ( 6 ) NOT NULL, cod_telefone NUMBER ( 2 ) NOT NULL, cod_tipo_telefone NUMBER ( 2 ) NOT NULL, ddd NUMBER ( 3 ), numero VARCHAR2 ( 10 ) NOT NULL, CONSTRAINT PK_TELEFONES PRIMARY KEY (cod_cliente, cod_telefone) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE clientes ( cod_cliente NUMBER ( 6 ) NOT NULL, data_nascimento DATE, data_cadastro DATE NOT NULL, CONSTRAINT PK_CLIENTES PRIMARY KEY (cod_cliente) ) TABLESPACE TSP_CURSOSQL /
CREATE TABLE estados ( uf CHAR ( 2 ) NOT NULL, nome VARCHAR2 ( 20 ) NOT NULL, regiao CHAR ( 2 ) NOT NULL, CONSTRAINT PK_ESTADOS PRIMARY KEY (uf) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE usuarios ( cod_usuario NUMBER ( 6 ) NOT NULL, nome VARCHAR2 ( 100 ) NOT NULL, cpf CHAR ( 11 ) NOT NULL, email VARCHAR2 ( 40 ) NOT NULL, username VARCHAR2 ( 20 ) NOT NULL, password VARCHAR2 ( 20 ) NOT NULL, CONSTRAINT PK_USUARIOS PRIMARY KEY (cod_usuario), CONSTRAINT AK_USU_CPF UNIQUE (cpf), CONSTRAINT AK_USU_USERNAME UNIQUE (username) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE cidades ( cod_cidade NUMBER ( 4 ) NOT NULL, nome VARCHAR2 ( 40 ) NOT NULL, uf CHAR ( 2 ) NOT NULL, CONSTRAINT PK_CIDADES PRIMARY KEY (cod_cidade) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE pedidos_produtos ( num_pedido NUMBER ( 7 ) NOT NULL, cod_produto NUMBER ( 5 ) NOT NULL, quantidade NUMBER ( 3 ) NOT NULL, valor_unitario NUMBER ( 10, 2 ) NOT NULL, CONSTRAINT PK_PEDIDOS_PRODUTOS PRIMARY KEY (num_pedido, cod_produto) ) TABLESPACE TSP_CURSOSQL /
CREATE TABLE autores ( cod_autor NUMBER ( 4 ) NOT NULL, nome VARCHAR2 ( 100 ) NOT NULL, descricao VARCHAR2 ( 1024 ), CONSTRAINT PK_AUTORES PRIMARY KEY (cod_autor) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE pedidos ( num_pedido NUMBER ( 7 ) NOT NULL, cod_cliente NUMBER ( 6 ) NOT NULL, cod_endereco NUMBER ( 2 ) NOT NULL, data_emissao DATE NOT NULL, CONSTRAINT PK_PEDIDOS PRIMARY KEY (num_pedido) ) TABLESPACE TSP_CURSOSQL / CREATE TABLE autores_produtos ( cod_autor NUMBER ( 4 ) NOT NULL, cod_produto NUMBER ( 5 ) NOT NULL, CONSTRAINT PK_AUTORES_PRODUTOS PRIMARY KEY (cod_autor, cod_produto) ) TABLESPACE TSP_CURSOSQL / ALTER TABLE administradores ADD ( CONSTRAINT FK_USU_ADM FOREIGN KEY (cod_administra REFERENCES usuarios (cod_usuario)) / ALTER TABLE clientes_enderecos ADD ( CONSTRAINT FK_CLI_CLIEND FOREIGN KEY (cod_clien REFERENCES clientes (cod_cliente)) /
ALTER TABLE clientes_enderecos ADD ( CONSTRAINT FK_END_CLIEND FOREIGN KEY (cod_endereco) REFERENCES enderecos (cod_endereco)) / ALTER TABLE enderecos ADD ( CONSTRAINT FK_CID_END FOREIGN KEY (cod_cidade) REFERENCES cidades (cod_cidade)) / ALTER TABLE telefones ADD ( CONSTRAINT FK_CLI_TEL FOREIGN KEY (cod_cliente) REFERENCES clientes (cod_cliente)) / ALTER TABLE telefones ADD ( CONSTRAINT FK_TIPTEL_TEL FOREIGN KEY (cod_tipo_telefone) REFERENCES tipos_telefones (cod_tipo_telefone)) / ALTER TABLE clientes ADD ( CONSTRAINT FK_USU_CLI FOREIGN KEY (cod_cliente) REFERENCES usuarios (cod_usuario)) / ALTER TABLE cidades ADD ( CONSTRAINT FK_EST_CID FOREIGN KEY (uf) REFERENCES estados (uf)) / ALTER TABLE pedidos_produtos ADD ( CONSTRAINT FK_PED_PEDPROD FOREIGN KEY (num_pedido) REFERENCES pedidos (num_pedido)) / ALTER TABLE pedidos_produtos ADD ( CONSTRAINT FK_PROD_PEDPROD FOREIGN KEY (cod_produto) REFERENCES produtos (cod_produto)) / ALTER TABLE pedidos ADD ( CONSTRAINT FK_CLIEND_PED FOREIGN KEY (cod_cliente, cod_endereco) REFERENCES clientes_enderecos (cod_cliente, cod_endereco)) / ALTER TABLE autores_produtos ADD ( CONSTRAINT FK_AUT_AUTPROD FOREIGN KEY (cod_autor) REFERENCES autores (cod_autor)) / ALTER TABLE autores_produtos ADD ( CONSTRAINT FK_PRD_AUTPROD FOREIGN KEY (cod_produto) REFERENCES produtos (cod_produto))
A linguagem de definio de dados permite a criao, manuteno e eliminao de objetos do banco de dados:
tabelas vises ndices seqncias sinnimos
Convenes de Nomes
Devem comear com uma letra Pode ter de 1 a 30 caracteres Pode conter somente A-Z, a-z, 0-9, _, $ e# Os nomes devem ser nicos por usurio No podem ser utilizadas palavras reservadas (salvo se entre aspas)
CHAR(tamanho): seqncia de caracteres de tamanho fixo VARCHAR(tamanho): seqncia de caracteres de tamanho varivel NUMBER(total, decimais): valores numricos DATE: data e hora
NCHAR(tamanho): at 2000 bytes em alocao Unicode (2 ou 3 bytes por caracter) VARCHAR2 ou VARCHAR(tamanho [BYTE | CHAR]): at 4000 bytes NVARCHAR2: at 4000 bytes CLOB: at 232 1 bytes (4 GB) NCLOB: at 232 1 bytes (4 GB) em alocao Unicode LONG: at 231 1 bytes (2 GB), mantido para compatibilidade
DATE: ano, ms, dia, hora, minuto, segundo, armazenados em 7 bytes INTERVAL DAY (preciso) TO SECOND (preciso): intervalos entre duas datas em dias, horas, minutos e segundos INTERVAL (preciso) YEAR TO MONTH: intervalo entre duas datas em anos e meses TIMESTAMP (preciso): valores de instantes de tempo com preciso de at 9 casas decimais nos segundos TIMESTAMP (preciso) WITH TIME ZONE: inclui a informao do fuso horrio TIMESTAMP (preciso) WITH LOCAL TIME ZONE: recupera a informao ajustada ao fuso horrio local
BLOB: at 232 1 bytes (4 GB) de dados binrios armazenados no banco de dados BFILE: at 232 1 bytes (4 GB) de dados binrios armazenados em arquivos externos RAW (tamanho): armazena at 2000 bytes, mantido para compatibilidade LONG RAW: at 231 1 bytes (2 GB) , mantido para compatibilidade
Restries de Integridade
Integridade de Entidade
Toda a tabela deve possuir, obrigatoriamente, uma coluna (ou uma composio de colunas) cujo valor nico para todas as instncias CHAVE PRIMRIA (PK) Eventualmente, outras colunas alm da chave primria podem ser nicas CHAVE ALTERNATIVA (AK)
Restries de Integridade
Integridade de Domnio
Restries de Integridade
Integridade de Domnio
valores padro: define um valor padro a ser associado a uma coluna se no for fornecido valor (ou for explicitamente fornecido um valor NULL) para esta durante a insero
importado CHAR ( 1 ) DEFAULT 'N' NOT NULL A definio de valores padres particularmente importante para colunas NOT NULL
Restries de Integridade
Integridade de Domnio
restries de validao: restringem os valores que podem ser atribudos a uma coluna
CONSTRAINT CHK_PROD_IMPORTADO CHECK (importado in ('S','N'))
tipos definidos pelo usurio: tipo de dado construdo a partir de tipos pr-definidos, contendo restrio a valores nulos, regras de validao e um valor padro
No disponvel em todos os SGBDs
Restries de Integridade
Integridade Referencial
Restries de Integridade
Integridade Referencial
Esta restrio estabelece uma relao entre o atributo uf da tabela CIDADES e a chave primria da tabela ESTADOS
Restries de Integridade
Integridade Referencial
O SGBD deve prover mecanismos para assegurar que a restrio de integridade seja respeitada, ou seja, uma linha violando a restrio de integridade referencial no poder existir; Estes mecanismos prevem a execuo de uma ao em resposta a uma atualizao, a fim de manter a integridade referencial.
Restries de Integridade
Integridade Referencial
Existem diferentes aes possveis para evitar que uma operao de atualizao viole as restries de integridade referencial
RESTRICT: impede a execuo da operao Inserir uma Sala situada em um Prdio no existente CASCADE: propaga a operao para respeitar as restries de integridade referencial Remover uma Disciplina do Currculo, removendo todos os Pr-requisitos associados a esta
Restries de Integridade
Integridade Referencial
SET NULL: assegura as restries de integridade referencial associando um valor NULL chave estrangeira que poderia viol-las Remover um Professor, fazendo com que a coluna matricula_professor em DISCIPLINAS_TURMAS fosse atualizada para NULL em todas as disciplinas que atua NULL no considerado um valor, portanto, no fere as restries de integridade referencial SET DEFAULT: semelhante ao de SET NULL, mas associa um valor padro chave estrangeira
Restries de Integridade
Integridade Definida pelo Usurio
O Projetista do Banco de Dados pode definir restries de integridade complexas, utilizando, por exemplo, o conceito de triggers Triggers so pores de cdigo ativadas aps certos eventos (insero, atualizao ou excluso de linhas da tabela)
Exemplo
create table usuarios ( cod_usuario number ( 6 ), nome varchar2 ( 100 ) constraint nn_usu_nome not null, cpf char ( 11 ) constraint nn_usu_cpf not null, email varchar2 ( 40 ) constraint nn_usu_email not null, username varchar2 ( 20 ) constraint nn_usu_username not null, password varchar2 ( 20 ) constraint nn_usu_password_not null, constraint pk_usuarios primary key (cod_usuario), constraint ak_usu_cpf unique (cpf), constraint ak_usu_username unique (username));
Exemplo
create table produtos ( cod_produto number ( 5 ) not null, titulo varchar2 ( 200 ) not null, ano_lancamento date not null, importado char ( 1 ) not null, preco number ( 10, 2 ) not null, prazo_entrega number ( 3 ) not null, constraint pk_produtos primary key (cod_produto), constraint chk_prod_importado check (importado in (S',N')) );
Exemplo
create table administradores ( cod_administrador number ( 6 ), nivel_privilegio number ( 1 ) not null, constraint pk_administradores primary key (cod_administrador), constraint fk_usu_adm foreign key (cod_administrador) references usuarios (cod_usuario) );
Pode ser definido um valor padro para uma coluna (literais, expresses ou funes) Se no for definido um valor, ser utilizado o padro
create table pedidos ( num_pedido number ( 7 ), cod_cliente number ( 6 ) not null, cod_endereco number ( 2 ) not null, data_emissao date not null default sysdate, constraint pk_pedidos primary key (num_pedido));
USER_TABLES: informaes sobre as tabelas do usurio USER_OBJECTS: informaes completas sobre todos os diferentes tipos de objetos (object_type) do usurio USER_CATALOG ou CAT: lista de todos os objetos e seus respectivos tipos Consultas sobre estas tabelas (vises) fornecem informaes teis
Verificando as Constraints
ALTER TABLE nome_da_tabela [ADD definio de coluna,] [MODIFY definio de coluna,] [DROP COLUMN nome,] [RENAME COLUMN antigo TO novo,] [ADD definio de constraint,] [MODIFY CONSTRAINT definio de constraint,] [DROP CONSTRAINT nome,] [RENAME CONSTRAINT antigo TO novo,] [ENABLE | DISABLE constraint,] [RENAME TO novo_nome];
Exemplo
alter table pedidos add valor_total number(10,2); alter table enderecos modify cod_endereco number(3); alter table autores drop column descricao; alter table clientes rename column cod_usuario to cod_cliente; alter table produtos add constraint chk_prod_prazo check(prazo between 3 and 30);
Exemplo
alter table produtos add constraint chk_prod_prazo check(prazo between 3 and 30); alter table produtos drop constraint chk_prod_importado;
Exemplo
alter table enderecos modify cod_endereco number(3); alter table produtos add constraint chk_prod_prazo check(prazo between 3 and 30); alter table usuarios disable constraint pk_usuarios; alter table usuarios enable constraint pk_usuarios; alter table pedidos_produtos rename to itens_pedidos;
Permite a eliminao de todas as linhas de uma tabela, de forma rpida e liberando o espao alocado, sem possibilitar a execuo de rollback:
TRUNCATE TABLE nome_da_tabela;
A coluna usada freqentemente nas clusulas WHERE ou em joins A coluna contm inmeros valores distintos A coluna contm muitos NULL A tabela tem muitas linhas e as consultas normalmente retornam poucas linhas
A tabela pequena As colunas no aparecem em condies ou joins As consultas retornam muitas linhas A tabela atualizada muito freqentemente
Utilizando Sinnimos
Sinnimos so nomes alternativos pelos quais podem ser conhecidos os objetos do banco de dados (tabelas, vises, sequences, stored procedures, etc.) Sinnimos podem ser pblicos, acessveis por todos os usurios, ou privados
CREATE [PUBLIC] SYNONYM nome FOR objeto; create public synonym usuarios for cursosql.usuarios;