.:: ELC119 - Fundamentos de Bancos de Dados ::.

Aluno: Lucas Antunes Tambara
Matrícula: 2710246
E-mail: ltambara@inf.ufsm.br
Disciplina: Fundamentos de Bancos de Dados (ELC119)
Semestre: 2/2008

.:: Recursos complementares em SQL ::.

Enunciados: link.

Resolução:


-Tente eliminar do banco de dados o empregado de código 3. Por que essa operação provoca um erro?
DELETE FROM empregado WHERE codEmp=3;
Não é possível deletar o empregado porque seu código é chave estrangeira em outra tabela, neste caso, na tabela 'dependente'. Sua exclusão causaria a perda da integridade do banco de dados.

-Execute novamente o comando SQL para eliminar o empregado de código 3.
DELETE FROM empregado WHERE codEmp=3.

-Execute novamente a consulta abaixo e veja o que aconteceu devido à alteração na regra de integridade:
Com a alteração das restrições, ao deletar uma linha da tabela 'empregado', as linhas das outras tabelas onde a chave primária da linha 'empregado' que foi deletada era chave estrangeira, também foram removidas, mantendo a integridade do banco de dados.

-Teste a restrição inserindo o seguinte registro:
INSERT INTO empregado VALUES (10,'Fulano','1998-01-01','Endereco','M',0,null,1);
Não foi possível inserir tal registro porque foi adicionada uma restrição a tabela 'empregado' onde fica impossível inserir um empregado sem salário.

-Insira uma restrição na tabela "trabalhaEm", para que horas trabalhadas em projetos não excedam 20h. Por que esse comando provoca um erro?
ALTER TABLE trabalhaem ADD CONSTRAINT chkhoras CHECK(horas<20);
Este comando provoca um erro porque já há entradas na tabela 'trabalhaem' com horas maiores que 20.

-Use esta visão para obter os nomes dos empregados que trabalham no projeto denominado "Business Intelligence".
SELECT nome FROM trabalhadores WHERE titulo='Business Inteligence';

-Crie uma visão sobre a tabela "empregado" que permita esconder o campo salário.
CREATE VIEW empregado2 AS SELECT empregado.codemp, empregado.nome, empregado.datanasc, empregado.endereco, empregado.sexo, empregado.codsuperv, empregado.coddepto FROM empregado;
SELECT * FROM empregado2;