- Banco de Dados RelacionalÍndices
- Banco de Dados RelacionalRestrições de IntegridadeIntegridade Referencial
- SQLDDL
- SQLDML
1 CREATE TABLE candidato (
2 numero smallint NOT NULL,
3 nome character varying (40),
4 cargo smallint,
5 votos integer );
6 CREATE TABLE cargo (
7 pk_cargo smallint NOT NULL,
8 nome character varying (40));
9 CREATE TABLE voto (
10 pk bigint NOT NULL,
11 secao integer,
12 v_cargo smallint,
13 v_candidato integer);
14 INSERT INTO cargo (pk_cargo, nome) VALUES (1, 'Presidente');
15 INSERT INTO cargo (pk_cargo, nome) VALUES (2, 'Governador');
16 INSERT INTO cargo (pk_cargo, nome) VALUES (3, 'Prefeito');
17 INSERT INTO candidato (nome, numero, votos, cargo) VALUES ('Joao', 20, 100, 1);
18 INSERT INTO candidato (nome, numero, votos, cargo) VALUES ('Maria', 12, 10, 2);
19 INSERT INTO voto (secao, v_cargo, v_candidato, pk) VALUES (1, 1, 12, 1);
20 INSERT INTO voto (secao, v_cargo, v_candidato, pk) VALUES (1, 2, 20, 2);
21 INSERT INTO voto (secao, v_cargo, v_candidato, pk) VALUES (2, 2, 20, 2);
22 INSERT INTO voto (secao, v_cargo, v_candidato, pk) VALUES (2, null, 12, 4);
23 INSERT INTO voto (secao, v_cargo, v_candidato, pk) VALUES (1, 1, null, 5);
24 SELECT v.secao, c.nome FROM voto AS v, candidato AS c where c.numero = v.v_candidato ;
25 SELECT c.nome, count (*) FROM voto AS v INNER JOIN candidato AS c on c.numero = v.v_candidato
26 GROUP BY c.numero, c.nome;
27 SELECT c.numero, ca.nome, count (*)
28 FROM voto AS v INNER JOIN candidato AS c ON c.numero = v.v_candidato
29 INNER JOIN cargo AS ca ON v.v_cargo = ca.pk_cargo GROUP BY ca.nome, c.numero;
30 ALTER TABLE ONLY candidato ADD CONSTRAINT candidato_pk PRIMARY KEY (numero);
31 ALTER TABLE ONLY cargo ADD CONSTRAINT cargo_pk PRIMARY KEY (pk_cargo);
32 ALTER TABLE ONLY voto ADD CONSTRAINT voto_pk PRIMARY KEY (pk);
33 CREATE INDEX fki_candidato_cargo_fk On candidato (cargo);
34 ALTER TABLE ONLY candidato
35 ADD CONSTRAINT candidato_cargo_fk FOREIGN KEY (cargo) REFERENCES cargo (pk_cargo);
36 ALTER TABLE ONLY voto
37 ADD CONSTRAINT candidato_fk FOREIGN KEY (v_candidato) REFERENCES candidato (numero);
38 ALTER TABLE ONLY voto
39 ADD CONSTRAINT voto cargo fk FOREIGN KEY (v cargo) REFERENCES cargo (pk cargo);
Ainda considerando que o script SQL apresentado esteja sintaticamente correto, julgue os itens seguintes.
I O comando da linha 22, se executado novamente após a execução do script, provocará erro de violação de restrição de integridade referencial.
II A consulta da linha 24 retornará um resultado contendo 4 linhas.
III A consulta das linhas 25 e 26 retornará um resultado contendo 2 linhas e 2 colunas, em que a coluna “nome” sempre apresenta o valor 2.
IV A consulta das linhas de 27 a 29 retornará um resultado vazio.
V O comando da linha 33, se removido da sua posição atual e inserido entre os comandos das linhas 13 e 14, provocaria uma diferença relevante no tempo de execução do script.
Estão certos apenas os itens