Вы находитесь на странице: 1из 19

Views

uma view uma tabela virtual. e

no existe sicamente na BD. a

denida ` custa de outras tabelas ou e a views.

sintaxe: CREATE VIEW <nome> AS <query>;

Exemplo Criar uma view que d o nome, ano e durao a ca de todos os lmes da Disney.
CREATE VIEW filmes_disney (nome,ano,realizador) AS SELECT nome, ano, nomeRealizador FROM Filmes WHERE nomeEstudio = Disney;

Agora, podemos fazer queries ` view filmes disney a tal e qual come se fosse uma tabela.
-- Quais os filmes da Disney feitos nos anos 90? SELECT * FROM filmes_disney WHERE ano>=1990 AND ano<=2000;

Outro exemplo
CREATE VIEW filmes_actores (filme, ano, estudio, realizador, actor) AS SELECT F.nome, F.ano, F.nomeEstudio, F.nomeRealizador, P.nomeActor FROM Filmes AS F, Participa AS P WHERE F.nome = P.nomeFilme AND F.ano = P.anoFilme;

Quais os estdios que j trabalharam com a u a Nicole Kidman?


SELECT estudio FROM filmes_actores WHERE actor = Nicole Kidman;

Indices

um ndice uma estrutura de dados que e e utilizada para acelerar as pesquisas.

os ndices aceleram as pesquisas mas tornam mais lentos os inserts, deletes, e updates. porque o SGBD para alm de modicar e tabelas, tambm tm de modicar a ese e trutura de dados.

muitos SGBDs criam ndices automaticamente para as chaves primrias, o caso a e do PostgreSQL.

Indices (cont.)

vamos supor que temos de procurar muitas vezes por lmes cuja durao seja maior ca que x minutos.

se no tivermos um a ndice, o SGBD ter de a fazer uma pesquisa sequencial por todos os tuplos da tabela.

se tivermos um ndice para o atributo duracao, o SGBD poder utilizar um mtodo de pesquisa a e mais sosticado. -- criar um ndice para duracao CREATE INDEX IndiceDuracao ON Filmes(duracao); -- apagar o ndice DROP INDEX IndiceDuracao;
5

Permisses/Autorizao o ca

cada objecto da BD tem um dono (o utilizador que criou o objecto).

por exemplo, se o utilizador go criar a tabela de lmes, apenas o go pode aceder e modicar os dados dessa tabela.

o SQL oferece um mecanismo de permisses o de modo a que o go possa dar permisses o a outros utilizadores.

Permisses/Autorizao (cont.) o ca Em SQL usa-se o comando GRANT. Existe vrios tipos de permisses: a o

SELECT

INSERT

DELETE

UPDATE

Exemplos Dar permisso ao utilizador a33333 para fazer a SELECTs na tabela de lmes. GRANT SELECT ON Filmes TO a33333;

Dar permisso ao utilizador a33333 para fazer a SELECTs, e UPDATEs ` tabela de lmes. a GRANT SELECT, UPDATE ON Filmes TO a33333;

Dar permisso ao utilizador a33333 para fazer a SELECTs, e UPDATEs apenas ` coluna aCores a GRANT SELECT, UPDATE(aCores) ON Filmes TO a33333;
8

Exemplos (cont.) Dar todas as permisses (SELECT, DELETE, o e UPDATE) ao utilizador a33333 para aceder e/ou modicar a tabela de lmes. GRANT ALL ON Filmes TO a44444;

Tambm se pode dar permisses a vrios utie o a lizadores. GRANT SELECT ON Filmes TO a33333, a44444, a55555;

Tambm se pode dar permisses a todos os e o utilizadores. GRANT SELECT ON Filmes TO PUBLIC;
9

Permisses/Autorizao (cont.) o ca O comando REVOKE retira as permisses. o

O comando REVOKE retira as permisses. o

Exemplo: REVOKE SELECT ON Filmes TO a33333;

10

Restrioes c J vimos vrios tipos de restrioes: a a c

PRIMARY KEY

UNIQUE

NOT NULL

FOREIGN KEY

11

Mais restrioes c Podemos ainda,

restringir valores ao n vel do atributo.

restringir valores ao n vel do tuplo.

restringir valores para a BD em geral.

12

Restrioes ao n c vel do atributo

coloca-se CHECK( <condio> ) a seguir ca ` denio do atributo. a ca

a condio pode referir o nome do respecca tivo atributo. Apenas pode referir outros atributos ou outras tabelas num subquery.

Exemplo: CREATE TABLE Actores( ... sexo CHAR CHECK (sexo IN (F,M)), nomeEstudio VARCHAR(30) CHECK ( nomeEstudio IN (SELECT nome FROM Estudios)), ... );
13

Restrioes ao n c vel do atributo (cont.) Podemos ainda,

o check s vericado quando existe um o e insert ou update no atributo respectivo.

Ex 1: CHECK( sexo IN (F,M)) verie cado cada vez que h um insert ou update a ao valor de sexo. se o valor no for F nem M, o SGBD a rejeita a modicao. ca

Ex 2: CHECK( nomeEstudio IN (SELECT nome FROM Estudios)) no vericado se apagara e mos um estdio da tabela de Estdios. u u diferente de uma chave estrangeira. e
14

Restrioes ao n c vel do tuplo

podemos ter um CHECK( <condio> ) ca como um elemento ` parte na denio de a ca uma tabela.

a condio pode referir-se a qualquer atribca uto da tabela. Apenas pode referir outros atributos ou outras tabelas num subquery.

novamente, o check s vericado em ino e serts e updates.

se a condio do check for falsa, o insert ca ou update do respectivo tuplo rejeitado. e

15

Exemplo Os lmes anteriores a 1939 no podem ser a a cores. CREATE TABLE Filmes( ... CHECK (NOT (ano<1939 AND aCores=TRUE)) );

16

Restrioes para a BD em geral c (Asseroes) c

uma assero uma restrio mais geral ca e ca que pode especicar vrias tabelas. a

uma vez denida, a assero faz parte do ca esquema da BD.

as asseroes so vericadas cada vez que c a h uma modicao no estado da BD. a ca

no est implementado em PostgreSQL. a a CREATE ASSERTION <nome> CHECK ( <condiao> ); c~

17

Exemplo No pode haver realizadores que tambm sea e jam actores (este exemplo obviamente ct e cio) CREATE ASSERTION NaoHaActoresRealizadores CHECK( NOT EXISTS (SELECT nome FROM Actores INTERSECT SELECT nome FROM Realizadores ) );

18

Outro exemplo A durao mdia de todos os lmes de um deca e terminado estdio no pode exceder 200 minu a utos. CREATE ASSERTION DuracaoMedia CHECK( 200 >= ALL (SELECT AVG(duracao) FROM Filmes GROUP BY nomeEstudio ) );

se zessemos apenas um check ao n vel da tabela de lmes, a restrio poderia falhar ca quando houvesse deletes, visto que as restrioes ao n c vel da tabela apenas so tesa tadas em inserts e updates.
19