3
respostas

Aula - 4 Chaves estrangeiras Curso PostgreSQL: Views, Sub-Consultas e Funções

Ola, prezados.. fiquei com uma dúvida, quando na aula 4 do Curso PostgreSQL: Views, Sub-Consultas e Funções: https://cursos.alura.com.br/course/postgresql-views-sub-consultas-funcoes/task/78653

O professor mostra a estrutura da tabela aluno_curso, que foi criada com uma chave primária:

create table aluno_curso (
    aluno_id integer,
    curso_id integer,
    primary key (aluno_id, curso_id),
    foreign key (aluno_id)
    references aluno (id),
    foreign key (curso_id)
    references curso (id)
);

Dúvida1: A tabela criada, possuí apenas duas colunas (aluno_id e curso_id), não deveria termos uma terceira coluna visível?

Dúvida2: Consigo dar um select em um ID da chave primária dessa tabela? Como faço para visualizar os dados dessa coluna?

3 respostas

Não entendi suas dúvidas, Paloma.

Essa tabela é apenas uma tabela de relacionamento. Ela relaciona alunos com cursos. Para buscar os dados dos alunos ou cursos, você vai fazer JOINs das respectivas tabelas com essa, entende?

Oi Vinicius, tudo bem? Obrigado pelo retorno. A tabela aluno_curso cria uma chave primária apenas "virtual", o ID é montado com duas outras chaves. Isso está correto?

Ou seja, eu não vou conseguir contar a quantidade de registro da tabela aluno_curso através da chave principal, porque ela não existe. Por exemplo assim:

select count(nomedachaveprimaria) from aluno_curso;

Consegui explicar melhor?

A tabela aluno_curso cria uma chave primária apenas "virtual", o ID é montado com duas outras chaves.

O que seria uma chave primária virtual? O que nós temos é uma chave primária composta. A chave primária é composta dos 2 campos da tabela. A junção desses 2 campos é única e o que identifica cada registro. Não há um "id" específico para essa tabela. Não há necessidade

Ou seja, eu não vou conseguir contar a quantidade de registro da tabela aluno_curso através da chave principal

Você consegue contar o número de registros sem problema:

SELECT COUNT(*) FROM aluno_curso;