terça-feira, 24 de janeiro de 2012

Restrição CHECK + VIEWS



Adicionando uma CHECK CONSTRAINT
Uma constraint  é uma restrição na qual você pode inserir em uma coluna. Algumas das constraints que você já viu incluem NOT NULL, PIMARY KE, FOREIGN KEY e UNIQUE.
Uma CHECK CONSTRAINT restringe quais valores você pode inserir na coluna. Ela utiliza as mesmas condicionais que uma clausula WHERE.
Você pode criar com CHECK CONSTRAINT no MySQL, mas ela não fará nada por você. MySQL as ignora.

Exemplo checkando o sexo:
ALTER TABLE meus_contatos
ADD CONSTRAINT CHECk sexo IN (‘M’, ‘F’);
 
Exemplo criação de tabela.
CREATE TABLE tabela_misteriosa
(
    coluna1 INT (4) CHECK (coluna1 > 200),
    coluna2 CHAR(1) CHECK (coluna2 NOT IN (‘x’, ‘y’, ‘z’)),
    coluna3 VARCHAR(3) CHECK (‘A’ = SUBSTRING(coluna3, 1,1)),   
    coluna4 VARCHAR(3) CHECK (‘A’ = SUBSTRING(coluna4, 1, 1)),
    AND ‘9’= SUBSTRING (coluna4, 2 1));
)

Coluna 1: Valores inseridos devem ser maior que 200.
Coluna 2: Quaisquer caracteres que não sejam x, y ou z podem ser inseridos.
Coluna 3: O primeiro caracteres da linha de texto deve ser A.
Coluna 4: O primeiro caracteres da linha de texto deve ser A e o segundo deve ser 9.

Podem utilizar todas as condicionais: AND, OR, IN, NOT, BETWEEN e outras.
Ainda pode combiná-las, como viu no exemplo acima. No entanto você não pode utilizar uma subconsulta.

VIEWS

Uma VIEW é basicamente uma tabela que só existe quando você utiliza o view em uma consulta. É considerada uma tabela virtual porque age como uma tabela, e as mesmas operações que podem ser executadas em uma tabela podem ser executadas em uma view.
Mas a tabela virtual não permanece no banco de dados.
Ela é criada quando utilizamos o banco de dados e depois é deletada.
O nome VIEW é a única coisa que permanece. Isto é bom porque cada vez que as linhas forem inseridas em um banco de dados, quando você utiliza uma VIEW e ela verá a nova informação.
Server para salvar consultas dentro do banco de dados. Consultas que precisam ser digitadas diariamente podem ser transformadas em VIEWS.
 
Exemplo de criação de uma VIEW

CREATE VIEW web_designers AS
SELECT mc.primeiro_nome, mc.sobrenome, mc.fone, mc.email
FROM meus_contatos mc
NATURAL JOIN emprego_desejado ed
WHERE ed.cargo = ‘Escritor Técnico’;


Para utilizar uma VIEW basta fazer um SELECT no nome da view ‘web_designers’.
Exemplo:
SELECT * FROM web_designers;

Por que as VIEWS são boas para seu banco de dados.

1 – Você pode evitar que a estrutura de seu banco de dados travem as aplicações que dependem de sua tabela.
2 – VIEWS tornam sua vida mais fácil ao simplificar suas consultas complexas em um simples comando.
3 – Você pode criar VIEWs que escondem informações que não são necessárias ao usuário.

Inserindo, atualizando e deletando com VIEWS

Você pode fazer mais do que um SELECT informações de suas tabelas com uma view. Em alguns casos pode UPDATE, ISNERT e DELETE seus dados da mesma maneira.

Duvida: Então posso criar uma view que me permitirá alterar de fato o que está na minha tabela?

Resposta: Você pode mais não vale a pena o trabalho.
Se sua view utilizar valores agregados (como SUM, COUNT e AVG), você não está apto a utiliza-la para alterar os dados. Também se suas views contiverem GROUP BY, DISTINCT ou HAVING, elas também não alterarão os dados.
Na maioria das vezes será mais fácil utilizar INSERT, UPDATE e DELETE da forma antiga.

View com CHECK OPTION

CHECK OPTION checa cada consulta que você tenha INSERT ou DELETE para verificar se o comando é permitido de acordo com a cláusula WHERE na sua VIEW.


Exemplo criando views com check option:
CREATE VIEW c_vinteecinco AS SELECT * FROM cofrinho
 WHERE moeda = ‘V’;

CREATE VIEW c_dez AS SELECT * from cofrinho
WHERE moeda = ‘D’ WITH CHECK OPTION;


O que acontece quando você ecuta cada uma destas consultas: INSERT, DELET e UPDATE.

INSERT INTO c_vinteecinco VALUES (‘’,’V’, 1993);
R: Esta consutla sera executada apropriadamente.

INSERT INTO c_vinteecinco VALUES (‘’,’D’, 1942);
R: Esta insere um novo valor na table, embora você tenha pensado que ela não poderia fazê-lo por causa da clausula WHERE.



Exemplo criando views com check option:
CREATE VIEW c_vinteecinco AS SELECT * FROM cofrinho
 WHERE moeda = ‘V’;


CREATE VIEW c_dez AS SELECT * from cofrinho
WHERE moeda = ‘D’ WITH CHECK OPTION;


O que acontece quando você ecuta cada uma destas consultas: INSERT, DELET e UPDATE.

INSERT INTO c_vinteecinco VALUES (‘’,’V’, 1993);
R: Esta consutla sera executada apropriadamente.

INSERT INTO c_vinteecinco VALUES (‘’,’D’, 1942);

R: Esta insere um novo valor na table, embora você tenha pensado que ela não poderia fazê-lo por causa da clausula WHERE.

INSERT INTO c_dez VALUES (‘’,’V’, 1993);
R: Este exibe um erro por causa das clausulas CHECK OPTION. Ela faz com que os dados inseridos em uma view sejam verificados mediante uma clausula WHERE antes de ser autorizada a ser inserida.

DELETE INTO c_vinteecinco
WHERE moeda = ‘N’
OR moeda = ‘U’
OR MOEDA = ‘D’;

R: Esta nao faz nada a tabela porque ela s’o procura por moedas com resultados para cada coluna moeda = ‘V’.

UPDATE c_vinteecinco SET moeda = ‘V’ WHERE moeda = ‘U’;
R: Esta não faz nada a tabela porque nenhum dos valores de moedas = V são retornados pela view c_vinteecinco.


CHECK OPTION adicionado a sua view diz ao Sistema SQL para checar cada comando que você tenha utilizar INSERT ou DELETE para verificar se o comando é permitido de acordo com a clausula WHERE na sua VIEW. Então como o CHECK OPTION afeta seus comandos INSERT e UPDATE?

Quando você usou CHECK OPTION no exercício anterior, seus dados seriam rejeitados no seu comando INSERT se não tivessem satisfeito a condição WHERE na view c_dez. Se usar UPDATE também terá um erro.

Ex: UPDATE c_dez SET moeda = ‘X’;

Em MySQL, você pode imitar uma CHECK CONSTRAINT utilizando CHECK OPTION.

Uma view atualizável inclui todas as colunas NOT NULL das tabelas a qual faz referencia.

Para visualizar toas as VIEWS e suas estruturas usar oscomando:
SHOW TABLES; (Visualiza todas tabelas).
DESC nome_view; (Visualiza a estrutura da VIEW).

Para excluir uma view o comando e:
DROP VIEW c_dez;

CHECK CONTRAINTS e views ajudam a manter o controle quando se tem múltiplos usuários.