Restrições de Integridade Integridade Semântica - DIMAp
Restrições de Integridade Integridade Semântica - DIMAp
Restrições de Integridade Integridade Semântica - DIMAp
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
RIs no SQL-Server<br />
• Cláusula Check<br />
– não permite subconsultas<br />
– RIs que necessitam relacionar tuplas da mesma tabela ou<br />
<strong>de</strong> outras tabelas <strong>de</strong>vem ser implementadas através <strong>de</strong><br />
gatilhos<br />
– exemplo: salário do empregado <strong>de</strong>ve ser menor que o<br />
salário do gerente<br />
create table empregados<br />
(...<br />
check(salario <<br />
(select salario<br />
from Empregados e<br />
where e.codEmp = codGer)<br />
)<br />
create trigger SalarioGer<br />
on empregados<br />
after insert,update as<br />
if exists<br />
(select * from empregados e1 join<br />
inserted e2 on e1.codEmp =<br />
e2.codGer and e2.salario ><br />
e1.salario)<br />
rollback transaction<br />
RIs no SQL-Server<br />
• Assertivas<br />
– não são suportadas<br />
– estas RIs <strong>de</strong>vem ser implementadas através <strong>de</strong> gatilhos<br />
– exemplo: soma <strong>de</strong> orçamentos e empréstimos não po<strong>de</strong><br />
ultrapassar 50000000,00<br />
create assertion<br />
ControleDespesas<br />
check (<br />
(select sum(ValorTotal)<br />
from Empréstimos) +<br />
(select sum(Orçamento)<br />
from Departamentos)<br />
50000000.00<br />
rollback transaction<br />
drop table temp1<br />
drop table temp2<br />
Obs.: prever um trigger<br />
também para Departamentos<br />
11