Restrições de Integridade Complexas

Documentos relacionados
Bases de Dados 2012/2013 Restrições de Integridade em SQL. Helena Galhardas 2012 IST. Bibliografia

Linguagem PL/SQL e Triggers

Prof. Josenildo Silva

LINGUAGEM SQL Linguagem usada em SGBD para: Definir estrutura de dados; Modificar dados em um banco de dados; Especificar restrições de segurança; Rea

Restrições de Integridade Semântica

Criando Restrições em Tabelas

Uma solução possível para garantir, em ambiente APEX, a consistência duma estrutura ISA, total e disjuntiva.

Page 1. Restrição de Integridade. TRIGGER e SEGURANÇA. Restrições estáticas - Restrições dinâmicas. Tipos de regras em um SGBD

ESTUDO DE CASO EM PL/SQL

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

Aula 6 BD1 Modelo Relacional. Profa. Elaine Faria UFU

Lista 02 Sistema de Banco de Dados CAP 241 Computação Aplicada I

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

INE 5323 Banco de Dados I

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

Material Teórico. Procedures, Functions, Exceptions e Triggers. Responsável pelo Conteúdo: Prof. Ms. Alexander Gobbato Albuquerque

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

SQL Gatilhos (Triggers)

SQL CREATE DATABASE. MySQL, SQL Server, Access, Oracle, Sybase, DB2, e outras base de dados utilizam o SQL.

Tratamento de Exceções

SQL Básica DDL. Prof. Marcos A. Schreiner. 21 de outubro de Curso de Licenciatura em Computação

Programação SQL. Introdução

Linguagem SQL Restrições, Triggers e Views

Considere as Relações Funcionários (F) e Dependentes (D), com o seguinte esquema simplificado:

Definição do esquema da base de dados. o esquema da BD é composto pelas definições de todas as tabelas da BD.

TRIGGER e SEGURANÇA. Prof. Edson Thizon

Restrições ao Domínio Integridade Referencial Asserções Triggers Segurança e Autorizações

Prova de Fundamentos de Bancos de Dados 2 a Prova

TECNOLOGIA DE BASES DE DADOS Linguagem PL/SQL e Triggers

Bancos de Dados I. Integridade semântica

Avisos. Sumário. Atividade em lab Aula 29. Atividade em lab Aula 29. Programando com SQL Triggers EXERCÍCIO LAB SP. Vista da segunda prova

Linguagem SQL (Parte II)

Banco de Dados Avançados Banco de Dados Ativo

SQL Básica. Andre Noel


PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

Banco de Dados I Introdução SQL

Sistemas de Informação

Programando em SQL. Triggers, Stored Procedures e funções. Profa. Késsia Marchi

Oracle PL/SQL Overview

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

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

Aula 06 Sistemas Embarcados LT38C

Administração de Banco de Dados

O Modelo Relacional. Criando relações em SQL

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

Banco de Dados II. PL/SQL - Procedures -Cursor - Funções. Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

Disciplina: Banco de Dados Tema: SQL Parte 2

O Modelo Relacional. Database Management Systems, R. Ramakrishnan (tradução, autorizada, de Anna & Mario Nascimento)

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

modelo introduzido por E. F. Codd Meados da década de 70: protótipos. INGRES (UC Berkeley, 73 77) System R (IBM Research at San Jose, 74 78)


Manipulação de Dados com SQL

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

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

SQL Procedural. Josino Rodrigues Neto

Oracle Database 10g: Fundamentos de SQL e PL/SQL

Monitoria GDI. Aula Prática. OR (Aula 1)

Banco de Dados II. PL/SQL Introdução. Segurança: Introdução; Controle de Acesso; Criptografia; Recursos de SQL.

Importar e Exportar Dados

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

Banco de Dados. Colégio Singular. Curso Profissionalizante: Informática

Prova de Fundamentos de Bancos de Dados 2 a Prova

Introdução a Linguagem SQL: Comandos Básicos e Avançados Parte 2

Administração de Banco de Dados

Oracle 10g: SQL e PL/SQL

NORMA TÉCNICA E PROCEDIMENTOS PARA REALIZAR ALTERAÇÕES NO BANCO DE DADOS CORPORATIVO

A linguagem SQL

TECNOLOGIA EM SISTEMAS PARA INTERNET PROJETO DE BANCO DE DADOS

Álgebra Relacional. Linguagens de consultas relacionais

Bancos (Bases) de Dados

SQL DDL Criando Tabelas e Restrições

Monitoria GDI Aula Prática. DML + PL/SQL parte 1

Transcrição:

SISTEMAS DE INFORMAÇÃO E BASES DE DADOS Restrições de Integridade Complexas António Manuel Silva Ferreira UNIVERSIDADE DE LISBOA FACULDADE DE CIÊNCIAS DEPARTAMENTO DE INFORMÁTICA asfe@di.fc.ul.pt

Sumário Definição de novos domínios e Upos Restrições de integridade com CHECKs complexos No âmbito de uma tabela Em asserções, independentemente das tabelas Restrições de integridade com triggers Evento, condição, e ação Bases de dados auvas Usos de triggers para além das restrições de integridade CHECKs vs. triggers 2

Restrições de Integridade Complexas Modelo relacional fornece restrições de integridade CURED Coluna, User- defined, Referencial, EnUdade (ou chave), e Domínio Ex. ID tem domínio INTEGER, com até 6 dígitos, e posiuvo Suporte para restrições complexas Domínio: definição de domínios para além dos fornecidos pelo SGBD Coluna: uso de SELECTs em CHECKs de tabelas User- defined: definição de asserções e triggers Asserções CHECKs independentes de tabelas Triggers Procedimentos invocados aquando de escritas em tabelas 3

Definição de Novos Domínios e Tipos Novos domínios podem ser definidos a parur de outros Ex. novo domínio com números inteiros entre 1 e 10 CREATE DOMAIN ratingval INTEGER DEFAULT 1 CHECK (VALUE >= 1 AND VALUE <= 10) Aplicação do novo domínio em coluna de tabela CREATE TABLE Sailors (..., rating ratingval,...) Se INSERT em Sailors omitir o valor de rating, este é preenchido com 1 Valores de rating podem ser comparados com os de colunas INTEGER Considerada uma limitação conceptual, pois domínios são diferentes Comando CREATE TYPE define um novo tipo de dados abstrato Necessita de métodos próprios para suportar comparações, adições, mesmo que baseado em domínios simples, como INTEGER 4

SELECTs em CHECKs de Tabelas 1 Definição de tabelas pode incluir cláusulas CHECK CREATE TABLE Sailors (sid INTEGER,..., CHECK (sid > 0)) Restrições mais complexas podem ter de consultar outras tabelas Ex. reservas de barcos, exceto para barcos com nome Interlake CREATE TABLE Reserves ( sid INTEGER, bid INTEGER, day DATE, PRIMARY KEY (sid, bid), FOREIGN KEY (sid) REFERENCES Sailors(sid), FOREIGN KEY (bid) REFERENCES Boats(bid), CONSTRAINT nointerlakereserves CHECK ('Interlake' <> (SELECT B.bname FROM Boats B WHERE (B.bid = Reserves.bid)))) Cada INSERT ou UPDATE em Sailors tem de sausfazer o CHECK 5

SELECTs em CHECKs de Tabelas 2 Outro exemplo de restrição complexa Número de marinheiros e de barcos não pode ultrapassar os 100 Ex. se já exisurem 50 barcos, só são permiudos 50 marinheiros CREATE TABLE Sailors ( sid INTEGER,... CONSTRAINT smallclub CHECK ( (SELECT COUNT(S.sid) FROM Sailors S) + (SELECT COUNT(B.bid) FROM Boats B) < 100)) Problemas Restrição aplica- se igualmente a Sailors e Boats Decisão de colocar restrição em Sailors é arbitrária Enquanto Sailors esuver vazia, condição não precisa de ser verificada Número de barcos pode crescer indefinidamente (e ficar superior a 100) 6

Asserções CHECKs que não estão associados a qualquer tabela Definidas ao mesmo nível das tabelas no esquema de dados Apropriadas para restrições que abrangem múliplas tabelas Exemplo para a restrição complexa da página anterior Número de marinheiros e barcos não pode ultrapassar os 100 CREATE ASSERTION smallclub CHECK ( (SELECT COUNT(S.sid) FROM Sailors S) + (SELECT COUNT(B.bid) FROM Boats B) < 100) Condição verificada para cada INSERT ou UPDATE em Sailors ou Boats Podem ser muito complexas Todas as tabelas do esquema podem fazer parte do CHECK Por razões de eficiência, maioria dos SGBDs não suporta asserções 7

Trigger Procedimento invocado aquando de escritas numa tabela Evento de escrita ativa condição que permite, ou não, execução de ação Evento: escrita na base de dados que faz auvar o trigger Tipos de escrita: qualquer combinação de INSERT, UPDATE, e DELETE Escritas podem ser numa tabela inteira ou em colunas específicas Opções de auvação do trigger Antes ou depois da escrita se concreuzar Uma só vez para um bloco inteiro de escritas ou para cada linha escrita Condição (opcional): verificada aquando da auvação do trigger Ação: código do procedimento executado se condição sausfeita Em Oracle, procedimento codificado na linguagem PL/SQL PL/SQL = Procedural Language/SQL, com forte integração com a SQL 8

Exemplo de Trigger CREATE TRIGGER verifica_aumento_vencimento BEFORE UPDATE OF vencimento ON empregado FOR EACH ROW WHEN (new.vencimento > old.vencimento) DECLARE vencimento_do_chefe NUMBER := NULL; BEGIN - - Supõe- se que só existe um chefe. SELECT vencimento INTO vencimento_do_chefe FROM empregado WHERE (categoria = chefe ); IF (:new.vencimento > vencimento_do_chefe) THEN RAISE_APPLICATION_ERROR(- 20001, Não pode ganhar mais que o chefe! ) END IF; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(- 20002, A empresa não tem chefe! ); WHEN OTHERS THEN RAISE; END; Evento que auva o trigger Condição após auvação (opcional) Ação do trigger (procedimento) Variável new guarda a linha que resultaria do UPDATE, e old refere a linha antes do UPDATE Exceções, se lançadas, cancelam o UPDATE 9

Bases de Dados AIvas e Usos de Triggers Base de dados auva Base de dados com triggers associados Triggers Upicamente definidos (ou autorizados) pelo DBA DBA = database administrator Razão: consequências do uso de triggers podem ser dixceis de entender Vários triggers podem ser auvados em simultâneo, por ordem arbitrária Ação de um trigger pode auvar outros triggers risco de recursividade! Usos {picos de triggers Restrições de integridade complexas Ex. com vários passos de pesquisa em tabelas Autorizações de acesso e auditoria de escritas em tabelas Ex. que uulizadores escreveram em certa tabela e a que horas Réplicas síncronas de tabelas 10

Trigger para Autorização Especial CREATE TRIGGER em_horário_trabalho BEFORE INSERT OR UPDATE OR DELETE ON empregado DECLARE data_atual DATE := SYSDATE; hora_atual NUMBER(2) := NULL; dia_semana CHAR(3) BEGIN := NULL; hora_atual := TO_CHAR(data_atual, HH24 ); dia_semana := TO_CHAR(data_atual, DY ); IF (hora_atual NOT BETWEEN 8 AND 24) THEN RAISE_APPLICATION_ERROR(- 20001, Fora de horas! ); ELSIF (dia_semana IN ( SAT, SUN )) THEN RAISE_APPLICATION_ERROR(- 20002, Fim de semana! ); END IF; EXCEPTION WHEN OTHERS THEN RAISE; END; Trigger impede tabela empregado de ser modificada fora do horário normal de trabalho Trigger pode lançar várias exceções que, não sendo tratadas, fazem com que SGBD cancele a operação de escrita sobre a tabela empregado 11

CHECKs vs. Triggers CHECKs DeclaraUvos e fáceis de entender (não requerem saber programar) Bom desempenho, pois SGBD é que decide como verificar condições Restrições de integridade verificadas em permanência Triggers Para quaisquer operações de escrita na base de dados Procedimentais, sendo necessário saber programar Desempenho depende da qualidade do programador Sempre que possível, devem ser usadas restrições de integridade declarauvas Restrições de integridade verificadas para escritas específicas em tabelas Necessário cuidado para cobrir todos os cenários possíveis de escrita de dados Maior gama de usos, para além das restrições de integridade Ex. autorizações de acesso, auditoria, replicação de dados, 12

Elementos de Estudo Raghu Ramakrishnan e Johannes Gerhke, Database Management Systems, McGraw- Hill, 3ª edição, 2003 Secções 5.7 a 5.9 Steven Feuerstein e Bill Pribyl, Oracle PL/SQL Programming, O Reilly, 6ª edição, 2014 Capítulo 19 13