SQL DDL Criando Tabelas e Restrições



Documentos relacionados

Triggers no PostgreSQL

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

A linguagem SQL


SQL. SQL (Structured Query Language) Comando CREATE TABLE. SQL é uma linguagem de consulta que possibilita:

Banco de Dados. Módulo 7 - Modelo Relacional. Definição do Esquema Relacional em SQL. modulo07.prz 1 10/09/01

SQL - Criação de Tabelas

SQL DDL. Frederico D. Bortoloti

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL é uma linguagem de consulta que implementa as operações da álgebra relacional de forma bem amigável.

Linguagem SQL (Parte II)

Structured Query Language (SQL) Ambiente Simplificado de um SGBD

Structured Query Language (SQL) Aula Prática

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Introdução ao SQL. Aécio Costa

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

PL/pgSQL por Diversão e Lucro

Sistemas de Informação

Linguagem SQL. Comandos Básicos

Bancos de Dados I. Integridade semântica

SQL. Autor: Renata Viegas

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho

Comandos de Manipulação

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar

GBC043 - Sistemas de Banco de Dados Funções e Gatilhos no PostgreSQL

Comandos DDL. id_modulo = id_m odulo

Linguagem SQL Sub-linguagem DDL

SQL. Definição do Esquema da Base de Dados. Cristina C. Vieira Departamento de Engenharia Eletrónica e Informática

Modelo de Dados Relacional Restrições de um Banco de Dados Relacional

Programação SQL. Introdução

Relatório. Projecto de Base de Dados Parte 2. Turno: quinta-feira, 11:30 Grupo 25: André Gonçalves Rui Barradas Hélton Miranda 68477

(1,n) venda. (1,1) realizacao. cliente. (0,n) (1,1) contem. produto. Laboratório de Banco de Dados Exercicios

SQL: Definição de tabelas, Modificações à Base de Dados

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva -

1. Domínio dos Atributos

PL/pgSQL. Introdução. Introdução. Introdução


SQL - Banco de Dados. Disciplina: Banco de Dados. Professor: José Antônio. José Antônio - CEFET-RN 23/09/2015

Básico da Linguagem SQL. Definição de Esquemas em SQL. SQL(Structured Query Language)

SQL (Structured Query Language)

SQL. Prof. Márcio Bueno.

Banco de Dados Avançados Banco de Dados Ativo

SQL (Structured Query Language)

SQL Gatilhos (Triggers)

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

PHP INTEGRAÇÃO COM MYSQL PARTE 1

PostgreSQL. André Luiz Fortunato da Silva Analista de Sistemas CIRP / USP alf@cirp.usp.br

SQL (Structured Query Language)

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc.

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Pontifícia Universidade Católica do Rio Grande do Sul FACULDADE DE INFORMÁTICA PROGRAMA DE PÓS-GRADUAÇÃO EM CIÊNCIA DA COMPUTAÇÃO.

Modelo Relacional. Modelo Relacional. Conceitos Gerais: Relação

SQL - Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Programação com acesso a BD. Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

UNIVERSIDADE FEDERAL DE SANTA MARIA - UFSM COLÉGIO AGRÍCOLA DE FREDERICO WESTPHALEN BANCO DE DADOS II

Faculdade Pitágoras 16/08/2011. Curso Superior de Tecnologia: Banco de Dados Sistemas para Internet

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Faculdade Pitágoras. Curso Superior de Tecnologia: Banco de Dados. Disciplina: Banco de Dados Prof.: Fernando Hadad Zaidan SQL

Integridade dos Dados

SQL (STRUCTUREDQUERY LANGUAGE)

Banco de Dados I SQL DDL. Frederico D. Bortoloti freddb@ltc.ufes.br

Linguagem de Consulta - SQL

CREATE TABLE AUTOR ( cod_autor int not null primary key, nome_autor varchar (60) )

SQL SQL BANCO DE DADOS 2. Componentes do SQL (1) Componentes do SQL (2) DDL Criação de banco de dados. Padrões de SQL

A Linguagem SQL. Introdução a Banco de Dados DCC 011

SQL (Structured Query Language)

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Oracle 10g: SQL e PL/SQL

Structured Query Language (SQL)

BASES DE DADOS I LTSI/2. Universidade da Beira Interior, Departamento de Informática Hugo Pedro Proença, 2010/2011

Bases de Dados. Parte V: A Linguagem SQL

Linguagem de Consulta Estruturada (SQL)

SQL SQL. SQL Structured Query Language. Introdução

Linguagem SQL Parte I

4.6. SQL - Structured Query Language

SQL TGD/JMB 1. Projecto de Bases de Dados. Linguagem SQL

S Q L 31/03/2010. SQL - Structured Query Language Linguagem de Consulta Estruturada

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

EXEMPLOS DE COMANDOS NO SQL SERVER

ADMINISTRAÇÃO DE BANCO DE DADOS

S Q L 15/01/2013. Enfoques de SQL. Enfoques de SQL SQL. Usos de SQL. SQL - Origem/Histórico. Gerenciamento de Dados e Informação

SQL DML. Frederico D. Bortoloti

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Consultoria e Treinamento em Bancos de Dados Relacionais

Linguagem SQL (Parte I)

SQL. Histórico BANCO DE DADOS. Conceito. Padrões de SQL (1) Componentes do SQL (1) Padrões de SQL (2) (DDL: CREATE TABLE, CONSTRAINTS)

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

Núcleo de Pós Graduação Pitágoras

Fundamentos do Sistema Gerenciador de Banco de Dados

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE INTRODUÇÃO A SQL

Transcrição:

SQL DDL Criando Tabelas e Restrições Fernanda Baião UNIRIO Material parcialmente extraído a partir das notas de aula de Maria Luiza M. Campos, Arnaldo Rocha e Maria Cláudia Cavalcanti Comandos de Definição de Dados Create Drop Alter schema domain table view index assertion database Create Schema Coleção de tabelas, visões, domínios, funções e permissões CREATE SCHEMA [schema_name] [AUTHORIZATION owner_name] [ANSI CREATE statements [ ]] [ANSI GRANT statements [ ]] Ex. CREATE SCHEMA empresa AUTHORIZATION a01 CREATE TABLE empregado ( ) CREATE TABLE departamento ( ) 1

Create Table EMPREGADO Nome SNome Matrícula DataNasc Endereço Sexo Salário SuperMat Depto DEPARTAMENTO DeptoNome DeptoSigla MatrículaGerente DEPTO_LOCAL Depto Localização PROJETO PNome PCódigo PLocalização Depto TRABALHA_EM MatrículaEmp PCódigo Horas DEPENDENTE MatrículaEmp DependenteNome Sexo DataNasc Parentesco Create Table Para criar as tabelas CREATE [{LOCAL TEMPORARY GLOBAL TEMPORARY}] TABLE table_name (column_name datatype attributes [, ]) [CONSTRAINT constraint_type [constraint_name] [, ]] Attributes podem ser NOT NULL DEFAULT CONSTRAINT Tipos de dados char(n) varchar(n) ou char varying(n) int ou integer shortint float ou real double precision decimal(n,d) ou numeric(n,d) date time SQL:2003 BIGINT, MULTISET, XML 2

Create Table create table Empregado ( Nome varchar(15) not null, SNome varchar(15) not null, Matrícula char(9) not null, DataNasc date, Endereço varchar(30), Sexo char, Salário decimal(10,2), SuperMat char(9), Depto char(5) not null, primary key (Matrícula), foreign key (SuperMat) references Empregado(Matrícula), foreign key (Depto) references Departamento (DeptoSigla)); Create Table create table Departamento ( DeptoNome varchar(15) not null, DeptoSigla char(5) not null, MatrículaGerente char(9) not null, primary key (DeptoSigla), unique (DeptoNome), foreign key (MatrículaGerente) references Empregado (Matrícula)); create table Depto_Local ( Depto char(9) not null, Localização varchar(15) not null, primary key (Depto, Localização), foreign key (Depto) references Departamento (DeptoSigla)); Create Table create table Projeto ( PNome varchar(15) not null, Pcódigo int not null, PLocalização varchar(15), Depto char(5) not null, primary key (Pcódigo), unique (PNome), foreign key (Depto) references Departamento (DeptoSigla)); create table Trabalha_Em ( MatrículaEmp char(9) not null, Pcódigo int not null, Horas decimal(3,1) not null, primary key (MatrículaEmp, Pcódigo), foreign key (MatrículaEmp) references Empregado (Matrícula), foreign key (Pcódigo ) references Projeto (Pcódigo)); 3

Create Table create table Dependente ( MatrículaEmp char(9) not null, DependenteNome varchar(15) not null, Sexo char, DataNasc date, Parentesco varchar(8) not null, AuxilioCreche numeric(6,2), primary key (MatrículaEmp, DependenteNome), foreign key (MatrículaEmp) references Empregado (Matrícula)); Alter Table Acrescentar e remover atributos Ex. ALTER TABLE Dependente ADD Parentesco VARCHAR(8) DEFAULT `filho`; ALTER TABLE Dependente DROP AuxilioCreche; Alguns SGBDs oferecem MODIFY Ex. ALTER TABLE Dependente MODIFY Parentesco VARCHAR(8) DEFAULT `filho`; Geradores de Sequência Padronizado no SQL 2003 Para preencher valores de chaves Controle fica centralizado em um objeto O uso de chaves como cpf ou e-mail traz problemas CREATE SEQUENCE PARTSEQ AS INTEGER START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 10000 NO CYCLE 4

Usando/Modificando Geradores de Sequência Função built-in: NEXT VALUE FOR chamada no momento da inclusão INSERT INTO SHIPMENT ( PARTNUM, DECRIPTION, QUANTITY ) VALUES ( NEXT VALUE FOR PARTSEQ, 'Display', 20); IDENTITY Declarar tipos sequenciais na própria estrutura da tabela Função next value for fica implícita na inserção. GENERATED ALWAYS ou BY DEFAULT.. CREATE TABLE PARTS ( PARTNUM INTEGER GENERATED ALWAYS AS IDENTITY (START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 10000 NO CYCLE), DESCRIPTION VARCHAR (100), QUANTITY INTEGER INSERT INTO PARTS (DESCRIPTION, QUANTITY) VALUES ('WIDGET', 30) Restrições Domínio Chaves primárias e secundárias Chaves estrangeiras Check Assertion 5

Domínios apenas permite que um tipo de dados seja compartilhado por vários atributos. create domain Cor char (6) default??? constraint CoresValidas check ( value in ( azul, amarelo, verde,??? )) ;... create table T (..., cort Cor,... ) ; Restrições create table Empregado (... Depto char(5) not null default DESC, constraint Emppk primary key (Matrícula), constraint Superfk foreign key (SuperMat) references Empregado(Matrícula) on delete set null on update cascade, constraint EmpDept foreign key (Depto) references Departamento (DeptoSigla) on delete set null on update cascade ); Restrições create table Departamento (... MatrículaGerente char(9) not null default 888665555, constraint Deptopk primary key (DeptoSigla), constraint Deptosk unique (DeptoNome), constraint DeptoGerfk foreign key (MatriculaGerente) references Empregado (Matrícula) on delete set default on update cascade ); create table Depto_Local (... primary key (Depto, Localização), foreign key (Depto) references Departamento (DeptoSigla) on delete cascade on update cascade ); 6

Restrições check (expressão) create table SP ( S# char(5) not null, P# char(5) not null, Qtde integer not null, primary key (S#, P#), foreign key (S#) references S (S#) on delete cascade on update cascade, foreign key (P#) references P (P#) on delete cascade on update cascade, check (Qtde > 0 and Qtde < 5001) ); Restrições check pode ser usado ao invés de create domain create table P ( P# char(5) not null, CorP char(10) not null, primary key (P#), check (CorP in (`azul`, `verde`, `branco`)) ); not null pode ser declarado como um check check (CorP is not null) Restrições Cuidado com checks que envolvem mais de uma tabela! create table EMPREGADO ( matricula char(9) not null, nome varchar(20) not null, depto char(5) check (depto in (select deptosigla from DEPARTAMENTO)),... Inclusões e atualizações em EMPREGADO são verificadas, mas remoções em DEPARTAMENTO não o serão 7

Assertions General constraints Quando a restrição envolve mais de uma relação e precisa ser verificada sempre que qq das relações envolvidas mudar Ex. CREATE ASSERTION marajá CHECK (NOT EXISTS ( SELECT * FROM empregado e, trabalha_em t WHERE e.matricula = t.matriculaemp AND e.salario > 100000)) Modificando Restrições Atribuir nomes às restrições Add/drop restrições Exemplos: ALTER TABLE empregado DROP CONSTRAINT Deptosk ALTER TABLE empregado ADD CONSTRAINT nova CHECK sexo IN ( F, M ) ALTER DOMAIN Cor DROP CONSTRAINT CoresValidas ALTER DOMAIN Cor ADD CONSTRAINT CoresModa CHECK (values IN ( rosa,...)) DROP ASSERTION marajá Triggers Regras event-condition-action (ECA) Controle sobre os eventos Propósito mais amplo que restrições Ações podem ocorrer antes, depois ou ao invés do evento Referência aos valores antigos e novos 8

Triggers No PL/pgSQL um trigger pode ser criado através do comando CREATE FUNCTION Sem parâmetros RETURNS trigger Qdo a função é chamada como um trigger, variáveis especiais são criadas OLD, NEW, TG_NAME, TG_WHEN, TG_LEVEL, TG_OP, TG_RELID, TG_RELNAME, TG_NARGS, TG_ARGS[] Triggers CREATE TABLE emp ( empname text, salary integer, last_date timestamp, last_user text ); CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN IF NEW.empname IS NULL OR NEW.salary IS NULL THEN RAISE EXCEPTION 'empname or salary cannot be null'; END IF; IF NEW.salary < 0 THEN RAISE EXCEPTION 'cannot have a negative salary'; END IF; -- Remember who changed the payroll when NEW.last_date := 'now'; NEW.last_user := current_user; RETURN NEW; END; $emp_stamp$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); Triggers exemplos Irredutibilidade de salários CREATE OR REPLACE FUNCTION empresa.vsalario() RETURNS trigger AS $$ BEGIN IF NEW.salario < OLD.salario THEN RAISE EXCEPTION ' NAO SE PODE DIMINUIR SALARIO'; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; DROP TRIGGER atuemp ON empresa.empregado; CREATE TRIGGER atuemp BEFORE UPDATE ON empresa.empregado FOR EACH ROW EXECUTE PROCEDURE empresa.vsalario(); 9

Triggers exemplos o salário de um empregado tem de ser menor ou igual ao salário de seu supervisor. CREATE OR REPLACE FUNCTION empresa.vsalariosup() RETURNS trigger AS $$ BEGIN IF NEW.salario > (SELECT salario FROM empresa.empregado e WHERE e.matricula = NEW.supervisor) THEN RAISE EXCEPTION ' emp % nao pode ter salario superior ao do chefe', NEW.nomeemp; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE TRIGGER atuemp2 BEFORE INSERT OR UPDATE ON empresa.empregado FOR EACH ROW EXECUTE PROCEDURE empresa.vsalariosup(); Triggers exemplos o número de horas semanais que um empregado pode trabalhar em projetos tem de ser menor ou igual a 56 CREATE OR REPLACE FUNCTION empresa.vtothoras() RETURNS trigger AS $$ BEGIN IF 56 < NEW.tothoras + (SELECT sum(t.tothoras) FROM empresa.trabalhaem t WHERE t.empmat = NEW.empmat) THEN RAISE EXCEPTION ' emp % nao pode trabalhar mais de 56 horas', NEW.empmat; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; DROP TRIGGER vtothoras ON empresa.trabalhaem; CREATE TRIGGER vtothoras BEFORE INSERT OR UPDATE ON empresa.trabalhaem FOR EACH ROW EXECUTE PROCEDURE empresa.vtothoras(); Visões Definidas como uma consulta; Não existem fisicamente; Podem ser consultadas como uma tabela comum; Ex. CREATE VIEW Empregado_v AS SELECT nome, snome, matricula, depto FROM Empregado; Renomeando atributos CREATE VIEW Empregado_v (nomefunc, snomefunc, mat, dpt) AS... 10

Visões - atualizações Ao incluir tuplas, os atributos não usados na visão podem ser preenchidos com NULL ou com DEFAULT caso possível. Uma visão, para ser atualizável: não pode referenciar mais de uma tabela, seja através de comandos UNION ou na cláusula FROM não pode usar cláusulas DISTINCT, GROUP BY ou HAVING precisa incluir todos os campos not null que não apresentam valor default [WITH CHECK OPTION] Força que os comandos de modificação executados estejam de acordo com o critério do comando select CREATE VIEW Empregado_v AS SELECT nome, snome, matricula, depto FROM Empregado WHERE depto = SE9 WHITH CHECK OPTION 11