A (II) está correta, por exemplo, no caso abaixo, em que a chave primária é gerenciada pelo SGBD:
mysql> CREATE TABLE animals (
-> id MEDIUMINT NOT NULL AUTO_INCREMENT,
-> name CHAR(30) NOT NULL,
-> PRIMARY KEY (id)
-> );
Query OK, 0 rows affected (0.01 sec)
mysql> INSERT INTO animals (name) VALUES
-> ('dog'),('cat'),('penguin'),
-> ('lax'),('whale'),('ostrich');
Query OK, 6 rows affected (0.00 sec)
Records: 6 Duplicates: 0 Warnings: 0
mysql> CREATE VIEW mamales AS SELECT * FROM animals WHERE name IN ('dog','cat','whale');
Query OK, 0 rows affected (0.02 sec)
mysql> INSERT INTO mamales (name) VALUES ('shark');
Query OK, 1 row affected (0.01 sec)
mysql> SELECT * FROM animals;
+----+---------+
| id | name |
+----+---------+
| 1 | dog |
| 2 | cat |
| 3 | penguin |
| 4 | lax |
| 5 | whale |
| 6 | ostrich |
| 7 | shark |
+----+---------+
7 rows in set (0.00 sec)
(III) Uma visão com múltiplas tabelas pode ser atualizável caso:
* o campo a ser atualizado seja obtido exatamente de uma das tabelas base
* chave primária desta tabela base estiver incluída na visão ou gerada automaticamente
III - É impossível fazer update em visões geradas por junções em mais de uma tabela.
Eu não entendi porque esse item está errado, uma vez que diz o Silberchatz que as views definidas sobre múltiplas tabelas usando joins geralmente não são atualizaveis, porém, uma view pode ser atualizável se todas as condições a seguir forem verdadeiras:
- a clausula from possui apenas 1 relacao de BD;
Ai é a dúvida se é em joins vai ter mais de uma relação como eu vou conseguir atualizar seguindo essa regra ? Sendo que no item fala em "junções em mais de uma tabela." ou seja terá mais de uma tabela.
Silberchatz acrescenta q as views definidas sobre multiplas tabelas usando joins "geralmente" nao sao atualizaveis(O q torna a alternativa III errada). Porem, uma view pde ser atualizavel se todas as condicoes a seguir forem verdadeiras:
- a clausula from possui apenas 1 relacao de BD;
- a clausula select contem apenas nomes de atributo da relacao e nao possui quaisquer expressoes, agregadas ou especificação distinct
- qqr atributo nao listado na clausula select pde ser definido em nulo;