Perguntas-respostas úteis

1) O livro do Raghu pode ser usado em vez do do Silberchatz para estudar para a cadeira?

Resposta Só o livro do Raghu não chega. Cuidado porque as notações são diferentes no ER e álgebra relacional, por exemplo. A notação seguida por nós nas correcções de testes, exames, projecto é a do Silberchatz.

2) O que são as restrições de integridade que não podem ser modeladas nos diagramas ER, de classes UML, ou relacional?

Resposta Restrições de integridade adicionais ou, dito de outro modo, o conhecimento que não se contempla em cada um destes modelos é o conjunto de requisitos do problema inicial (do enunciado) que não se consegue modelar com as primitivas de cada uma destas linguagens.

3) O que é o conhecimento que se perde quando se passa de ER para diagrama de classes UML?

Resposta São os requistos de problema que se conseguiam modelar com as primitivas de ER e que não se conseguem modelar com o diagrama de classes. Por exemplo, se em ER, existir uma entidade fraca, no diagrama de classes não a consigo modelar exactamente.

4) Que notação usar para o diagrama de classes UML, a do livro do Silberchatz ou a dos slides?

Resposta A notação a seguir é a dos slides adicionais que estão acessíveis através do link do planeamento, ou seja o ficheiro UML.ppt. Esta notação é a que é seguida pela maior parte dos livros sobre UML.

A notação apresentada pelo Silberchatz é ligeiramente diferente nomeadamente no que diz respeito às hierarquias.

5) Quando criamos as tabelas no Oracle para o projecto, incluimos só as instruções "create table"?

Resposta Quando criarem as tabelas em Oracle, devem incluir as instruções SQL para garantir todas as restrições de integridade. Isto significa que, para além das chaves primárias e estrangeiras, devem provavelmente ter que incluir as cláusulas "not null", "check" e triggers.

6) O que significa o modelo relacional simplificado que é pedido no ponto 3 da primeira parte do projecto?

Resposta O modelo relacional simplificado é composto pelo nome da relação e os nomes dos atributos assim como todas as suas restrições de integridade. A palavra "simplificado" apenas quer dizer que não é necessário colocar o domínio (tipo) de cada atributo. Notem, no entanto que todas as restrições de integridade (primária, estrangeira, not null, valores por omissão e outras) devem ser indicadas. As chaves primárias apresentam-se sublinhadas. As chaves estrangeiras podem ser representadas através da notação: atributo: FK(tabela). Os atributos de preenchimento obrigatório através de: not null(atributo), os atributos sem duplicados através de unique(atributo). As outras restrições de integridade podem ser ditas em texto, com uma notação mais ou menos formal.

7) Qual a notação de diagrama de classes UML que deve ser seguida para as hierarquias e relações ternárias?

Resposta A notação para as hierarquias é a que está nos slides de UML (ficheiro UML.ppt acessível a partir do planeamento). Por omissão, uma hierarquia é "disjoint" e "incomplete (ou participação parcial). Se fôr "overlap" deve ser acrescentada a anotação "{overlapping}" junto aos ramos da hieraquia. Se fôr "complete", deve ser acrescentada a anotação "{complete}" junto aos ramos da hierarquia.

A notação para associações ternárias está no livro de UML do Alberto Silva (para consulta nas bibliotecas do DEI e do Tagus) e pode ser feita de dois modos: ou com uma relação ternária representada por um losango com uma classe, ou com uma classe e relações de 1:m entre esta classe e as classes argumento da associação.

8) No diagrama de classes UML devem indicar atributos que sejam chaves estrangeiras de outras classes ou as relações entre elas já implicam que tenham chaves estrangeiras?

Resposta No diagrama de classes, não se representam as chaves estrangeiras. Estão implicitas nas associações entre classes.

9) Na pergunta 1.4.E da 1ª parte do projecto, quando se referem ao menor nº de produtos em determinada factura querem dizer com isso: -menor nº de produtos diferentes; ou - menor quantidade total de produtos vendidos independentemente do produto em si?

Resposta Menor número de produtos.

10) Na pergunta 1.4.F da 1ª parte do projecto, gostaríamos de saber se os produtos, citados em determinada factura, têm que ser todos de diferentes armazéns ou basta um deles ser de um armazém diferente. Ex: Factura 1: Produto 1 -> armazém1; Produto 2-> armazém 1; Produto 3-> armazém 2. Neste caso temos a factura 1 com produtos de armazéns diferentes, mas o produto 1 e 2 provêem do mesmo armazém.

Resposta Sim, não há problema. Basta haver dois produtos que venham de armazéns diferentes.

11) Irá haver discussão da 1ª parte do projecto? Quando?

Resposta As discussões do projecto cobrem a 1ª e 2ª partes e serão realizadas na 1ª semana de Janeiro.

12) A pergunta 1.4.G é para ser feita para uma cidade fixa ou para todas as cidades na base de dados?

Resposta Para uma cidade fixa. Arbitrem uma.

13) A nota da 1ª entrega é informativa ou vai contar mesmo para a avaliação?

Resposta A nota do projecto é dada na discussão e é composta por uma componente sobre a 1ª parte e uma componente sobre a 2ª parte (cada uma vale 50%). Na discussão, tem-se em conta os relatórios, os testes da 2ª parte e o desempenho dos alunos durante a discussão.

13) Na interrogação H, quando um utilizador gN cria uma vista e dá permissões ao cliente (cligN), como é que este lhe consegue aceder?

Resposta A vista criada é um objecto do utilizador gN. Desta forma, o cliente identifica-a por "gN.nomevista".

14)Onde se vai buscar o driver JDBC para o Oracle?

Resposta O driver JDBC para Oracle nos PCs do laboratório, é: c:\oracle\ora92\jdbc\lib\ojdbc14.jar (se usar jdk1.4.*). Ver tb. Material de Suporte no link do Projecto.

15) No método CompraProdutos não se recebe a data que irá constar da factura, é suposto receber esta data ou não?

Resposta A data da factura pode ser arbitrada. Em termos de testes, o que será feito é que colocar uma data fixa para todas as facturas inseridas.

16) A classe produtoInfo não devia ter um id do armazém e uma data de entrega? No método compraProduro é suposto preencher a tabela "provem" mas não temos esse campos para a preencher. Penso que o id armazém terá de ser escolhido por nós na base de dados e, nesse caso ficará a faltar a data.

Resposta O armazém de onde retirar a quantidade de um produto, tal como é dito no enunciado, é escolhido como sendo aquele que tem mais unidades em stock. A data de entrega pode ser arbitrada por vós. Os testes fixarão uma data tal como para a data da factura.

17) Na Classe Pessoa número de telefone está como string e fax como inteiro, é suposto?

Resposta Devem converter os tipos de dados.

18) No método compraProdutos caso o Cliente e o Destinatário sejam iguais o Destinatário vem a null? ou recebemos dois objectos?

Resposta Recebem 2 objectos iguais.

19) O que acontece se nenhum armazém tem quantidade suficiente para servir um produto?

Resposta A factura não deve ser inserida e retorna null.

20) O que deve ser feito no compraProduto quando a quantidade pedida de um produto não é satisfeita por um armazém, mas por vários?

Resposta Devem ir buscar as quantidades parciais aos vários armazéns, começando pelo armazém com mais quantidade, tal como diz no enunciado.

21) Na alínea 2.2 D): se um id de autor / artista não existir o que fazer? Actualizar o seu estado para autor / artista, apagar o produto, não relacionar este produto com o 'dono' em falta...? - caso a categoria não exista é suposto inseri-la, retornar falso?

Resposta Nestes casos, o autor/artista não existe ou a categoria não existe, não deve ser inserido o produto e o método insereProduto retorna false.

22) No método compraProdutos, nos comentários, diz que se existe erro retorna null e noutros sítios do comentários diz que retorna false? Qual o certo?

Resposta Existe uma gralha nos comentários. Se o método devolve uma classe Factura, caso exista um erro deve retornar null.

22) No método compraProdutos, o que acontece quando so existe parte da quantidade pretendida pelo comprador? Vender o que existe, ficando o(s) armazen(s) com 0 dessa quantidade ou nao vender nada e retornar?

Resposta Se não existe em armazém (1 ou vários) a quantidade pedida, não deve ser vendido o produto nem nada da factura.

23) podemos criar types e funções para auxiliar os stored procedures?

Resposta sim, desde que o código esteja todo no v/ programa Java e a criação de todos os objectos seja feita via JDBC.

24) Como passar um arraylist para dentro de um stored procedure em PL/SQL?

Resposta Ver no link "Projecto", item "Material de Suporte", o link para a documentação sobre "varray".

25) No método compraProdutos: Quando o método de pagamento é cartao e nos é passado o cartao e a data de validade devemos verificar se esse cartao já existe na bd? Caso exista usamos o id de pagamento nessa factura? Caso nao exista o que fazemos? inserimos um novo cartao na bd? Como a chave primaria do cartao é o pag_id e nao podem haver chaves primarias repetidas temos que criar uma nova entrada na tabela pagamento, podendo vir a ficar a tabela com varias linhas com o tipo cartao credito.

Resposta A tabela "CARTAO_CREDITO" guarda tuplos de método de pagamento do tipo "cartao (ver diag. de classes UML) e não tuplos de cartão de crédito, como o nome da tabela poderia levar a pensar. Sendo assim, por cada tuplo de "PAGAMENTO" inserido do tipo "cartao", deve ser inserido um tuplo na tabela "CARTAO_CREDITO" com o mesmo valor de pag_id e com o num_cartao e data_validade preenchidos. Deste modo, podem existir vários tuplos de "CARTAO_CREDITO" com o mesmo num_cartao. Não é preciso verificar se o o num_cartao já existe na BD. Cada vez que inserem uma factura na BD, insiram um pagamento.

26) No método insereInfoCliente, caso a Pessoa já exista na BD, mas não seja cliente, devemos acrescentar o tipo cliente a essa Pessoa. O que fazer se a Pessoa não tiver localização associada, visto que um cliente tem obrigatoriamente que ter uma localização?

Resposta Se isso acontecer, está a ser violada uma restrição de integridade da BD (modelada no diagrama de classes UML) e que deve ser garantida por um trigger. Em termos de aplicação, não tem que ser feita nenhuma verificação. Tem é que estar preparada para apanhar a excepção levantada pelo trigger.

27) Somos obrigados a fazer tudo num stored procedure quando tal indica para o fazer?

Resposta Sim, nas alíneas em que é pedido que implementem em PL/SQL (stored procedure) tem que o fazer completamente. Na maioria dos casos, precisam apenas de um stored procedure que recebe os parâmetros necessários. Podem implementar vários stored procedures para simplificar o caso em que são passados arraylists como parâmetros. O código de criação dos stored procedures deve tb. fazer parte do vosso programa Java e invocado no método iniciaBD().

28) Na pergunta 2.1 (Desenho de Bases de Dados Relacionais), o domínio e restrições do problema são os mesmos?

Resposta Sim, tudo se mantém (inclusivamente, uma pessoa continua a poder ter vários tipos). A única diferença é o esquema de Pessoa apresentado.

29) Os pontos a abordar nesta segunda parte são diferentes do primeiro relatório, e como não há nenhum template para o relatório da segunda parte, os tópicos a focar ficam ao nosso critério?

Resposta Como está dito no enunciado da 2ª parte, a estrutura do 2º relatório é a seguinte: 1. Desenho de BD Relacional (respostas a 2.1); 2. Suporte Transaccional (respostas a 2.3); 3. Conclusões; 4. Anexo (código Java em ficheiro .zip, diskette ou CD - resposta a 2.2). A capa obedece ao mesmo formato que está no template.

30) No stored procedure da pergunta E, ao verificarmos que existe produto e armazem, temos tambem de ver se estes já estão relacionados na tabela "contem" ou assumimos que para o produto estar na base de dados este tem que estar associado a um armazem?

Resposta Têm que verificar que o produto e o armazem estão devidamente relacionados na BD.

31) Na alínea 2.2.D, método insereProdutos(), no enunciado diz-se que devem ser preenchidos o nome da categoria e o nome dos autores ou artistas, mas a classe Produto tem duas arraylists de inteiros. Devem ser então passados os ids da categoria e dos autores/artistas?

Resposta Sim.

32) No método actualizaStock, se ao actualizarmos a quantidade de um produto o produto ficar com quantidade negativa, o que devemos fazer, deixar a quantidade ficar negativa, pomos a quantidade a zero ou não actualizamos e devolvemos false no metodo?

Resposta Não actualizam e devolvem false.

33) Ao inserir um novo produto na tabela de produtos, existe um trigger (o 8) que não mo permite fazer , pois diz que esse produto não é um livro nem um cd. Não posso inserir primeiro nas tabelas de cd ou livro pois o valor da chave estrangeira referente aquele produto não existe na tabela de produtos. Verifiquei por que ordem estão estas inserções de tuplos no vosso ficheiro "dados.sql" e inserem primeiro o livro ou cd e depois o produto. Como posso fazer o mesmo?

Resposta Nas tabelas LIVRO e CD a foreign key tem lá "INITIALLY DEFERRED DEFERRABLE" que quer dizer que a restrição de chave estrangeira não é verificada senão na altura do commit. Por outro lado, o trigger 8 verifica que para cada produto inserido ele é um livro ou um CD. Logo, a ordem de inserção é aquela que está nos scripts: primeiro o livro/cd e depois o produto. Vocês têm é que garantir que só depois de feitas as duas inserções (livro/cd e produto) é que fazem o commit. Só nessa altura a fk de livro ou cd é verificada.

34) Na alínea 2.3 (Suporte Transaccional), devo modificar o programa Java para experimentar o que é pedido? E o que se coloca no relatório?

Resposta O vosso programa Java deve garantir as propriedades ACID das transacções sempre que tal seja importante. Devem ainda alterar partes do vosso código Java de modo a simular cenários para testar os mecanismos de controlo de concorrência e gestão de recuperação do SGBD. No relatório, além dos comentários e da descrição das experiências realizadas para estes testes, apresentem tb. o pedaço de código Java (apenas a parte do código relevante) usado para observarem o que vos é pedido.