Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
fjuniorwin

(Resolvido) Dúvida sobre relacionamentos

Question

Olá amigos,

Estou com a seguinte dúvida:

Eu tenho uma tabela que preciso relacionar 2 campos entre si, no caso eles estão na mesma tabela.

Como faço?

Share this post


Link to post
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Oi, fjuniorwin!

O que você está querendo parece ser um auto relacionamento.

Mas preciso que você descreva melhor o que você quer.

Use uma estrutura fictícia como exemplo.

Share this post


Link to post
Share on other sites
  • 0
Oi, fjuniorwin!

O que você está querendo parece ser um auto relacionamento.

Mas preciso que você descreva melhor o que você quer.

Use uma estrutura fictícia como exemplo.

Sim amigo,

É um auto relacionamento, você por favor, poderia colocar aqui algum exemplo? qualquer um server, com base nele irei montar meu bd. Desde já agradeço a sua atenção.

Share this post


Link to post
Share on other sites
  • 0
Oi, fjuniorwin!

O que você está querendo parece ser um auto relacionamento.

Mas preciso que você descreva melhor o que você quer.

Use uma estrutura fictícia como exemplo.

Sim amigo,

É um auto relacionamento, você por favor, poderia colocar aqui algum exemplo? qualquer um server, com base nele irei montar meu bd. Desde já agradeço a sua atenção.

Share this post


Link to post
Share on other sites
  • 0
Sim amigo,

É um auto relacionamento, você por favor, poderia colocar aqui algum exemplo? qualquer um server, com base nele irei montar meu bd. Desde já agradeço a sua atenção.

Oi, fjuniorwin!

Imagine um cadastro de funcionários em uma empresa. Estes funcionários pertencem a um departamento e estes funcionários possuem um gerente. Um gerente também é um funcionário.

CREATE TABLE departamento (
   ID_Departamento UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
   NM_Departamento VARCHAR(40) NOT NULL,
   PRIMARY (ID_Departamento)
)ENGINE = InnoDB;
O campo ID_Departamento abaixo fará relacionamento com a tabela “departamentos” acima. Esta restrição não permite exclusão ou alteração em cascata, porque posso excluir um departamento sem excluir os funcionários. Mas me obriga a transferir os funcionários para outro departamento antes de excluir o departamento que eu quero. O campo ID_Gerente é um campo ALIAS (*1) (conterá as mesmas características e informações do campo ID_Funcionarios) do campo ID_Funcionarios e guardará o identificador do funcionário que um funcionário de um departamento está subordinado. O campo CPF é único para que não possa haver dois registros com o mesmo número de CPF, criei um índice único por este campo.
CREATE TABLE funcionarios (
   ID_Funcionario UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
   NM_Funcionario VARCHAR(60) NOT NULL,
   CPF CHAR(11) NOT NULL,
   ID_Departamento UNSIGNED INTEGER NOT NULL DEFAULT 0,
   ID_Gerente UNSIGNED INTEGER NOT NULL DEFAULT 0,
   PRIMARY (ID_Funcionario)
)ENGINE = InnoDB;

CREATE UNIQUE INDEX UK_Funcionartio_IX001 ON funcionarios (CPF);
CREATE INDEX AK_Funcionario_IX002 funcionarios(ID_Gerente);

ALTER TABLE funcionarios
   ADD CONSTRAINT FK_Funcionario_IX003 FOREIGN KEY (ID_Departamento) REFERENCES departamento ON DELETE NO ACTION, ON UPDATE NO ACTION;
Assim, para cadastrar um funcionário, primeiro necessito cadastrar o(s) departamento(s).
INSERT INTO departamentos (ID_Departamento, NM_Departamento)
   VALUES (1, “CONTABILIDADE”);
INSERT INTO funcionarios (ID_Funcionario, NM_Funcionario, CPF, ID_Departamento, ID_Gerente)
   VALUES (1, “JOSE”, “11111111122”, 1, 1);
INSERT INTO funcionarios (ID_Funcionario, NM_Funcionario, CPF, ID_Departamento, ID_Gerente)
   VALUES (2, “JOAO”, “22222222211”, 1, 1);

De acordo com o exemplo acima, o ID do gerente é o mesmo que o ID do funcionário para o funcionário”JOSE”. O que significa, por este modelo que ele é o gerente do departamento “CONTABILIDADE”

O funcionário “JOAO” também pertence ao departamento “CONTABILIDADE” e possui, como gerente, o funcionário “JOSE”.

Share this post


Link to post
Share on other sites
  • 0
Sim amigo,

É um auto relacionamento, você por favor, poderia colocar aqui algum exemplo? qualquer um server, com base nele irei montar meu bd. Desde já agradeço a sua atenção.

Oi, fjuniorwin!

Imagine um cadastro de funcionários em uma empresa. Estes funcionários pertencem a um departamento e estes funcionários possuem um gerente. Um gerente também é um funcionário.

CREATE TABLE departamento (
   ID_Departamento UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
   NM_Departamento VARCHAR(40) NOT NULL,
   PRIMARY (ID_Departamento)
)ENGINE = InnoDB;
O campo ID_Departamento abaixo fará relacionamento com a tabela “departamentos” acima. Esta restrição não permite exclusão ou alteração em cascata, porque posso excluir um departamento sem excluir os funcionários. Mas me obriga a transferir os funcionários para outro departamento antes de excluir o departamento que eu quero. O campo ID_Gerente é um campo ALIAS (*1) (conterá as mesmas características e informações do campo ID_Funcionarios) do campo ID_Funcionarios e guardará o identificador do funcionário que um funcionário de um departamento está subordinado. O campo CPF é único para que não possa haver dois registros com o mesmo número de CPF, criei um índice único por este campo.
CREATE TABLE funcionarios (
   ID_Funcionario UNSIGNED INTEGER NOT NULL AUTO_INCREMENT,
   NM_Funcionario VARCHAR(60) NOT NULL,
   CPF CHAR(11) NOT NULL,
   ID_Departamento UNSIGNED INTEGER NOT NULL DEFAULT 0,
   ID_Gerente UNSIGNED INTEGER NOT NULL DEFAULT 0,
   PRIMARY (ID_Funcionario)
)ENGINE = InnoDB;

CREATE UNIQUE INDEX UK_Funcionartio_IX001 ON funcionarios (CPF);
CREATE INDEX AK_Funcionario_IX002 funcionarios(ID_Gerente);

ALTER TABLE funcionarios
   ADD CONSTRAINT FK_Funcionario_IX003 FOREIGN KEY (ID_Departamento) REFERENCES departamento ON DELETE NO ACTION, ON UPDATE NO ACTION;
Assim, para cadastrar um funcionário, primeiro necessito cadastrar o(s) departamento(s).
INSERT INTO departamentos (ID_Departamento, NM_Departamento)
   VALUES (1, “CONTABILIDADE”);
INSERT INTO funcionarios (ID_Funcionario, NM_Funcionario, CPF, ID_Departamento, ID_Gerente)
   VALUES (1, “JOSE”, “11111111122”, 1, 1);
INSERT INTO funcionarios (ID_Funcionario, NM_Funcionario, CPF, ID_Departamento, ID_Gerente)
   VALUES (2, “JOAO”, “22222222211”, 1, 1);

De acordo com o exemplo acima, o ID do gerente é o mesmo que o ID do funcionário para o funcionário”JOSE”. O que significa, por este modelo que ele é o gerente do departamento “CONTABILIDADE”

O funcionário “JOAO” também pertence ao departamento “CONTABILIDADE” e possui, como gerente, o funcionário “JOSE”.

Muito obrigado pela sua atenção, você me ajudou muito!

Valeu mesmo!!!

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
Sign in to follow this  

Cloud Computing


  • Forum Statistics

    • Total Topics
      148585
    • Total Posts
      644290
×
×
  • Create New...