O documento descreve uma base de dados relacional criada em SQLite para registrar informações sobre a atividade de formação avançada e supervisão de alunos em contexto universitário. A base de dados contém tabelas para alunos, orientadores, formações avançadas e associações entre eles. Exemplos de comandos SQL são fornecidos para criar as tabelas e inserir dados de teste.
Recomposiçao em matematica 1 ano 2024 - ESTUDANTE 1ª série.pdf
Um exemplo do uso do SQLite: uma base de dados para alumni
1. Mais um exemplo do recurso a
bases de dados relacionais em
SQLite
Base de dados de supervisão / formação avançada / alumni
Luís Borges Gouveia
lmbg@ufp.edu.pt
V2.4, Abril de 2016
2. Formação avançada
• A atividade de formação avançada em contexto
universitário engloba a supervisão individual ou
conjunta de orientação de um trabalho de
investigação e desenvolvimento São considerados
três tipos de alunos, função do nível da formação:
– 2º ciclo, também conhecido como mestrado (MSc)
– 3º ciclo, também conhecido por doutoramento (PhD)
– De especialização e aprofundamento científico, também
conhecido como Pós doutoramento (PostDoc)
Luís Borges Gouveia, lmbg@ufp.edu.pt
3. Considere o seguinte contexto
• Existe a necessidade de registo da atividade de supervisão de
formação avançada, nesta fase, para registo de alumni (alunos
que concluíram a sua formação avançada)
– Pretende-se o registo de cada aluno com indicação do nome,
sexo e nacionalidade
– Também o registo da formação avançada, com base na
designação, tipo, nome e escola
– É necessário associar os respetivos orientadores (podem ser um
ou mais do que um – normalmente, existindo co-orientação, é
apenas um segundo elemento)
– Cada orientador deve ser identificado pelo seu nome (e
também nome de citação), sexo, cargo atual, nacionalidade e
local de afiliação (escola)
– A graduação de cada aluno deve incluir a data em que ocorreu o
seu exame ou reconhecimento de conclusão da formação
avançada
Luís Borges Gouveia, lmbg@ufp.edu.pt
4. Um modelo E-R proposto para o contexto
• Consideram-se:
– três entidades: aluno, orientador e formação
avançada
– Duas relações binárias: graduação e
supervisão
• graduação:
um aluno é graduado numa ou mais formações
avançadas e
uma formação avançada tem graduados um ou
mais alunos
• supervisão:
um aluno é supervisionado por um ou mais
orientadores e
um orientador é supervisor de um ou mais
alunos
Aluno
Formação
avançada
graduação
supervisão
Orientador
Luís Borges Gouveia, lmbg@ufp.edu.pt
6. Os comandos SQL mais comuns
http://www.tutorialspoint.com/sqlite
Para as tabelas da base de dados
• CREATE TABLE: criar uma tabela de dados
• DROP TABLE: eliminar uma tabela de dados
• ALTER TABLE: alterar uma tabela de dados
Para os dados, nas tabelas da base de dados
• INSERT INTO: inserir dados numa tabela
• SELECT: consultar dados numa tabela
• UPDATE: atualizar dados numa tabela
• DELETE: eliminar dados numa tabela
Luís Borges Gouveia, lmbg@ufp.edu.pt
7. Criar a base de dados…
• Na linha de comando do SO
– Sqlite3 alumni.db
• Criar a tabela Aluno (ida, nome, sexo, dnasc, pais)
– Create table aluno(ida integer primary key, nome text, sexo text, pais text);
• Criar a tabela Afiliacao (idaf, sigla, nome, subnome, local, pais, url)
– Create table afiliacao(idaf integer primary key, sigla text, nome text, subnome text, local text,
pais text, url text);
• Criar a tabela Favancada (idf, nome, titulo, tipo, designação, idaf)
– Create table favancada(idf integer primary key, nome text, titulo text, tipo text, designação
text, idaf integer);
• Criar a tabela Orientador (ido, nome, nome_cit, sexo, cargo, pais, idaf)
– Create table orientador(ido integer primary key, nome text, nome_cit text, sexo text, cargo
text, pais text, idaf integer);
• Criar a tabela Graduacao (idg, ida, idf, data)
– Create table graduacao(idg integer primary key autoincrement, ida integer, idf integer, data
date);
• Criar a tabela Supervisao (ids, ida, ido, idf)
– Create table supervisao(ids integer primary key autoincrement, ida integer, ido integer, idf
integer);
Luís Borges Gouveia, lmbg@ufp.edu.pt
8. Informação sobre a bd alumni.db
• Testar os comandos: .databases (lista as bases de dados consideradas no
ficheiro alumni.db), .tables (lista as tabelas associadas com a base de
dados) e .schema (que lista o esquema das tabelas da base de dados)
Luís Borges Gouveia, lmbg@ufp.edu.pt
9. Teste do modelo criado
• Para testar o modelo criado é tomada a listagem de
supervisões concluídas, conforme descrita em
http://homepage.ufp.pt/lmbg/mono_on.htm
(alumni de Luis Borges Gouveia, a Março de 2016) que
lista:
– 1 pós doutoramento
– 9 doutoramentos
– 18 mestrados
– Na página estão também listadas 8 monografias de
conclusão de licenciatura, não consideradas para o
presente contexto
Luís Borges Gouveia, lmbg@ufp.edu.pt
10. Inserir alunos…
[Aluno (ida, nome, sexo, pais)]
Insert into aluno values(1, ‘Margarida Amélia Correia Bairrão do Vale Marques’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (2, ‘Jorge Manuel Correia da Silva Xavier’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (3, ‘Jorge Manuel Viegas Graça’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (4, ‘Paulo Adriano Sousa Teixeira’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (5, ‘Gilberto Manuel Gomes Branco Vasco’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (6, ‘Marco José de Oliveira Pereirinha’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (7, ‘Steven Lopes Abrantes’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (8, ‘Maria João Silva Teixeira Guedes Mesquita’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (9, ‘Márcia Cristina de Castro Moreira’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (10, ‘José Luis de Sousa Rodrigues’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (11, ‘David Lopes Abrantes’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (12, ‘Susana Maria Labrincha de Azevedo’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (13, ‘Paula Cristina Marinho Moura’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (14, ‘Christelle Marie Cardoso Soigné’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (15, ‘Helder José Marques Caixinha’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (16, ‘Teresa Maria Borges Cardoso’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (17, ‘Martinho André Cerqueira de Oliveira’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (18, ‘Paulo Rocha Neto’, ‘Masculino’, ‘Brasil’);
Insert into aluno values (19, ‘Paulo Alexandre Lima Rurato’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (20, ‘Sandra Sofia Nora Gaio’, ‘Feminino’, ‘Portugal’);
Insert into aluno values (21, ‘Pedro Nuno Moreira da Silva’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (22, ‘Luis António Morão Pinto Simões da Cunha’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (23, ‘Filipe Miguel Bispo Fidalgo’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (24, ‘Artur Jorge Afonso de Sousa’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (25, ‘Pereira Alfredo’, ‘Masculino’, ‘Angola’);
Insert into aluno values (26, ‘Carlos Alberto Torres Quental’, ‘Masculino’, ‘Portugal’);
Insert into aluno values (27, ‘Paula Peres’, ‘Feminino’, ‘Portugal’);
Luís Borges Gouveia, lmbg@ufp.edu.pt
11. Inserir as afiliações… [Afiliacao (idaf, sigla,
nome, subnome, local, pais, url)]
Insert into afiliacao values(1, ‘UFP’, ‘Universidade Fernando Pessoa’, ‘FCT –
Faculdade de Ciência e Tecnologia’, ‘Porto’, ’Portugal’, ‘http://www.ufp.pt’);
Insert into afiliacao values(2, ‘UFP’, ‘Universidade Fernando Pessoa’, ‘FCHS –
Faculdade de Ciências Humanas e Sociais’, ‘Porto’, ’Portugal’,
‘http://www.ufp.pt’);
Insert into afiliacao values(3, ‘UA’, ‘Universidade de Aveiro’, ‘DEGEI -
Departamento de Economia, Gestão e Engenharia Industrial’, ‘Aveiro’,
‘Portugal’, ‘http://www.ua.pt’);
Luís Borges Gouveia, lmbg@ufp.edu.pt
12. Inserir as formações avançadas… [Favancada
(idf, nome, titulo, tipo, designação, idaf)]
Insert into favancada values (1, ‘Mestrado em Gestão da Ciência, Tecnologia e
Inovação’, ‘Mestrado’, ‘MSc’, ‘2º ciclo de estudos’, 3);
Insert into favancada values (2, ‘Mestrado em Gestão da Informação’,
‘Mestrado’, ‘MSc’, ‘2º ciclo de estudos’, 3);
Insert into favancada values (3, ‘Doutoramento em Engenharia de Gestão e
Industrial’, ‘Doutoramento’, ‘PhD’, ‘3º ciclo de estudos’, 3);
Insert into favancada values (4, ‘Mestrado em Engenharia Informática’,
‘Mestrado’, ‘MSc’, ‘2º ciclo de estudos’, 1);
Insert into favancada values (5, ‘Doutoramento em Ciências da Informação -
especialização em Sistemas e Tecnologias da Informação’, ‘Doutoramento’,
‘PhD’, ‘3º ciclo de estudos’, 1);
Insert into favancada values (6, ‘Mestrado em Ciências da Informação e
Documentação’, ‘Mestrado’, ‘MSc’, ‘2º ciclo de estudos’, 2);
Insert into favancada values (7, ‘Pós Doutoramento em e-learning’, ‘Pós
Doutoramento’, ‘Post Doc’, ‘Pós Doutoramento (12 meses)’, 1);
Insert into favancada values (8, ‘Mestrado em Ciências Empresariais’,
‘Mestrado’, ‘MSc’, ‘2º ciclo de estudos’, 2);
Luís Borges Gouveia, lmbg@ufp.edu.pt
13. Inserir os orientadores… [Orientador (ido, nome,
nome_cit, sexo, cargo, pais, idaf)]
Insert into orientador values(1, ‘Luis Manuel Borges Gouveia’, ‘Luis Borges
Gouveia’, ‘Masculino’, ‘Professor Associado com Agregação’, ‘Portugal’, 1);
Insert into orientador values(2, ‘Joaquim José Borges Gouveia’, ‘Borges
Gouveia’, ‘Masculino’, ‘Professor Catedrático’, ‘Portugal’, 3);
Luís Borges Gouveia, lmbg@ufp.edu.pt
14. Associar os alunos às formações avançadas…
[Graduacao (idg, ida, idf, data)]
Insert into graduacao values(1, 27, 7, ‘2011-06-11’);
Insert into graduacao values(2, 26, 5, ‘2015-02-17’);
Insert into graduacao values(3, 25, 5, ‘2015-02-10’);
Insert into graduacao values(4, 24, 5, ‘2013-04-10’);
Insert into graduacao values(5, 23, 5, ‘2013-01-10’);
Insert into graduacao values(6, 22, 5, ‘2012-06-10’);
Insert into graduacao values(7, 21, 5, ‘2011-07-17’);
Insert into graduacao values(8, 7, 5, ‘2011-07-10’);
Insert into graduacao values(9, 20, 3, ‘2010-06-10’);
Insert into graduacao values(10, 19, 3, ‘2008-12-12’);
Insert into graduacao values(11, 18, 4, ‘2015-04-21’);
Insert into graduacao values(12, 17, 8, ‘2014-03-19’);
Insert into graduacao values(13, 16, 6, ‘2012-04-21’);
Insert into graduacao values(14, 15, 2, ‘2009-11-11’);
Insert into graduacao values(15, 14, 2, ‘2009-10-10’);
Insert into graduacao values(16, 13, 2, ‘2009-10-16’);
Insert into graduacao values(17, 12, 2, ‘2009-10-20’);
Insert into graduacao values(18, 11, 2, ‘2007-12-10’);
Insert into graduacao values(19, 10, 2, ‘2007-11-11’);
Insert into graduacao values(20, 9, 4, ‘2007-07-16’);
Insert into graduacao values(21, 8, 2, ‘2007-07-10’);
Insert into graduacao values(22, 7, 2, ‘2007-06-10’);
Insert into graduacao values(23, 6, 2, ‘2006-11-10’);
Insert into graduacao values(24, 5, 2, ‘2005-11-10’);
Insert into graduacao values(25, 4, 2, ‘2005-11-11’);
Insert into graduacao values(26, 3, 2, ‘2005-11-20’);
Insert into graduacao values(27, 2, 1, ‘2004-07-12’);
Insert into graduacao values(28, 1, 2, ‘2003-04-12’); Luís Borges Gouveia, lmbg@ufp.edu.pt
15. Associar os alunos aos orientadores
[supervisao(ids, ida, ido, idf)]
Insert into supervisao values(1, 1, 1, 1);
Insert into supervisao values(2, 2, 2, 3);
Insert into supervisao values(3, 2, 1, 1);
Insert into supervisao values(4, 3, 1, 1);
Insert into supervisao values(5, 4, 1, 1);
Insert into supervisao values(6, 5, 1, 1);
Insert into supervisao values(7, 6, 1, 1);
Insert into supervisao values(8, 7, 1, 1);
Insert into supervisao values(9, 8, 1, 1);
Insert into supervisao values(10, 9, 1, 1);
Insert into supervisao values(11, 10, 1, 1);
Insert into supervisao values(12, 11, 1, 1);
Insert into supervisao values(13, 12, 1, 1);
Insert into supervisao values(14, 13, 1, 1);
Insert into supervisao values(15, 14, 1, 1);
Insert into supervisao values(16, 15, 1, 1);
Insert into supervisao values(17, 16, 1, 1);
Insert into supervisao values(18, 17, 1, 1);
Insert into supervisao values(19, 18, 1, 1);
Insert into supervisao values(20, 19, 2, 3);
Insert into supervisao values(21, 19, 1, 1);
Insert into supervisao values(22, 20, 2, 3);
Insert into supervisao values(23, 20, 1, 1);
Insert into supervisao values(24, 21, 1, 1);
Insert into supervisao values(25, 22, 1, 1);
Insert into supervisao values(26, 23, 1, 1);
Insert into supervisao values(27, 24, 1, 1);
Insert into supervisao values(28, 25, 1, 1);
Insert into supervisao values(29, 26, 1, 1);
Insert into supervisao values(30, 27, 1, 1);
Insert into supervisao values(31, 7, 1, 1);
Luís Borges Gouveia, lmbg@ufp.edu.pt
16. Obter uma cópia da base dados
• De forma a poder replicar a estrutura e conteúdos
da base de dados é possível obter a sequência de
comandos SQL, atráves de .dump
– Para obter a listagem num ficheiro de texto,
deve ser redirecionado o output, com base no
comando .output nome_do_ficheiro, antes do
uso do comando .dump (após o comando, deve
redirecionar novamente o output para o ecran,
utilizando .output stdout)
– Um exemplo do dump da base de dados, ao
lado…
PRAGMA foreign_keys=OFF;
BEGIN TRANSACTION;
CREATE TABLE livro(idlinteger primary key, titulo text, lingua text, isbn text);
INSERT INTO "livro" VALUES(1,'Sistemas de Informa‡Æo para
GestÆo','Portuguˆs','9728589433');
INSERT INTO "livro" VALUES(2,'Cidades e RegiäesDigitais: impacte nas cidadese
nas pessoas','Portuguˆs','9728830033');
INSERT INTO "livro" VALUES(3,'Inform tica e Competˆncias Tecnol¢gicas para a
Sociedade daInforma‡Æo','Portuguˆs','9728830041');
INSERT INTO "livro" VALUES(4,'Readings in Information Society
','Inglˆs','9728830149');
INSERT INTO "livro" VALUES(5,'Sociedade da Informa‡Æo: balan‡o e implica‡äes
','Portuguˆs','9728830181');
INSERT INTO "livro" VALUES(6,'O local e-government: a governa‡Æo digitalna
autarquia','Portuguˆs','9728589417');
INSERT INTO "livro" VALUES(7,'Inform tica e Competˆncias Tecnol¢gicas para a
Sociedade daInforma‡Æo 2ed','Portuguˆs','9728830300');
INSERT INTO "livro" VALUES(8,'Neg¢cio Electr¢nico - conceitose perspectivasde
desenvolvimento','Portuguˆs','972858962X');
INSERT INTO "livro" VALUES(9,'GestÆo da Informa‡Æo na Biblioteca Escolar
','Portuguˆs','9789899533004');
INSERT INTO "livro" VALUES(10,'A virtual environment to share
knowledge','Inglˆs','9783639129861');
INSERT INTO "livro" VALUES(11,'Ciˆncia da Informa‡Æo: contributos para o seu
estudo','Portuguˆs','9789896430900');
INSERT INTO "livro" VALUES(12,'Repensar a Sociedadeda Informa‡Æo e do
Conhecimento no In¡cio do S‚culo XXI','Portuguˆs','9789726186953');
CREATE TABLE autor(ida integer primary key, nome text, nacionalidadetext);
INSERT INTO "autor" VALUES(1,'Luis Borges Gouveia','Portuguˆs');
INSERT INTO "autor" VALUES(2,'JoÆo Ranito','Portuguˆs');
INSERT INTO "autor" VALUES(3,'Nuno MagalhÆesRibeiro','Portuguˆs');
INSERT INTO "autor" VALUES(4,'Paulo Rurato','Portuguˆs');
INSERT INTO "autor" VALUES(5,'Sofia Gaio','Portuguˆs');
INSERT INTO "autor" VALUES(6,'Rui Moreira','Portuguˆs');
INSERT INTO "autor" VALUES(7,'Margarida BairrÆo','Portuguˆs');
INSERT INTO "autor" VALUES(8,'Judite Gon‡alves de Freitas','Portuguˆs');
INSERT INTO "autor" VALUES(9,'Ant¢nio Borges Regedor','Portuguˆs');
INSERT INTO "autor" VALUES(10,'Jos‚ Dias Coelho','Portuguˆs');
CREATE TABLE editora(ide integer primary key, nome text);
INSERT INTO "editora" VALUES(1,'SPI - Principia');
INSERT INTO "editora" VALUES(2,'Edi‡äes UniversidadeFernando Pessoa');
INSERT INTO "editora" VALUES(3,'Edi‡äes GestKnowing');
INSERT INTO "editora" VALUES(4,'VDM - Verlag Dr. Muller');
INSERT INTO "editora" VALUES(5,'S¡labo');
CREATE TABLE escrito(esc integer primary key autoincrement,idl integer, ida
integer);
INSERT INTO "escrito" VALUES(1,1,1);
INSERT INTO "escrito" VALUES(2,1,2);
INSERT INTO "escrito" VALUES(3,2,1);
INSERT INTO "escrito" VALUES(4,3,3);
INSERT INTO "escrito" VALUES(5,3,1);
INSERT INTO "escrito" VALUES(6,3,4);
INSERT INTO "escrito" VALUES(7,4,1);
INSERT INTO "escrito" VALUES(8,4,5);
INSERT INTO "escrito" VALUES(9,5,1);
INSERT INTO "escrito" VALUES(10,5,5);
INSERT INTO "escrito" VALUES(11,6,1);
INSERT INTO "escrito" VALUES(12,7,3);
INSERT INTO "escrito" VALUES(13,7,1);
INSERT INTO "escrito" VALUES(14,7,4);
INSERT INTO "escrito" VALUES(15,7,6);
INSERT INTO "escrito" VALUES(16,8,1);
INSERT INTO "escrito" VALUES(17,9,7);
INSERT INTO "escrito" VALUES(18,9,1);
INSERT INTO "escrito" VALUES(19,10,1);
INSERT INTO "escrito" VALUES(20,11,8);
INSERT INTO "escrito" VALUES(21,11,1);
INSERT INTO "escrito" VALUES(22,11,9);
INSERT INTO "escrito" VALUES(23,12,10);
INSERT INTO "escrito" VALUES(24,12,1);
CREATE TABLE publicado(pubinteger primary key autoincrement,idl integer, ide
integer);
INSERT INTO "publicado"VALUES(1,1,1);
INSERT INTO "publicado"VALUES(2,2,2);
INSERT INTO "publicado"VALUES(3,3,2);
INSERT INTO "publicado"VALUES(4,4,2);
INSERT INTO "publicado"VALUES(5,5,2);
INSERT INTO "publicado"VALUES(6,6,1);
INSERT INTO "publicado"VALUES(7,7,2);
INSERT INTO "publicado"VALUES(8,8,1);
INSERT INTO "publicado"VALUES(9,9,3);
INSERT INTO "publicado"VALUES(10,10,4);
INSERT INTO "publicado"VALUES(11,11,2);
INSERT INTO "publicado"VALUES(12,12,5);
CREATE TABLE compra(cmp integer primary key autoincrement,idl integer, valor
real, data date);
INSERT INTO "compra" VALUES(1,1,15.0,'jan 12 2004');
INSERT INTO "compra" VALUES(2,2,12.0,'set 11 2003');
INSERT INTO "compra" VALUES(3,3,10.0,'out 20 2003');
INSERT INTO "compra" VALUES(4,4,7.0,'apr 20 2004');
INSERT INTO "compra" VALUES(5,5,14.0,'jun 15 2004');
INSERT INTO "compra" VALUES(6,6,15.0,'dez 12 2004');
INSERT INTO "compra" VALUES(7,7,10.0,'out 26 2003');
INSERT INTO "compra" VALUES(8,8,15.0,'dez 10 2006');
INSERT INTO "compra" VALUES(9,9,15.0,'mar 10 2007');
INSERT INTO "compra" VALUES(10,10,75.0,'fev 5 2009');
INSERT INTO "compra" VALUES(11,11,10.0,'jun 18 2012');
INSERT INTO "compra" VALUES(12,12,24.0,'set 10 2012');
DELETE FROM sqlite_sequence;
INSERT INTO "sqlite_sequence"VALUES('escrito',24);
INSERT INTO "sqlite_sequence"VALUES('publicado',12);
INSERT INTO "sqlite_sequence"VALUES('compra',12);
COMMIT;Luís Borges Gouveia, lmbg@ufp.edu.pt
17. Formatar os resultados no SQLite
sqlite> .header on colocar o nome e separador de cada atributo da tabela
sqlite> .mode column organizar os resultados por colunas
sqlite> .timer on ativar o contador de recursos computacionais
sqlite> select * from aluno;
ida nome sexo pais
---------- ------------------------------------------------------------------------ -------------------------- -------------
1 Margarida Amélia Correia Bairrão do Vale Marques Feminino Portugal
2 Jorge Manuel Correia da Silva Xavier Masculino Portugal
3 Jorge Manuel Viegas Graça Masculino Portugal
4 Paulo Adriano Sousa Teixeira Masculino Portugal
5 Gilberto Manuel Gomes Branco Vasco Masculino Portugal
6 Marco José de Oliveira Pereirinha Masculino Portugal
7 Steven Lopes Abrantes Masculino Portugal
8 Maria João Silva Teixeira Guedes Mesquita Feminino Portugal
9 Márcia Cristina de Castro Moreira Feminino Portugal
10 José Luis de Sousa Rodrigues Masculino Portugal
11 .....
Run Time: real 0.046 user 0.000000 sys 0.000000
sqlite>
Luís Borges Gouveia, lmbg@ufp.edu.pt
18. Alguns exercícios simples,
com base no comando Select
• Quantos alunos estão registados?
– select count(*) from aluno;
• Quantas graduações é que estão registadas?
– select count(*) from graduacao;
• Quantas formações avançadas estão registadas?
– select count(*) from favancada;
• Quantos orientadores estão registados?
– select count(*) from orientador;
• Quantos alunos do sexo feminino?
– Select count(sexo) from aluno where sexo=‘Feminino’;
• Quantos alunos do sexo masculino?
– Select count(sexo) from aluno where sexo=‘Masculino’;
Luís Borges Gouveia, lmbg@ufp.edu.pt
19. Mais alguns exercícios com base no
comando Select
• Listar o nome das formações avançadas registadas, por ordem alfabética
– select nome from favancada order by nome;
• Listar os nomes dos alunos e tipo de formação avançada que
completaram, ordenado por nome de aluno
– select aluno.nome, favancada.titulo from aluno, graduacao, favancada where
aluno.ida=graduacao.ida and graduacao.idf=favancada.idf order by
aluno.nome;
• Contar o número de graduações do tipo Doutoramento
– select count(*) from aluno, graduacao, favancada where
aluno.ida=graduacao.ida and graduacao.idf=favancada.idf and
favancada.titulo='Doutoramento';
• Listar os nomes e nacionalidade dos alunos com graduações do tipo
Doutoramento
– select aluno.nome, aluno.pais from aluno, graduacao, favancada where
aluno.ida=graduacao.ida and graduacao.idf=favancada.idf and
favancada.titulo='Doutoramento';
Luís Borges Gouveia, lmbg@ufp.edu.pt
20. Mais alguns exercícios…
• Listar todos os orientadores, indicando o seu nome e nome de citação e
a quantidade de orientações
– select orientador.nome, nome_cit, count(*) from orientador, supervisao
where orientador.ido=supervisao.ido group by nome;
• Listar, todos os tipos de formação, indicando o total de graduações
existentes para cada um deles
– select distinct favancada.titulo, count(*) from favancada, graduacao where
favancada.idf=graduacao.idf group by favancada.titulo;
• Listar todas as graduações, por data, indicando a data, o nome do aluno
e a formação avançada efetuada
– select graduacao.data, aluno.nome, favancada.nome from graduacao, aluno,
favancada where graduacao.ida=aluno.ida and graduacao.idf=favancada.idf
order by data;
• Contar por ano, de forma ordenada, o número de formações avançadas
concluídas, mostrando inicialmente os anos mais recentes
– select strftime('%Y', data), count(*) from graduacao, aluno, favancada where
graduacao.ida=aluno.ida and graduacao.idf=favancada.idf group by
strftime('%Y', data) order by data desc;
Luís Borges Gouveia, lmbg@ufp.edu.pt
21. Ainda mais alguns exemplos
• Contar o número de alunos Portugueses que concluíram a sua formação
avançada
– select count(*) from aluno where pais='Portugal';
• Listar as nacionalidades dos alunos que concluíram a sua formação
avançada
– select distinct pais from aluno;
• Listar os nomes dos alunos que realizaram a sua formação avançada com
co-orientações
– select aluno.nome, supervisao.ida, count(supervisao.ida) as coorientacao from
aluno, supervisao where aluno.ida=supervisao.ida group by supervisao.ida
having count(supervisao.ida) > 1 and sum(supervisao.idf)/2 <> supervisao.idf
order by supervisao.ida;
Luís Borges Gouveia, lmbg@ufp.edu.pt
22. Alguns desafios
1. O que é necessário para considerar alunos de mais do
que um orientador e estender este modelo de dados
para um grupo de investigadores
2. O que é necessário para o modelo de dados registar
os projetos dos alunos, com uma pequena descrição e
dados de financiamento e datas de início e fim, bem
como relatórios associados e produção científica
realizada
3. O que é necessário para o modelo de dados registar,
além dos alunos que concluíram as suas formações
avançadas, todos aqueles que ainda as estão a
realizar, indicando o seu estado e as reuniões de
trabalho com os orientadores
Luís Borges Gouveia, lmbg@ufp.edu.pt
23. Resposta, desafio 1
O que é necessário para considerar alunos de mais do
que um orientador e estender este modelo de dados
para um grupo de investigadores?
• Apenas o registo de mais orientadores e as suas
supervisões.
O modelo de dados, tal como está, responde a esse
contexto.
Luís Borges Gouveia, lmbg@ufp.edu.pt
24. Notas do desafio 1 (i)
• Um aspeto a ter em conta, é quando se listam orientadores
e existe mais de um para um dado par (aluno e orientador),
não existe indicação de o orientador ser o orientador
principal ou o co-orientador
– Este caso seria resolvido, adicionando um atributo novo, na
tabela Supervisao (ids, ida, ido, idf), colocando, além do id do
orientador (ido), qual o seu papel na supervisão em
especificação)
– Nova tabela: Supervisao (ids, ida, ido, idf, papelo)
– Create table supervisao(ids integer primary key autoincrement,
ida integer, ido integer, papelo text, idf integer); MAS como a
tabela já existe e tem conteúdos, usamos em alternativa o
comando ALTER TABLE, para preservar os conteúdos existentes:
• alter table supervisao add column papelo text;
Luís Borges Gouveia, lmbg@ufp.edu.pt
25. Notas do desafio 1 (ii)
• Com a adição do novo atributo na tabela, o esquema
relacional da base de dados é agora diferente:
– CREATE TABLE aluno(ida integer primary key, nome text, sexo
text, pais text);
– CREATE TABLE afiliacao(idaf integer primary key, sigla text, nome
text, subnome text, local text, pais text, url text);
– CREATE TABLE favancada(idf integer primary key, nome text,
titulo text, tipo text, designação text, idaf integer);
– CREATE TABLE orientador(ido integer primary key, nome text,
nome_cit text, sexo text, cargo text, pais text, idaf integer);
– CREATE TABLE graduacao(idg integer primary key
autoincrement, ida integer, idf integer, data date);
– CREATE TABLE supervisao(ids integer primary key
autoincrement, ida integer, ido integer, idf integer, papelo text);
Luís Borges Gouveia, lmbg@ufp.edu.pt
26. Notas do desafio 1 (iii)
• A tabela supervisão tem o seguinte aspecto (select * from supervisao;):
ids ida ido idf papelo
---------- ---------- ---------- ---------- ----------
1 1 1 1
2 2 2 3
3 2 1 1
4 3 1 1
5 4 1 1
6 5 1 1
7 6 1 1
8 7 1 1
9 8 1 1
10 9 1 1
11 10 1 1
12 11 1 1
13 12 1 1
14 13 1 1
15 14 1 1
16 15 1 1
17 16 1 1
18 17 1 1
19 18 1 1
20 19 2 3
21 19 1 1
22 20 2 3
23 20 1 1
24 21 1 1
25 22 1 1
26 23 1 1
27 24 1 1
28 25 1 1
29 26 1 1
30 27 1 1
31 7 1 1
A coluna papelo não tem valores, pelo que terá de ser
preenchida (populada).
A melhor de o fazer é com recurso a um comando que
permita preencher as 31 entradas o mais rapidamente
possível, usando o comando UPDATE
update supervisão set papelo='principal’;
Mas agora, é preciso ver quais as supervisões em que
devemos colocar o valor alternativo de co-orientador.
O Critério é quando existem dois orientadores, para a
lista existente, o co-orientador é Luis Borges Gouveia
Luís Borges Gouveia, lmbg@ufp.edu.pt
27. Notas do desafio 1 (iv)
• Processo de descoberta e alteração de valores:
Passo 1: listar todos os alunos com outro orientador além de Luis Borges Gouveia, descobrindo os
ida dos alunos envolvidos….
select aluno.ida, aluno.nome, orientador.nome from aluno, supervisao, orientador where
aluno.ida=supervisao.ida and supervisao.ido=orientador.ido and orientador.nome <> 'Luis
Manuel Borges Gouveia' ;
ida nome nome
---------- ----------------------------------------------- -----------------------------------------
2 Jorge Manuel Correia da Silva Xavier Joaquim José Borges Gouveia
19 Paulo Alexandre Lima Rurato Joaquim José Borges Gouveia
20 Sandra Sofia Nora Gaio Joaquim José Borges Gouveia
Luís Borges Gouveia, lmbg@ufp.edu.pt
28. Notas do desafio 1 (v)
• Processo de descoberta e alteração de valores:
Passo 2: listar os registos de supervisão associados com os alunos com ida 2, 19 e 20
select * from supervisao where ida=2 or ida=19 or ida=20;
ids ida ido idf papelo
---------- -------- -------- --------- -------------
2 2 2 3 principal
3 2 1 1 principal
20 19 2 3 principal
21 19 1 1 principal
22 20 2 3 principal
23 20 1 1 principal
Luís Borges Gouveia, lmbg@ufp.edu.pt
29. Notas do desafio 1 (vi)
• Processo de descoberta e alteração de valores:
Passo 3: listar os orientadores para identificar os seus ido, de forma a saber que Luis Borges Gouveia, corresponde ao
ido=1
select * from orientador;
ido nome nome_cit sexo cargo pais idaf
----- --------------------------------------- -------------------------- -------------- ------------------------------------------------ ----------- -----
1 Luis Manuel Borges Gouveia Luis Borges Gouveia Masculino Professor Associado com Agregação Portugal 1
2 Joaquim José Borges Gouve Borges Gouveia Masculino Professor Catedrático Portugal 3
Luís Borges Gouveia, lmbg@ufp.edu.pt
30. Notas do desafio 1 (vii)
• Processo de descoberta e alteração de valores:
Passo 4: listar as supervisões que correspondem às entras dos alunos 2, 19 e 20 e ao orientador
Luis Borges Gouveia, corresponde ao ido=1, de forma a obter os respectivos id de supervisão (são
o 3, 21 e 23)
select * from supervisao where (ida=2 or ida=19 or ida=20) and ido=1;
ids ida ido idf papelo
------- ------- --------- ------- --------------
3 2 1 1 principal
21 19 1 1 principal
23 20 1 1 principal
Luís Borges Gouveia, lmbg@ufp.edu.pt
31. Notas do desafio 1 (viii)
• Processo de descoberta e alteração de valores:
Passo 5: Alterar o atributo papelo (papel do orientador) para co-orientador, nas entradas de
supervisão correspondentes aos alunos 2, 19 e 20 e ao orientador 1
sqlite> update supervisao set papelo='co-orientador' where (ida=2 or ida=19 or ida=20) and
ido=1;
Passo 6: Verificar a alteração...
sqlite> select * from supervisao where (ida=2 or ida=19 or ida=20) and ido=1;
ids ida ido idf papelo
------- --------- ------- -------- ---------------------
3 2 1 1 co-orientador
21 19 1 1 co-orientador
23 20 1 1 co-orientador
Luís Borges Gouveia, lmbg@ufp.edu.pt
32. Notas do desafio 1 (ix)
Considerando os dados existentes, antes da alteração do modelo
• Listar todos os alunos e respetivos orientadores: select aluno.nome,
orientador.nome from aluno, supervisao, orientador where
aluno.ida=supervisao.ida and supervisao.ido=orientador.ido order by
orientador.nome;
nome (aluno) nome (orientador)
------------------------------------ - --------------------------------------
Jorge Manuel Correia da Silva Xavier Joaquim José Borges Gouveia
Paulo Alexandre Lima Rurato Joaquim José Borges Gouveia
Sandra Sofia Nora Gaio Joaquim José Borges Gouveia
Margarida Amélia Correia Bairrão d Luis Manuel Borges Gouveia
Jorge Manuel Correia da Silva Xavier Luis Manuel Borges Gouveia
Jorge Manuel Viegas Graça Luis Manuel Borges Gouveia
Paulo Adriano Sousa Teixeira Luis Manuel Borges Gouveia
Gilberto Manuel Gomes Branco Vasco Luis Manuel Borges Gouveia
Marco José de Oliveira Pereirinha Luis Manuel Borges Gouveia
Steven Lopes Abrantes Luis Manuel Borges Gouveia
Maria João Silva Teixeira Guedes Me Luis Manuel Borges Gouveia
Márcia Cristina de Castro Moreira Luis Manuel Borges Gouveia
José Luis de Sousa Rodrigues Luis Manuel Borges Gouveia
David Lopes Abrantes Luis Manuel Borges Gouveia
Susana Maria Labrincha de Azevedo Luis Manuel Borges Gouveia
Paula Cristina Marinho Moura Luis Manuel Borges Gouveia
Christelle Marie Cardoso Soigné Luis Manuel Borges Gouveia
Helder José Marques Caixinha Luis Manuel Borges Gouveia
Teresa Maria Borges Cardoso Luis Manuel Borges Gouveia
Martinho André Cerqueira de Oliveir Luis Manuel Borges Gouveia
Paulo Rocha Neto Luis Manuel Borges Gouveia
Paulo Alexandre Lima Rurato Luis Manuel Borges Gouveia
Sandra Sofia Nora Gaio Luis Manuel Borges Gouveia
Pedro Nuno Moreira da Silva Luis Manuel Borges Gouveia
Luis António Morão Pinto Simões d Luis Manuel Borges Gouveia
Filipe Miguel Bispo Fidalgo Luis Manuel Borges Gouveia
Artur Jorge Afonso de Sousa Luis Manuel Borges Gouveia
Pereira Alfredo Luis Manuel Borges Gouveia
Carlos Alberto Torres Quental Luis Manuel Borges Gouveia
Paula Peres Luis Manuel Borges Gouveia
Steven Lopes Abrantes Luis Manuel Borges Gouveia
Luís Borges Gouveia, lmbg@ufp.edu.pt
33. Notas do desafio 1 (x)
Considerando os dados existentes, antes da alteração do modelo
• Listar os alunos com co-orientadores, além de Luis Borges Gouveia: select
aluno.nome, orientador.nome from aluno, supervisao, orientador where
aluno.ida=supervisao.ida and supervisao.ido=orientador.ido and
orientador.nome <> 'Luis Manuel Borges Gouveia' order by
orientador.nome;
nome (aluno) nome (orientador)
------------------------------------------------ ----------------------------
Jorge Manuel Correia da Silva Xavier Joaquim José Borges Gouveia
Paulo Alexandre Lima Rurato Joaquim José Borges Gouveia
Sandra Sofia Nora Gaio Joaquim José Borges Gouveia
• Neste exemplo, obtêm-se a listagem de todos os co-orientadores de Luis
Borges Gouveia (LBG), porque o contexto é os alumni de LBG. Para incluir
outros orientadores e respetivos alumni (não coincidentes com os de LBG)
seria impossível distinguir os co-orientadores associados um dado
orientador, sem a alteração proposta no desafio 1
Luís Borges Gouveia, lmbg@ufp.edu.pt
34. Notas do desafio 1 (xi)
select aluno.nome, supervisao.ida, count(supervisao.ida) as coorientacao from aluno,
supervisao where aluno.ida=supervisao.ida group by supervisao.ida having
count(supervisao.ida) > 1 and sum(supervisao.idf)/2 <> supervisao.idf order by
supervisao.ida;
nome ida coorientacao
--------------------------------------------------- ---------- -------------------
Jorge Manuel Correia da Silva Xavier 2 2
Paulo Alexandre Lima Rurato 19 2
Sandra Sofia Nora Gaio 20 2
select aluno.nome, supervisao.ida from supervisao, aluno where
supervisao.papelo='co-orientador' and supervisao.ida=aluno.ida;
nome ida
----------------------------------------------------------
Jorge Manuel Correia da Silva Xavier 2
Paulo Alexandre Lima Rurato 19
Sandra Sofia Nora Gaio 20
Luís Borges Gouveia, lmbg@ufp.edu.pt
35. Resposta, desafio 2
O que é necessário para o modelo de dados registar os projetos
dos alunos, com uma pequena descrição, dados de
financiamento e datas de início e fim do projeto, bem como os
relatórios associados e produção científica realizada?
• Neste caso, o modelo de dados tem de ser estendido de
forma a assegurar as novas necessidades
Luís Borges Gouveia, lmbg@ufp.edu.pt
36. Considere o seguinte contexto para o desafio 2
• Existe a necessidade de registo dos projetos associados com os alunos e sob
orientação. Dessa forma, é necessário considerar:
– O registo de cada projeto, o seu responsável (orientador) e os alunos que o
realizam (podem ser um ou mais alunos)
– O projeto deve conter informação sobre a sua data de início e de fim, o
orçamento, o nome e sigla usada e caso tenha financiamento, deve indicar o
montante e o respetivo financiador
– Para cada projeto deve ser ainda indicado o seu estado, nomeadamente se já
se encontra concluído, está em curso ou em candidatura, ou ainda suspenso
ou em avaliação
– Em princípio cada aluno está associado a um só projeto em contexto de
formação avançada, mas como existe a possibilidade de um aluno poder
frequentar mais do que uma formação avançada (mesma a tempos
diferentes), também pode estar associado a mais do que um projeto
– Embora o projeto tenha apenas um só responsável que terá de ser um
orientador, pode ter envolvidos um ou mais alunos. Desta forma, cada aluno
deve ser associado de modo a ser indicado a data de início e de fim do seu
envolvimento com o projeto. Deve ainda ser indicado o estado desse
envolvimento, nomeadamente se está em curso, suspenso ou concluído
Luís Borges Gouveia, lmbg@ufp.edu.pt
37. Modelo E-R para o contexto do desafio 2
Mais uma entidade
(projeto) e duas
relações: trabalho
(um aluno trabalha
em vários projetos e
num projeto,
trabalham vários
alunos) e liderar (um
orientador lidera
vários projetos e um
projeto é liderado por
um orientador
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
Luís Borges Gouveia, lmbg@ufp.edu.pt
39. Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Criar a tabela Projeto(idp, nome, ido, sigla, orcamento, sponsor,
financiamento, datai, dataf)
– Create table projeto(idp integer primary key, nome text, ido integer, sigla text,
orcamento real, sponsor text, financiamento real, datai date, dataf data,
estado text);
• Criar a tabela Trabalho(idt, idp, ida, datai, dataf, estado)
– Create table trabalho(idt integer primary key, idp integer, ida integer, datai
date, dataf date, estado text);
Luís Borges Gouveia, lmbg@ufp.edu.pt
40. Sobre o modelo de dados estendido
• Depois de introduzir os dados associados com os projetos e de os
relacionar com os alunos (trabalho), é possível consultar os dados,
como por exemplo: listar, os projetos, por nome do aluno, estado do
seu trabalho, estado do projeto e financiamento do projeto
– select projeto.nome, aluno.nome, trabalho.estado, projeto.estado,
projeto.financiamento from projeto, trabalho, aluno where
aluno.ida=trabalho.ida and trabalho.idp=projeto.idp;
• Desta forma, novas funcionalidades foram acrescentadas,
permitindo a gestão da informação associada com os projetos, o
seu estado, financiamento, datas associadas e alunos e
responsáveis implicados
• Mas atenção!!! falta ainda um dos requisitos solicitados no
desafio 2: (…), bem como relatórios associados e produção
científica realizada?
Luís Borges Gouveia, lmbg@ufp.edu.pt
41. Solução para incluir relatórios e publicações
• A forma mais fácil, é considerar estes elementos como resultados dos
projetos e em consequência, registar apenas a sua relação com os
projetos, uma citação completa e um identificador para a base de dados
de publicações que foi já objeto de estudo e projeto
• No contexto apresentado, toma-se por princípio que cada relatório ou
publicação, está associada a apenas um dado projeto.
• A citação do trabalho é realizada de forma a construir uma frase com a
menção dos autores, da data, título, local de publicação, editora e demais
elementos, em função do tipo de publicação que deve também ser
indicado
• Um exemplo de uma citação:
– Oliveira, M.; Nakamura, E.; Gouveia, L.; Massunari, L. & Louzada, M.
(2015). Computational solution "ODR-ATA" to mesurement of bone density from
radiographic density. 4th Joint Meeting of ECTS and IBMS. European Calcified
Tissue Society International Bone & Mineral Society. The Netherlands, Rotterdam.
25-28 April. ECTS-IBMS Abstracts (2015), pp 77. Poster on proceedings: IBMS
BoneKEy 13, Article number: 673 (2015) | doi:10.1038/bonekey.2015.40
Luís Borges Gouveia, lmbg@ufp.edu.pt
42. Modelo E-R para o contexto completo do
desafio 2 (com os resultados dos projetos)
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
possui
RESULTADO
Mais uma entidade
(resultado) e uma
relação: possui (um
projeto possui vários
resultados e um
resultado está
associado a um
projeto)
Luís Borges Gouveia, lmbg@ufp.edu.pt
43. Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Depois de criadas as tabelas Projeto eTrabalho, é agora necessário criar a
tabela Resultado(idr, idp, citacao, tipopub, bdpubs)
– Create table resultado(idr integer primary key, idp integer, citacao text,
tipopub text, bdpubs integer);
• Em que:
– idr: identificador único de resultado
– idp: identificador único de projeto
– citacao: citação completa do resultado
– tipopub: tipo de publicação do resultado
– bdpubs: identificador único para relacionar com a base de dados de
publicações
Luís Borges Gouveia, lmbg@ufp.edu.pt
44. Resposta, desafio 3
O que é necessário para o modelo de dados registar, além dos
alunos que concluíram as suas formações avançadas, todos
aqueles que ainda as estão a realizar, indicando o seu estado e
as reuniões de trabalho com os orientadores?
• Neste caso, o modelo de dados tem de ser estendido de
forma a assegurar as novas necessidades
Luís Borges Gouveia, lmbg@ufp.edu.pt
45. Considere o seguinte contexto para o desafio 3
• O registo de alunos em curso, altera o contexto inicial proposto para a
base de dados alumni: como o nome indica, é para registo dos antigos
alunos
• Desta forma, algumas alterações necessitam de ser realizadas de modo a
permitir não só o registo e manutenção do estado em que se encontram
os alunos, como a identificação de quem já concluiu a sua formação
avançada
• A indicação mais fácil para realizar essa identificação é na tabela
graduação. É importante tomar em consideração que um aluno pode ter
mais do que um orientador e que pode realizar mais do que uma
formação avançada
• Será necessário o registo das interações entre alunos e orientadores,
registando o seu tempo e uma descrição associada. A opção foi pela
criação de uma estrutura que agrega a interação, o orientador e a
graduação de modo a permitir a existência de mais do que um orientador
e garantindo que o aluno mantêm o estado, sem repetições, pois o seu
relacionamento é feito de forma indireta, precisamente pela tabela
graduação (que contém a identificação do aluno)
Luís Borges Gouveia, lmbg@ufp.edu.pt
46. Modelo E-R para o contexto do desafio 2
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
possui
RESULTADO
encontro
INTERAÇÃO
Mais uma entidade
(interação) e uma
relação: encontro
(um orientador tem
encontros com várias
interações e uma
interação tem
encontros com vários
orientadores)
Luís Borges Gouveia, lmbg@ufp.edu.pt
47. Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Criar a tabela Interacao(idi, tipo, data, horai, horaf, descre)
– Create table interacao(idi integer primary key, tipo text, data date, horai time,
horaf time, descre text);
• Criar a tabela Encontro(ide, idi, ido, idg)
– Create table encontro(ide integer primary key, idi integer, ido integer, idg
integer);
• Adicionar o atributo estado à tabela Graduação (idg, ida, idf, data, estado)
– alter table graduacao add column estado text;
Luís Borges Gouveia, lmbg@ufp.edu.pt
48. Assegurar a utilização dos dados existentes
• A alteração na tabela graduação é crucial, de forma a permitir identificar
quais os alunos que já finalizaram os seus graus, pois agora são também
incluídos na tabela alunos, aqueles que estão ainda noutros estados do
seu percurso de trabalho
• Assim, é necessário adicionar o atributo estado na tabela graduação, que
distingue antigos alunos dos alunos atuais
• Antes de introduzir novos alunos, deve ser colocado o estado (atributo da
tabela graduação) dos existentes a ‘finalizada’; para tal, podemos usar um
comando SQL para atualizar todos os elementos da tabela (28
graduações):
– update graduacao set estado=‘finalizado’;
• Desta forma, para saber quais os alunos que já concluíram a sua formação
avançada, listando o respetivo nome e nome do grau, é usado o comando
SQL:
– select aluno.nome, favancada.nome from aluno, favancada, graduacao where
aluno.ida=graduacao.ida and graduacao.idf=favancada.idf order by
favancada.nome;
Luís Borges Gouveia, lmbg@ufp.edu.pt
49. Modelo E-R final para os alumni e incorporando projetos, resultados e
o registo de atividade de supervisão de alunos atuais
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
possui
RESULTADO
encontro
INTERAÇÃO
Luís Borges Gouveia, lmbg@ufp.edu.pt
50. Leitura do modelo E-R final
• Relação binária graduação, muitos para muitos
– Um aluno é graduado em uma ou várias formações avançadas
– Uma formação avançada permite a graduação de um ou vários alunos
• Relação binária supervisão, muitos para muitos
– Um aluno tem supervisão de um ou vários orientadores
– Um orientador é supervisor de um ou vários alunos
• Relação binária trabalho, muitos para muitos
– Um aluno trabalha num ou vários projetos
– Num projeto trabalham um ou vários alunos
• Relação binária liderar, um para muitos
– Um orientador lidera um ou vários projetos
– Um projeto é liderado por um orientador
• Relação binária possui, um para muitos
– Um projeto possui um ou mais resultados
– Um resultado está associado com um projeto
• Relação binária encontro, muitos para muitos
– Um orientador tem encontro com um ou várias interações
– Uma interação tem encontro com um ou mais orientadores
Seis (6) entidades:
• Aluno
• Formação avançada
• Orientador
• Projeto
• Resultado
• Interação
Seis (6) relações binárias
• Graduação
• Supervisão
• Trabalho
• Liderar
• Possui
• Encontro
Luís Borges Gouveia, lmbg@ufp.edu.pt
51. Esquema relacional final para os alumni e incorporando projetos,
resultados e o registo de atividade de supervisão de alunos atuais
11 Tabelas, com um total de 66 atributos:
• CREATE TABLE aluno(ida integer primary key, nome text, sexo text, pais text);
• CREATE TABLE afiliacao(idaf integer primary key, sigla text, nome text, subnome text, local text, pais
text, url text);
• CREATE TABLE favancada(idf integer primary key, nome text, titulo text, tipo text, designacao text,
idaf integer);
• CREATE TABLE orientador(ido integer primary key, nome text, nome_cit text, sexo text, cargo text,
pais text, idaf integer);
• CREATE TABLE graduacao(idg integer primary key autoincrement, ida integer, idf integer, data date,
estado text);
• CREATE TABLE supervisao(ids integer primary key autoincrement, ida integer, ido integer, idf integer,
papelo text);
• CREATE TABLE projeto(idp integer primary key, nome text, ido integer, sigla text, orcamento real,
sponsor text, financiamento real, datai date, dataf date, estado text);
• CREATE TABLE trabalho(idt integer primary key, idp integer, ida integer, datai date, dataf date,
estado text);
• CREATE TABLE interacao(idi integer primary key, tipo text, data date, horai time, horaf time, descre
text);
• CREATE TABLE resultado(idr integer primary key, idp integer, citacao text, tipopub text, bdpubs
integer);
• CREATE TABLE encontro(ide integer primary key, idi integer, ido integer, idg integer, estaluno text);
Luís Borges Gouveia, lmbg@ufp.edu.pt
52. Resumindo
• Registo da atividade de supervisão
de formação avançada para registo
de alumni
• Considerar alunos de mais do que
um orientador e estender o
modelo de dados para um grupo
de investigadores
• Considerar o registo dos projetos
associados com os alunos e sob
orientação
• Considerar o registo de relatórios
associados e produção científica
realizada no âmbito da atividade
de formação avançada
• Registar todos os alunos que ainda
estão em formação avançada,
indicando o seu estado e as
reuniões de trabalho com os
orientadores
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
possui
RESULTADO
encontro
INTERAÇÃO
Luís Borges Gouveia, lmbg@ufp.edu.pt
53. Especificações completas para a base
de dados desenvolvida
• Necessário o registo da atividade de supervisão de formação avançada para registo de alumni (alunos que concluíram a sua formação avançada)
– Pretende-se o registo de cada aluno com indicação do nome, sexo e nacionalidade
– Também o registo da formação avançada, com base na designação, tipo, nome e escola
– É necessário associar os respetivos orientadores (podem ser um ou mais do que um – normalmente, existindo coorientação, é apenas um
segundo elemento)
– Cada orientador deve ser identificado pelo seu nome (e também nome de citação), sexo, cargo atual, nacionalidade e local de afiliação
(escola)
– A graduação de cada aluno deve incluir a data em que ocorreu o seu exame ou reconhecimento de conclusão da formação avançada
• Necessário considerar alunos de mais do que um orientador e estender o modelo de dados para um grupo de investigadores
• Necessário considerar o registo dos projetos associados com os alunos e sob orientação. Dessa forma, é necessário considerar:
– O registo de cada projeto, o seu responsável (orientador) e os alunos que o realizam (podem ser um ou mais alunos)
– O projeto deve conter informação sobre a sua data de início e de fim, o orçamento, o nome e sigla usada e caso tenha financiamento, deve
indicar o montante e o respetivo financiador
– Para cada projeto deve ser ainda indicado o seu estado, nomeadamente se já se encontra concluído, está em curso ou em candidatura, ou
ainda suspenso ou em avaliação
– Em princípio cada aluno está associado a um só projeto em contexto de formação avançada, mas como existe a possibilidade de um aluno
poder frequentar mais do que uma formação avançada (mesma a tempos diferentes), também pode estar associado a mais do que um
projeto
– Embora o projeto tenha apenas um só responsável que terá de ser um orientador, pode ter envolvidos um ou mais alunos. Desta forma, cada
aluno deve ser associado de modo a ser indicado a data de início e de fim do seu envolvimento com o projeto. Deve ainda ser indicado o
estado desse envolvimento, nomeadamente se está em curso, suspenso ou concluído
• Necessário considerar o registo de relatórios associados e produção científica realizada no âmbito da atividade de formação avançada
• Necessário registar, além dos alunos que concluíram as suas formações avançadas, todos aqueles que ainda as estão a realizar, indicando o seu
estado e as reuniões de trabalho com os orientadores
– O registo de alunos em curso, altera o contexto inicial proposto para a base de dados alumni: como o nome indica, é para registo dos antigos
alunos
– Desta forma, algumas alterações necessitam de ser realizadas de modo a permitir não só o registo e manutenção do estado em que se
encontram os alunos, como a identificação de quem já concluiu a sua formação avançada
– A indicação mais fácil para realizar essa identificação é na tabela graduação. É importante tomar em consideração que um aluno pode ter
mais do que um orientador e que pode realizar mais do que uma formação avançada
– Será necessário o registo das interações entre alunos e orientadores, registando o seu tempo e uma descrição associada. A opção foi pela
criação de uma estrutura que agrega a interação, o orientador e a graduação de modo a permitir a existência de mais do que um orientador e
garantindo que o aluno mantêm o estado, sem repetições, pois o seu relacionamento é feito de forma indireta, precisamente pela tabela
graduação (que contém a identificação do aluno)
Luís Borges Gouveia, lmbg@ufp.edu.pt
54. Esquema relacional com suporte explícito de chaves estrangeiras
(força a existência de uma referência prévia da chave estrangeira, na
chave primária da tabela a que lhe corresponde)
11 Tabelas, com um total de 66 atributos:
• CREATE TABLE aluno(ida integer primary key, nome text, sexo text, pais text);
• CREATE TABLE afiliacao(idaf integer primary key, sigla text, nome text, subnome text, local text, pais text, url text);
• CREATE TABLE favancada(idf integer primary key, nome text, titulo text, tipo text, designacao text, idaf integer);
• CREATE TABLE orientador(ido integer primary key, nome text, nome_cit text, sexo text, cargo text, pais text, idaf
integer, foreign key(idaf) references afiliacao(idaf) );
• CREATE TABLE graduacao(idg integer primary key autoincrement, ida integer, idf integer, data date, estado text,
foreign key(ida) references aluno(ida), foreign key(idf) references favancada(idaf));
• CREATE TABLE supervisao(ids integer primary key autoincrement, ida integer, ido integer, idf integer, papelo text,
foreign key(ida) references aluno(ida), foreign key(ido) references orientador(ido), foreign key(idf) references
favancada(idf));
• CREATE TABLE projeto(idp integer primary key, nome text, ido integer, sigla text, orcamento real, sponsor text,
financiamento real, datai date, dataf date, estado text, foreign key(ido) references orientador(ido));
• CREATE TABLE trabalho(idt integer primary key, idp integer, ida integer, datai date, dataf date, estado text, foreign
key(idp) references projeto(idp), foreign key(ida) references aluno(ida));
• CREATE TABLE interacao(idi integer primary key, tipo text, data date, horai time, horaf time, descre text);
• CREATE TABLE resultado(idr integer primary key, idp integer, citacao text, tipopub text, bdpubs integer, foreign
key(idp) references projeto(idp));
• CREATE TABLE encontro(ide integer primary key, idi integer, ido integer, idg integer, estaluno text, foreign key(idi)
references interacao(idi), foreign key(ido) references orientador(ido), foreign key(idg) references graduacao(idg));
XXX Chave primária YYY Chave estrangeira ou secundária
Luís Borges Gouveia, lmbg@ufp.edu.pt
Notes de l'éditeur
sqlite> select count(*) from aluno;
27
sqlite> Select count(*) from graduacao;
28
sqlite> Select count(*) from favancada;
8
sqlite> select count(*) from orientador;
count(*)
---------------
2
sqlite> Select count(sexo) from aluno where sexo=‘Feminino’;
count(sexo)
---------------
9
sqlite> Select count(sexo) from aluno where sexo=‘Masculino’;
count(sexo)
---------------
18
sqlite>
sqlite> select count(*) from aluno;
27
sqlite> Select count(*) from graduacao;
28
sqlite> Select count(*) from favancada;
8
sqlite> select nome from favancada order by nome;
Doutoramento em Ciências da Informação - especialização em Sistemas e Tecnologias da Informação
Doutoramento em Engenharia de Gestão e Industrial
Mestrado em Ciências Empresariais
Mestrado em Ciências da Informação e Documentação
Mestrado em Engenharia Informática
Mestrado em Gestão da Ciência, Tecnologia e Inovação
Mestrado em Gestão da Informação
Pós Doutoramento em e-learning
sqlite> select aluno.nome, favancada.titulo from aluno, graduacao, favancada where aluno.ida=graduacao.ida and graduacao.idf=favancada.idf order by aluno.nome;
nome titulo
-------------------------------------------------- --------------------
Artur Jorge Afonso de Sousa Doutoramento
Carlos Alberto Torres Quental Doutoramento
Christelle Marie Cardoso Soigné Mestrado
David Lopes Abrantes Mestrado
Filipe Miguel Bispo Fidalgo Doutoramento
Gilberto Manuel Gomes Branco Vasco Mestrado
Helder José Marques Caixinha Mestrado
Jorge Manuel Correia da Silva Xavier Mestrado
Jorge Manuel Viegas Graça Mestrado
José Luis de Sousa Rodrigues Mestrado
Luis António Morão Pinto Simões da Cunha Doutoramento
Marco José de Oliveira Pereirinha Mestrado
Margarida Amélia Correia Bairrão do Vale Marque Mestrado
Maria João Silva Teixeira Guedes Mesquita Mestrado
Martinho André Cerqueira de Oliveira Mestrado
Márcia Cristina de Castro Moreira Mestrado
Paula Cristina Marinho Moura Mestrado
Paula Peres Pós Doutoramento
Paulo Adriano Sousa Teixeira Mestrado
Paulo Alexandre Lima Rurato Doutoramento
Paulo Rocha Neto Mestrado
Pedro Nuno Moreira da Silva Doutoramento
Pereira Alfredo Doutoramento
Sandra Sofia Nora Gaio Doutoramento
Steven Lopes Abrantes Doutoramento
Steven Lopes Abrantes Mestrado
Susana Maria Labrincha de Azevedo Mestrado
Teresa Maria Borges Cardoso Mestrado
sqlite> select orientador.nome, nome_cit, count(*) from orientador, supervisao where orientador.ido=supervisao.ido group by nome;
nome nome_cit count(*)
-------------------------------------------------- -------------------- ----------
Joaquim José Borges Gouveia Borges Gouveia 3
Luis Manuel Borges Gouveia Luis Borges Gouveia 28
sqlite> select distinct favancada.titulo, count(*) from favancada, graduacao where favancada.idf=graduacao.idf group by favancada.titulo;
titulo count(*)
-------------------------------------------------- --------------------
Doutoramento 9
Mestrado 18
Pós Doutoramento 1
sqlite>
sqlite> select graduacao.data, aluno.nome, favancada.nome from graduacao, aluno, favancada where graduacao.ida=aluno.ida and graduacao.idf=favancada.idf group by data order by strftime('%Y', data);
data nome nome
--------------- -------------------------------------------------- ------------------------------------------------------------
2003-04-12 Margarida Amélia Correia Bairrão do Vale Marque Mestrado em Gestão da Informação
2004-07-12 Jorge Manuel Correia da Silva Xavier Mestrado em Gestão da Ciência, Tecnologia e Inovação
2005-11-10 Gilberto Manuel Gomes Branco Vasco Mestrado em Gestão da Informação
2005-11-11 Paulo Adriano Sousa Teixeira Mestrado em Gestão da Informação
2005-11-20 Jorge Manuel Viegas Graça Mestrado em Gestão da Informação
2006-11-10 Marco José de Oliveira Pereirinha Mestrado em Gestão da Informação
2007-06-10 Steven Lopes Abrantes Mestrado em Gestão da Informação
2007-07-10 Maria João Silva Teixeira Guedes Mesquita Mestrado em Gestão da Informação
2007-07-16 Márcia Cristina de Castro Moreira Mestrado em Engenharia Informática
2007-11-11 José Luis de Sousa Rodrigues Mestrado em Gestão da Informação
2007-12-10 David Lopes Abrantes Mestrado em Gestão da Informação
2008-12-12 Paulo Alexandre Lima Rurato Doutoramento em Engenharia de Gestão e Industrial
2009-10-10 Christelle Marie Cardoso Soigné Mestrado em Gestão da Informação
2009-10-16 Paula Cristina Marinho Moura Mestrado em Gestão da Informação
2009-10-20 Susana Maria Labrincha de Azevedo Mestrado em Gestão da Informação
2009-11-11 Helder José Marques Caixinha Mestrado em Gestão da Informação
2010-06-10 Sandra Sofia Nora Gaio Doutoramento em Engenharia de Gestão e Industrial
2011-06-11 Paula Peres Pós Doutoramento em e-learning
2011-07-10 Steven Lopes Abrantes Doutoramento em Ciências da Informação - especializaç?
2011-07-17 Pedro Nuno Moreira da Silva Doutoramento em Ciências da Informação - especializaç?
2012-04-21 Teresa Maria Borges Cardoso Mestrado em Ciências da Informação e Documentação
2012-06-10 Luis António Morão Pinto Simões da Cunha Doutoramento em Ciências da Informação - especializaç?
2013-01-10 Filipe Miguel Bispo Fidalgo Doutoramento em Ciências da Informação - especializaç?
2013-04-10 Artur Jorge Afonso de Sousa Doutoramento em Ciências da Informação - especializaç?
2014-03-19 Martinho André Cerqueira de Oliveira Mestrado em Ciências Empresariais
2015-02-10 Pereira Alfredo Doutoramento em Ciências da Informação - especializaç?
2015-02-17 Carlos Alberto Torres Quental Doutoramento em Ciências da Informação - especializaç?
2015-04-21 Paulo Rocha Neto Mestrado em Engenharia Informática
sqlite>
Apenas o registo de mais orientadores e registar as suas supervisões. O modelo de dados, tal como está, responde a esse contexto.
Neste caso, o modelo de dados tem de ser extendido de forma a assegurar as novas necessidades
Neste caso, o modelo de dados tem de ser extendido de forma a assegurar as novas necessidades