Relacionamento de tabelas no MYSQL (Chave estrangeira)

23/06/2016

0

Gostaria de saber como adicionar valores em uma tabela que possui uma chave estrangeira:
Ex.: A tabela empresa contem os dados cadastrais da empresa X com uma chave primaria (Id_Empresa) a tabela serviços possui os serviços prestados pela empresa X com a chave primaria (Id_Servico) e uma chave estrangeira (Id_Empresa) relacionando assim as duas tabelas. Porém como montar o Insert ?
Kamila Costa

Kamila Costa

Responder

Post mais votado

23/06/2016

Boa noite Kamila.

A proposito seria uma tabela 1:n ou n:n ?

Exemplo uma empresa possui 1:N serviços e serviços possui 0:N se for mais ou menos assim temos uma cardinalidade n:n eu faria da seguinte forma.


// crio a tabela empresa
CREATE TABLE EMPRESA(
ID_EMPRESA INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
RAZAO_SOCIAL VARCHAR(20) NOT NULL,
PRIMARY KEY(ID_EMPRESA)
)ENGINE=InooDB;

//crio a tabela serviços

CREATE TABLE SERVICOS(
ID_SERVICO INT(5) UNSIGNED NOT NULL AUTO_INCREMENT,
DESCRICAO VARCHAR(2),
PRIMARY KEY(ID_SERVICO)
)ENGINE=InnoDB;

// agora crio a tabela n:n caso seja este o caso

CREATE TABLE SERVICO_EMPRESA(
ID_SERVICO INT(5)UNSIGNED NOT NULL,
ID_EMPRESA INT(5)UNSIGNED NOT NULL
)ENGINE=InnoDB;

// implento as constraint

ALTER TABLE TABELA_SERVICO ADD CONSTRAINT 'NOME DA USA CONSTRAINT' FOREIGN KEY(ID_SERVICO) REFERENCES SERVICOS(ID_SERVICO); 

ALTER TABLE TABELA_SERVICO ADD CONSTRAINT 'NOME DA USA CONSTRAINT' FOREIGN KEY(ID_EMPRESA) REFERENCES EMPRESA(ID_EMPRESA); 

AI FICARIA ASSIM

TABELA EMPRESA: INSERT INTO EMPRESA(ID_EMPRESA,RAZAO_SOCIAL) VALUES( 1,'MERCADAO');
TABELA SERVICOS: INSERT INTO SERVICOS(ID_SERVICO,DESCRICAO) VALUES (1, 'LIMPEZA');
TABELA N:N SERVICO_EMPRESA: INSERT INTO SERVICO_EMPRESA(ID_SERVICO, ID_EMPRESA) VALUES (1,1);

OBS: A TABELA N:N SÓ IRIA ACEITAR OS DADOS ESTRANGEIRO SE OS MESMO EXISTISSEM EM SUA PROPRIA TABELA

Agora se seu grau de relacionamento e de 1:N, exemplo:

1 empresa possui 0:1 serviço e serviço possui 0:n empresa, a chave estrangeira fica na tabela servico ai o insert ficaria assim.

INSERT INTO SERVICO(ID_SERVICO, DESCRICAO, ID_EMPRESA) VALUES (1,'LIMPEZA',1);


Porem só iria funcionar se na tabela empresa existisse uma empresa com o codigo 1

Bruno

Bruno
Responder

Mais Posts

24/06/2016

Kamila Costa

Muito Obrigada :)
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar