2
respostas

[Dúvida] Tem problema em colocar o número de matrícula como atributo chave primária?

Consegui resolver o desafio proposto, mas coloquei um atributo a mais, o campo 'numero' na entidade matrícula, tem problema?

Criação das tabelas:

CREATE TABLE ALUNOS (
    COD_ALUNO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRIMARY KEY (COD_ALUNO)
);

CREATE TABLE MATRICULAS (
    NUMERO INT NOT NULL,
    COD_ALUNO INT NOT NULL,
    COD_CURSO INT NOT NULL,
    PRIMARY KEY (NUMERO)
);

CREATE TABLE CURSOS (
    COD_CURSO INT NOT NULL,
    NOME VARCHAR(50) NOT NULL,
    PRIMARY KEY (COD_CURSO)
);

Inserindo valores:

INSERT INTO ALUNOS(COD_ALUNO, NOME) VALUES
(1, "João"),
(2, "Maria"),
(3, "Pedro");

INSERT INTO CURSOS(COD_CURSO, NOME) VALUES
("C01", "Matemática"),
("C02", "História"),
("C03", "Ciências");

INSERT INTO MATRICULAS(NUMERO, COD_ALUNO, COD_CURSO) VALUES
(1, 1, "C01"),
(2, 1, "C02"),
(3, 2, "C02"),
(4, 3, "C01"),
(5, 3, "C03");

Resultados: Insira aqui a descrição dessa imagem para ajudar na acessibilidade Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidadeTudo certo?

2 respostas

E aí, Lucas!

Então, sobre colocar o número de matrícula como chave primária, pode dar um nó nas coisas. Se tu pensa em "Tudo certo?" do jeito que está, a resposta é meio "mais ou menos".

Veja, a ideia de chave primária é ser única e identificar completamente uma linha, mas se o número de matrícula pode se repetir (tipo, dois alunos podem ter a mesma matrícula em cursos diferentes), isso pode te causar uns problemas.

Consideraria dar um trato nisso. Talvez faz sentido ter um ID a mais, tipo um número de identificação único que não se repita, para ser a chave primária. Fica mais tranquilo e evita futuras dores de cabeça na hora de mexer nos dados.

Se mais alguém quiser contribuir com a discussão ;)

Eu entendi o que você escreveu e faz sentido. É que quando modelei eu não pensei na hipótese de ter mais de uma matrícula com o mesmo valor, por isso não coloquei o atributo.

Mas fora isso, acredito que a modelagem está certa, porque com a matrícula poderá ser consultado o aluno e o curso do mesmo. Mas com isso, a matrícula deixa de ser uma entidade fraca, que só nasceu da relação curso e aluno.