Wagner, muito obrigado por compartilhar o conhecimento, vídeo sensacional, explicou rapidamente e com exemplos a utilização das chaves primárias e estrangeiras, além doas detalhes e pontos de atenção na sua utilização! Show de bola! Simples, objetivo e prático! Valeu!
Li todos comentários e batem exatamente com o meu, esse foi o único video que me fez entende PK e FK sem me fazer querer abandonar tudo. Aproveitem esse tesouro enquanto podem.
Cara valeu pela ajuda estou começando na faculdade de big data e estava quebrando a cabeça e após vários vídeos e seu foi direto ao ponto exemplificando de forma eficaz. Obrigado!!!
Cara, meus parabéns, vc explicou de uma forma muito boa e clara, me ajudou muito aqui : ) Estou fazendo meu primeiro projeto grande, e usando o SQL, pela primeira vez. Vlwww por me ajudar men : ) Sucesso : )
Nos campos marcados como chave estrangeira preciso entrar manualmente com os dados? por exemplo, se quero dizer que o fusca é do seu zé, preciso fazer um INSERT com valor 2? Obrigado.
Sim, isso mesmo. Vc coloca manualmente o valor da Foreign Key. Então, com base nesse valor, eu consigo ir lá na tabela, procurar pelo valor (2 por exemplo) e descobrir todos os demais dados naquela tabela. Na verdade, esse trabalho todo vai ser feito pelo programa né, um PHP, Java, etc que vc vai desenvolver pra criar um programa completo com banco de dados.
nao sei se eu posso perguntar aqui: como eu faria para a aplicaçao mostrar as opçoes de donos, na hora de inserir os modelos de carros (atraves de formulario html)? (supondo que ao longo do tempo novos donos sao inseridos atraves de um formulario html)
Bom dia Professor, muito obrigado pela explicação. Tenho uma dúvida, estou desenvolvendo um sistema para cadastrar locatários, para uma imobiliária. O cenário é o seguinte: Um locatário pode ter um cônjuge, caso o mesmo seja casado(a), ou seja, um relacionamento (1,1). Esse mesmo locatário, obrigatoriamente deve possuir dois avalistas, ou seja, um relacionamento (1,n). Porém, um avalista pode possuir um cônjuge tbm, ou seja, um relacionamento (1,1). A dúvida é a seguinte, como fazer o relacionamento entre essas três entidades (LOCATARIO, CONJUGE, AVALISTA), uma vez que, na tabela cônjuge deve ter a chave estrangeira para o locatário, e para o avalista, contudo não é possível que uma pessoa seja cônjuge do locatário e do avalista. Nesse caso seria melhor criar uma tabela só para cônjuge do avalista? Ficou estranho, mas espero que entenda. Desde já, muito obrigado por compartilhar seus conhecimentos!!
Olá! Tem várias formas de resolver. Uma delas é você não separar as pessoas em tabelas diferentes. Em vez disso, cria uma tabela única para cadastro de pessoa. Depois, cria tabela para cadastrar casamentos (considerando divórcio e viuvez). Já para o aluguél, cria uma tabela de contrato_de_locação, que envolve várias pessoas em papeis distintos. Assim, uma pessoa pode tranquilamente ser locatária em um contrato, avalista em outro e conjuge de um proprietário, tudo isso sem ter seu cadastro duplicado. Veja abaixo uma possível solução: CREATE TABLE PESSOA ( CPF CHAR(11) PRIMARY KEY ,NOME VARCHAR(100) ); CREATE TABLE RELACIONAMENTO_CONJUGAL ( CPF_CONJUGE_1 CHAR(11) ,CPF_CONJUGE_2 CHAR(11) ,ATUAL BOOLEAN DEFAULT 1 -- Se 1, está ativo. Se 0, divórcio ou viuvez. ,DATA_TERMINO DATE ,FOREIGN KEY (CPF_CONJUGE_1) REFERENCES PESSOA(CPF) ,FOREIGN KEY (CPF_CONJUGE_2) REFERENCES PESSOA(CPF) ); CREATE TABLE IMOVEL ( CODIGO INTEGER PRIMARY KEY ,ENDERECO VARCHAR(100) ,CPF_DONO CHAR(11) ,FOREIGN KEY (CPF_DONO) REFERENCES PESSOA(CPF) ); CREATE TABLE CONTRATO_LOCACAO ( CODIGO_CONTRATO INTEGER PRIMARY KEY ,CODIGO_IMOVEL INTEGER ,CPF_LOCADOR CHAR(11) ,CPF_LOCATARIO CHAR(11) ,CPF_AVALISTA_1 CHAR(11) ,CPF_AVALISTA_2 CHAR(11) ,FOREIGN KEY (CODIGO_IMOVEL) REFERENCES IMOVEL(CODIGO) ,FOREIGN KEY (CPF_LOCADOR) REFERENCES PESSOA(CPF) ,FOREIGN KEY (CPF_LOCATARIO) REFERENCES PESSOA(CPF) ,FOREIGN KEY (CPF_AVALISTA_1) REFERENCES PESSOA(CPF) ,FOREIGN KEY (CPF_AVALISTA_2) REFERENCES PESSOA(CPF) );
Ola! No caso do DELETE CASCADE, ao apagar o registro pai, o banco apaga automaticamente os registros filhos de outra tabela. Ou seja, apaga todos que tiverem chave estrangeira ligada ao registro que foi apagado. No exemplo de pessoas e carro do vídeo, ao apagar uma pessoa, todos os seus carros também são excluídos.
prof, se eu tiver uma: tabela pessoa ( cpf Chave Primária ) tabela aluno ( cpf Chave Primária e Chave Estrangeira ( no mesmo tempo) ) o valor da chave primaria (pessoa) preenche automaticamente o valor da chave estrangeira ( de aluno) ??????
Olá! Não, o valor não será preenchido automaticamente. Pra fazer isso, você precisaria de uma Trigger. Não é algo absurdo, mas já aumenta um pouco a complexidade. Daria pra resolver no programa, fazendo 2 inserts, um em cada tabela, sempre que for cadastrar um novo aluno. Já a exclusão automática é algo mais simples. Se a Foreign Key tiver o ON DELETE CASCADE, então o aluno é apagado automaticamente quando a pessoa é removida do banco.
@@teodosiosantos1134 Não. Banco Relacional gira em torno de Entidades e Relacionamentos. No fim, são tabelas e chaves estrangeiras somente. Outros tipos de bancos, como NoSQL ou Orientado a Documentos podem até ter coisa parecida, mas não vou saber falar pois não conheço profundamente.
No meu caso eu apago a postagem mas na tabela chave estrangeira o endereço do imagem continua no banco. Na página tudo é excluído. Mas indo no banco o endereço da imagem ainda está lá.
Bom dia! Não entendi. Se quiser compartilhar os comandos SQL que está usando pra criar as tabelas e manipular os dados, eu posso dar uma olhada pra tentar ajudar. Se tiver código fonte no github tbm posso consultar. Abraço e boa sorte!
Confira mais cursos: www.udemy.com/user/wagner-machado-do-amaral/
Wagner, muito obrigado por compartilhar o conhecimento, vídeo sensacional, explicou rapidamente e com exemplos a utilização das chaves primárias e estrangeiras, além doas detalhes e pontos de atenção na sua utilização! Show de bola! Simples, objetivo e prático! Valeu!
Li todos comentários e batem exatamente com o meu, esse foi o único video que me fez entende PK e FK sem me fazer querer abandonar tudo.
Aproveitem esse tesouro enquanto podem.
Muito obrigado!!
depois de horas na internet, enfim um video muito bom explicando as chaves.
parabens pelo video!
conteúdo muito bom
Cara só a sua explicação fez eu entender já tinha visto vários vídeos , muito obrigada!
Explicação ótima, valeu professor!!
Melhor video do assunto
Cara valeu pela ajuda estou começando na faculdade de big data e estava quebrando a cabeça e após vários vídeos e seu foi direto ao ponto exemplificando de forma eficaz. Obrigado!!!
Que legal! Bons estudos!
Finalmente encontrei uma boa explicação. Obrigada, professor.
Explicação bem clara, excelente!
Obrigada
Ótima explicação!
Muito boa a explicação e a ilustração! Valeu!
Explicação top, vlw
Cara, meus parabéns, vc explicou de uma forma muito boa e clara, me ajudou muito aqui : )
Estou fazendo meu primeiro projeto grande, e usando o SQL, pela primeira vez. Vlwww por me ajudar men : )
Sucesso : )
Muito obrigado pelo retorno, sucesso pra vc tbm!
Muito bem explicado, ajudou muito! Tenho essa matéria na faculdade e não explicam nada sobre as chaves, eu tava perdida sobre o assunto.
Que bom que ajudou!
nossa! agorinha mesmo encontrei esse vídeo. Estou a dias procurando algum vídeo que definissem as chaves de uma forma mais simples.
Aula muito boa, Brother! Obrigado 👏🏽
Muito boa e direta as aulas
Nos campos marcados como chave estrangeira preciso entrar manualmente com os dados? por exemplo, se quero dizer que o fusca é do seu zé, preciso fazer um INSERT com valor 2?
Obrigado.
Sim, isso mesmo. Vc coloca manualmente o valor da Foreign Key. Então, com base nesse valor, eu consigo ir lá na tabela, procurar pelo valor (2 por exemplo) e descobrir todos os demais dados naquela tabela. Na verdade, esse trabalho todo vai ser feito pelo programa né, um PHP, Java, etc que vc vai desenvolver pra criar um programa completo com banco de dados.
nao sei se eu posso perguntar aqui: como eu faria para a aplicaçao mostrar as opçoes de donos, na hora de inserir os modelos de carros (atraves de formulario html)? (supondo que ao longo do tempo novos donos sao inseridos atraves de um formulario html)
Bom dia Professor, muito obrigado pela explicação. Tenho uma dúvida, estou desenvolvendo um sistema para cadastrar locatários, para uma imobiliária. O cenário é o seguinte: Um locatário pode ter um cônjuge, caso o mesmo seja casado(a), ou seja, um relacionamento (1,1). Esse mesmo locatário, obrigatoriamente deve possuir dois avalistas, ou seja, um relacionamento (1,n). Porém, um avalista pode possuir um cônjuge tbm, ou seja, um relacionamento (1,1). A dúvida é a seguinte, como fazer o relacionamento entre essas três entidades (LOCATARIO, CONJUGE, AVALISTA), uma vez que, na tabela cônjuge deve ter a chave estrangeira para o locatário, e para o avalista, contudo não é possível que uma pessoa seja cônjuge do locatário e do avalista. Nesse caso seria melhor criar uma tabela só para cônjuge do avalista? Ficou estranho, mas espero que entenda. Desde já, muito obrigado por compartilhar seus conhecimentos!!
Olá! Tem várias formas de resolver.
Uma delas é você não separar as pessoas em tabelas diferentes.
Em vez disso, cria uma tabela única para cadastro de pessoa.
Depois, cria tabela para cadastrar casamentos (considerando divórcio e viuvez).
Já para o aluguél, cria uma tabela de contrato_de_locação, que envolve várias pessoas em papeis distintos.
Assim, uma pessoa pode tranquilamente ser locatária em um contrato, avalista em outro e conjuge de um proprietário, tudo isso sem ter seu cadastro duplicado.
Veja abaixo uma possível solução:
CREATE TABLE PESSOA (
CPF CHAR(11) PRIMARY KEY
,NOME VARCHAR(100)
);
CREATE TABLE RELACIONAMENTO_CONJUGAL (
CPF_CONJUGE_1 CHAR(11)
,CPF_CONJUGE_2 CHAR(11)
,ATUAL BOOLEAN DEFAULT 1 -- Se 1, está ativo. Se 0, divórcio ou viuvez.
,DATA_TERMINO DATE
,FOREIGN KEY (CPF_CONJUGE_1) REFERENCES PESSOA(CPF)
,FOREIGN KEY (CPF_CONJUGE_2) REFERENCES PESSOA(CPF)
);
CREATE TABLE IMOVEL (
CODIGO INTEGER PRIMARY KEY
,ENDERECO VARCHAR(100)
,CPF_DONO CHAR(11)
,FOREIGN KEY (CPF_DONO) REFERENCES PESSOA(CPF)
);
CREATE TABLE CONTRATO_LOCACAO (
CODIGO_CONTRATO INTEGER PRIMARY KEY
,CODIGO_IMOVEL INTEGER
,CPF_LOCADOR CHAR(11)
,CPF_LOCATARIO CHAR(11)
,CPF_AVALISTA_1 CHAR(11)
,CPF_AVALISTA_2 CHAR(11)
,FOREIGN KEY (CODIGO_IMOVEL) REFERENCES IMOVEL(CODIGO)
,FOREIGN KEY (CPF_LOCADOR) REFERENCES PESSOA(CPF)
,FOREIGN KEY (CPF_LOCATARIO) REFERENCES PESSOA(CPF)
,FOREIGN KEY (CPF_AVALISTA_1) REFERENCES PESSOA(CPF)
,FOREIGN KEY (CPF_AVALISTA_2) REFERENCES PESSOA(CPF)
);
@@profwagnermachado Obrigado professor, clareou minhas ideias.
Muito boa aula Wagner parabéns!
No exemplo de delete cascade,como ficaria?
To tendo um probleminha clientes e seus dados
Ola! No caso do DELETE CASCADE, ao apagar o registro pai, o banco apaga automaticamente os registros filhos de outra tabela.
Ou seja, apaga todos que tiverem chave estrangeira ligada ao registro que foi apagado.
No exemplo de pessoas e carro do vídeo, ao apagar uma pessoa, todos os seus carros também são excluídos.
prof, se eu tiver uma:
tabela pessoa (
cpf Chave Primária
)
tabela aluno (
cpf Chave Primária e Chave Estrangeira ( no mesmo tempo)
)
o valor da chave primaria (pessoa) preenche automaticamente o valor da chave estrangeira ( de aluno)
??????
Olá! Não, o valor não será preenchido automaticamente. Pra fazer isso, você precisaria de uma Trigger. Não é algo absurdo, mas já aumenta um pouco a complexidade. Daria pra resolver no programa, fazendo 2 inserts, um em cada tabela, sempre que for cadastrar um novo aluno. Já a exclusão automática é algo mais simples. Se a Foreign Key tiver o ON DELETE CASCADE, então o aluno é apagado automaticamente quando a pessoa é removida do banco.
@@profwagnermachado certo, em bd tem herança?? ( tipo em Java ou php )
@@profwagnermachado obg
@@profwagnermachado queria que uma tabela herdasse atributos de outra tabela
@@teodosiosantos1134 Não. Banco Relacional gira em torno de Entidades e Relacionamentos. No fim, são tabelas e chaves estrangeiras somente. Outros tipos de bancos, como NoSQL ou Orientado a Documentos podem até ter coisa parecida, mas não vou saber falar pois não conheço profundamente.
No meu caso eu apago a postagem mas na tabela chave estrangeira o endereço do imagem continua no banco.
Na página tudo é excluído.
Mas indo no banco o endereço da imagem ainda está lá.
Bom dia! Não entendi. Se quiser compartilhar os comandos SQL que está usando pra criar as tabelas e manipular os dados, eu posso dar uma olhada pra tentar ajudar. Se tiver código fonte no github tbm posso consultar. Abraço e boa sorte!
@@profwagnermachado a sql é essa
CREATE DATABASE formulario_produtos;
use formulario_produtos;
create table produtos
(
id_produto int AUTO_INCREMENT PRIMARY key,
nome_produto varchar(100),
descricao text
);
create table imagens(
id_imagem int AUTO_INCREMENT PRIMARY key,
nome_imagem varchar(100),
fk_id_produto int,
FOREIGN key(fk_id_produto) REFERENCES produtos(id_produto) ON DELETE CASCADE
);