1
resposta

Tentando entender o relacionamento das tabelas entre si, usando o INSERT

Olá, antes de eu tentar caprichar em PHP mais a fundo, ando estudando melhor a logica do mySQL, com select, delete,insert etc. Mas na hora que estudar o banco de dados sql com o tempo, percebi que na prática não é correto inserir todas os elementos em uma tabela só, já que causa uma bagunça na lógica. E então estou nesse impasse tentando entender essa lógica. Exemplo, tenho 3 tabelas... Uma é "Pessoa", "Profissao" e "Universidade", que ao inves de colocar profissao e universidade dentro da propria tabela Pessoa, resolvi separá-los p/ tentar entender o funcionamento entre si através da interligação entre as 3 tabelas. Sendo que conseguiria conectar a tabela profissão e universidade para Pessoa, problema que não estou conseguindo, e não quero ficar fazendo gambiarras. Como eu faria para inserir um elemento de uma tabela em outra ? Estou colocando um link dos arquivos p/ você tentar entender de acordo com o formulario que fiz, de forma separada...

https://drive.google.com/drive/folders/1HxMz4WRrPfAa-X153rxZOOQntpgGk2C4?usp=sharing

Demonstração: (Ou segue, o arquivos que deixei no link, para poder entender melhor, é simples de entender)

    public function addPessoa($nome, $sobrenome, $telefone) {
        global $pdo;

        $sql = $pdo->prepare("INSERT INTO pessoa SET nome = :nome, sobrenome = :sobrenome, telefone = :telefone");
        $sql->bindValue(":nome", $nome);
        $sql->bindValue(":sobrenome", $sobrenome);
        $sql->bindValue(":telefone", $telefone);

        $sql->execute();
    }


    public function addProfissao($nome) {// como eu faria para inserir o nome da universidade da tabela Profissão para tabela Pessoa ?
        global $pdo;

        $sql = $pdo->prepare("INSERT INTO profissao SET nome = :nome");
        $sql->bindValue(":nome", $nome);

        $sql->execute();
    }


    public function addUniversidade($nome) { // como eu faria para inserir o nome da universidade da tabela Universidade para tabela Pessoa ?
        global $pdo;

        $sql = $pdo->prepare("INSERT INTO universidade SET nome = :nome");
        $sql->bindValue(":nome", $nome);

        $sql->execute();
    }

1 resposta

Oi Israel, beleza?

Primeiro você tem que saber quais relações existem na sua modelagem, da maneira que você abordou está bem confuso.

Na sua modelagem quais as relações existentes entre Pessoa, Profissão e Universidade? Outro detalhe é que Pessoa não é um nome muito descritivo dentro do seu modelo por que pode representar uma infinidade de coisas, é bom ser mais específico.

Um dos pré requisitos para esse curso é saber o básico de SQL (consultas e modelagem), sugiro fortemente tirar um tempo para aprender um pouco sobre SQL e depois retornar a esse e outros treinamentos, na Alura tem ótimos cursos de SQL. =D

Vou te dar um exemplo bem raso de como pensar em uma modelagem, vamos contextualizar: Digamos que exista uma Universidade chamada de UniAlura(nome fictício). Na UniAlura existem Cursos, Alunos e Professores e ela te contrata para criar uma modelagem de dados para que seja possível armazenar esses dados, como você faria?

Sabemos que na Unilura um Aluno pode participar de vários Cursos e no Curso podemos ter vários Alunos, ou seja, temos uma relação de N:N. E que um Curso tem somente um Professor, porém o Professor pode ensinar vários Cursos, ou seja, temos uma relação de 1:N. Logo as tabelas podem ficar da seguinte da maneira:

create table aluno(
    id int not null primary key auto_increment,
    nome varchar(100)
);

create table professor(
    id int not null primary key auto_increment,
    nome varchar(100)
);

create table curso(
    id int not null primary key auto_increment,
    nome varchar(100),
    id_professor int not null,
    foreign key (id_professor) references professor(id)
);

create table aluno_curso(
    id_aluno int not null,
    id_curso int not null,
    primary key (id_aluno, id_curso)
);