Mais um exemplo do recurso a
bases de dados relacionais em
SQLite
Base de dados de supervisão / formação avançada / alumni...
Formação avançada
• A atividade de formação avançada em contexto
universitário engloba a supervisão individual ou
conjunta...
Considere o seguinte contexto
• Existe a necessidade de registo da atividade de supervisão de
formação avançada, nesta fas...
Um modelo E-R proposto para o contexto
• Consideram-se:
– três entidades: aluno, orientador e formação
avançada
– Duas rel...
Esquema relacional do contexto
• Aluno (ida, nome, sexo, pais)
• Afiliacao (idaf, sigla, nome, subnome, local, pais, url)
...
Os comandos SQL mais comuns
http://www.tutorialspoint.com/sqlite
Para as tabelas da base de dados
• CREATE TABLE: criar um...
Criar a base de dados…
• Na linha de comando do SO
– Sqlite3 alumni.db
• Criar a tabela Aluno (ida, nome, sexo, dnasc, pai...
Informação sobre a bd alumni.db
• Testar os comandos: .databases (lista as bases de dados consideradas no
ficheiro alumni....
Teste do modelo criado
• Para testar o modelo criado é tomada a listagem de
supervisões concluídas, conforme descrita em
h...
Inserir alunos…
[Aluno (ida, nome, sexo, pais)]
Insert into aluno values(1, ‘Margarida Amélia Correia Bairrão do Vale Marq...
Inserir as afiliações… [Afiliacao (idaf, sigla,
nome, subnome, local, pais, url)]
Insert into afiliacao values(1, ‘UFP’, ‘...
Inserir as formações avançadas… [Favancada
(idf, nome, titulo, tipo, designação, idaf)]
Insert into favancada values (1, ‘...
Inserir os orientadores… [Orientador (ido, nome,
nome_cit, sexo, cargo, pais, idaf)]
Insert into orientador values(1, ‘Lui...
Associar os alunos às formações avançadas…
[Graduacao (idg, ida, idf, data)]
Insert into graduacao values(1, 27, 7, ‘2011-...
Associar os alunos aos orientadores
[supervisao(ids, ida, ido, idf)]
Insert into supervisao values(1, 1, 1, 1);
Insert int...
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...
Formatar os resultados no SQLite
sqlite> .header on  colocar o nome e separador de cada atributo da tabela
sqlite> .mode ...
Alguns exercícios simples,
com base no comando Select
• Quantos alunos estão registados?
– select count(*) from aluno;
• Q...
Mais alguns exercícios com base no
comando Select
• Listar o nome das formações avançadas registadas, por ordem alfabética...
Mais alguns exercícios…
• Listar todos os orientadores, indicando o seu nome e nome de citação e
a quantidade de orientaçõ...
Ainda mais alguns exemplos
• Contar o número de alunos Portugueses que concluíram a sua formação
avançada
– select count(*...
Alguns desafios
1. O que é necessário para considerar alunos de mais do
que um orientador e estender este modelo de dados
...
Resposta, desafio 1
O que é necessário para considerar alunos de mais do
que um orientador e estender este modelo de dados...
Notas do desafio 1 (i)
• Um aspeto a ter em conta, é quando se listam orientadores
e existe mais de um para um dado par (a...
Notas do desafio 1 (ii)
• Com a adição do novo atributo na tabela, o esquema
relacional da base de dados é agora diferente...
Notas do desafio 1 (iii)
• A tabela supervisão tem o seguinte aspecto (select * from supervisao;):
ids ida ido idf papelo
...
Notas do desafio 1 (iv)
• Processo de descoberta e alteração de valores:
Passo 1: listar todos os alunos com outro orienta...
Notas do desafio 1 (v)
• Processo de descoberta e alteração de valores:
Passo 2: listar os registos de supervisão associad...
Notas do desafio 1 (vi)
• Processo de descoberta e alteração de valores:
Passo 3: listar os orientadores para identificar ...
Notas do desafio 1 (vii)
• Processo de descoberta e alteração de valores:
Passo 4: listar as supervisões que correspondem ...
Notas do desafio 1 (viii)
• Processo de descoberta e alteração de valores:
Passo 5: Alterar o atributo papelo (papel do or...
Notas do desafio 1 (ix)
Considerando os dados existentes, antes da alteração do modelo
• Listar todos os alunos e respetiv...
Notas do desafio 1 (x)
Considerando os dados existentes, antes da alteração do modelo
• Listar os alunos com co-orientador...
Notas do desafio 1 (xi)
select aluno.nome, supervisao.ida, count(supervisao.ida) as coorientacao from aluno,
supervisao wh...
Resposta, desafio 2
O que é necessário para o modelo de dados registar os projetos
dos alunos, com uma pequena descrição, ...
Considere o seguinte contexto para o desafio 2
• Existe a necessidade de registo dos projetos associados com os alunos e s...
Modelo E-R para o contexto do desafio 2
Mais uma entidade
(projeto) e duas
relações: trabalho
(um aluno trabalha
em vários...
Esquema relacional do contexto
• Aluno (ida, nome, sexo, pais)
• Afiliacao (idaf, sigla, nome, subnome, local, pais, url)
...
Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Criar a tabe...
Sobre o modelo de dados estendido
• Depois de introduzir os dados associados com os projetos e de os
relacionar com os alu...
Solução para incluir relatórios e publicações
• A forma mais fácil, é considerar estes elementos como resultados dos
proje...
Modelo E-R para o contexto completo do
desafio 2 (com os resultados dos projetos)
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJE...
Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Depois de cr...
Resposta, desafio 3
O que é necessário para o modelo de dados registar, além dos
alunos que concluíram as suas formações a...
Considere o seguinte contexto para o desafio 3
• O registo de alunos em curso, altera o contexto inicial proposto para a
b...
Modelo E-R para o contexto do desafio 2
ALUNO
ORIENTADOR
FORMAÇÃO
AVANÇADA
PROJETO
supervisão
graduação
liderar
trabalho
p...
Acrescentar a base de dados alumni.db
• Na linha de comando do SO, abrir a bd existente
– Sqlite3 alumni.db
• Criar a tabe...
Assegurar a utilização dos dados existentes
• A alteração na tabela graduação é crucial, de forma a permitir identificar
q...
Modelo E-R final para os alumni e incorporando projetos, resultados e
o registo de atividade de supervisão de alunos atuai...
Leitura do modelo E-R final
• Relação binária graduação, muitos para muitos
– Um aluno é graduado em uma ou várias formaçõ...
Esquema relacional final para os alumni e incorporando projetos,
resultados e o registo de atividade de supervisão de alun...
Resumindo
• Registo da atividade de supervisão
de formação avançada para registo
de alumni
• Considerar alunos de mais do ...
Especificações completas para a base
de dados desenvolvida
• Necessário o registo da atividade de supervisão de formação a...
Esquema relacional com suporte explícito de chaves estrangeiras
(força a existência de uma referência prévia da chave estr...
Próximos SlideShares
Carregando em…5
×

Um exemplo do uso do SQLite: uma base de dados para alumni

1.235 visualizações

Publicada em

Esta apresentação descreve na integra uma modelo de dados para para gerir uma lista de alumni em formação avançada (mestrado, doutoramento e pós doutoramento)

Publicada em: Educação
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.235
No SlideShare
0
A partir de incorporações
0
Número de incorporações
10
Ações
Compartilhamentos
0
Downloads
2
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide
  • 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
  • Um exemplo do uso do SQLite: uma base de dados para alumni

    1. 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. 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. 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. 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
    5. 5. Esquema relacional do contexto • Aluno (ida, nome, sexo, pais) • Afiliacao (idaf, sigla, nome, subnome, local, pais, url) • FAvancada (idf, nome, titulo, tipo, designação, idaf) • Orientador (ido, nome, nome_cit, sexo, cargo, pais, idaf) • Graduacao (idg, ida, idf, data) • Supervisao (ids, ida, ido, idf) Luís Borges Gouveia, lmbg@ufp.edu.pt
    6. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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
    38. 38. Esquema relacional do contexto • Aluno (ida, nome, sexo, pais) • Afiliacao (idaf, sigla, nome, subnome, local, pais, url) • FAvancada (idf, nome, titulo, tipo, designação, idaf) • Orientador (ido, nome, nome_cit, sexo, cargo, pais, idaf) • Graduacao (idg, ida, idf, data) • Supervisao (ids, ida, ido, idf, papelo) São acrescentadas mais duas tabelas: • Projeto(idp, nome, ido, sigla, orcamento, sponsor, financiamento, datai, dataf, estado) • Trabalho(idt, idp, ida, datai, dataf, estado) Luís Borges Gouveia, lmbg@ufp.edu.pt
    39. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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

    ×