none
Consulta /inserir RRS feed

  • Pergunta

  • Tenho uma tabela com cinco campos Funcionario (Codigo,Nome, email, codigoChefe) quando inserir um funcionario devo determinar o chefe de um novo funcionário

    quinta-feira, 22 de dezembro de 2016 20:37

Respostas

  • Não sei se entendi direito mas , isso vai depender da sua regra de negócio.

    pense no caso se:

    um funcionário tem apenas um chefe , temos um relacionamento 1 para 1

    então basta vc ter uma chave na tabela funcionário que corresponda ão chefe , 

    exemplo relacionamento 1 para 1 :

    CREATE TABLE Funcionario
        (
          Codigo INT NOT NULL
                     PRIMARY KEY
                     IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          codigoChefe INT FOREIGN KEY REFERENCES Chefe(Codigo) 
        );
    
    CREATE TABLE Chefe
        (
          Codigo INT NOT NULL PRIMARY KEY IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          Setor VARCHAR(MAX)
        );

    Nesse exemplo acima vc consegue fazer a inserção na tabela funcionário o Id Correspondente do Chefe

    seque o Exemplo :

    INSERT INTO dbo.Chefe ( Nome, email, Setor ) VALUES ( 'Esposa', -- Nome - varchar(max) 'esposa@esposa', -- email - varchar(max) 'Todos' -- Setor - varchar(max) ) INSERT INTO dbo.Funcionario ( Nome, email, codigoChefe ) VALUES ( 'Wesley Neves', -- Nome - varchar(max) 'wesley.si.neves@gmail.com', -- email - varchar(max) 1 -- codigoChefe - int )

    Agora Caso a regra do seu negocio for que um funcionário pode ter 1 ou mais chefes

    temos um relacionamento 1 para N (logo precisamos fazer uma tabela associativa

    segue o exemplo

    CREATE TABLE Chefe
        (
          Codigo INT NOT NULL PRIMARY KEY IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          Setor VARCHAR(MAX)
        );
    
    CREATE TABLE Funcionario
        (
          Codigo INT NOT NULL
                     PRIMARY KEY
                     IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
         
        );
    
    
    CREATE TABLE ChefesFuncionarios
    (
       IdChefeFuncionario UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
       IdChefe INT FOREIGN KEY REFERENCES dbo.Chefe(Codigo),
       IdFuncionario INT FOREIGN KEY REFERENCES dbo.Funcionario(Codigo)
    )
    
    
    INSERT INTO dbo.Chefe
            ( Nome, email, Setor )
    VALUES  ( 'Gerente de Infra', -- Nome - varchar(max)
              'gerenciaTi@gerenciaTi', -- email - varchar(max)
              'Infra'  -- Setor - varchar(max)
              )
    
    
    INSERT INTO dbo.Chefe
            ( Nome, email, Setor )
    VALUES  ( 'Gerente de Desenvolvimento', -- Nome - varchar(max)
              'gerenciaTi@gerenciaDesenvolvimento', -- email - varchar(max)
              'Desenvolvimento'  -- Setor - varchar(max)
              )
    		  
    
    /*Realiza o primeiro insert de funcionario*/
    
    INSERT INTO dbo.Funcionario
            ( Nome, email )
    VALUES  ( 'Wesley Neves', -- Nome - varchar(max)
              'wesley.si.neves@gmail.com'-- email - varchar(max)
            
              )
    
    /*Realiza a associação para o chefe 1*/
    INSERT INTO dbo.ChefesFuncionarios
            ( IdChefeFuncionario ,
              IdChefe ,
              IdFuncionario
            )
    VALUES  ( NEWID() , -- IdChefeFuncionario - uniqueidentifier
              1 , -- IdChefe - int
              1  -- IdFuncionario - int
            )
    
    
    
    /*Realiza a associação para o chefe 2*/
    INSERT INTO dbo.ChefesFuncionarios
            ( IdChefeFuncionario ,
              IdChefe ,
              IdFuncionario
            )
    VALUES  ( NEWID() , -- IdChefeFuncionario - uniqueidentifier
              2 , -- IdChefe - int
              1  -- IdFuncionario - int
            )
    

    para juntas as tabelas basta fazer um Join

    SELECT * FROM dbo.Funcionario AS F
    JOIN dbo.ChefesFuncionarios AS CF ON CF.IdFuncionario = F.Codigo
    JOIN dbo.Chefe AS C ON C.Codigo = CF.IdChefe


    Wesley Neves


    sexta-feira, 23 de dezembro de 2016 01:15

Todas as Respostas

  • Não sei se entendi direito mas , isso vai depender da sua regra de negócio.

    pense no caso se:

    um funcionário tem apenas um chefe , temos um relacionamento 1 para 1

    então basta vc ter uma chave na tabela funcionário que corresponda ão chefe , 

    exemplo relacionamento 1 para 1 :

    CREATE TABLE Funcionario
        (
          Codigo INT NOT NULL
                     PRIMARY KEY
                     IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          codigoChefe INT FOREIGN KEY REFERENCES Chefe(Codigo) 
        );
    
    CREATE TABLE Chefe
        (
          Codigo INT NOT NULL PRIMARY KEY IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          Setor VARCHAR(MAX)
        );

    Nesse exemplo acima vc consegue fazer a inserção na tabela funcionário o Id Correspondente do Chefe

    seque o Exemplo :

    INSERT INTO dbo.Chefe ( Nome, email, Setor ) VALUES ( 'Esposa', -- Nome - varchar(max) 'esposa@esposa', -- email - varchar(max) 'Todos' -- Setor - varchar(max) ) INSERT INTO dbo.Funcionario ( Nome, email, codigoChefe ) VALUES ( 'Wesley Neves', -- Nome - varchar(max) 'wesley.si.neves@gmail.com', -- email - varchar(max) 1 -- codigoChefe - int )

    Agora Caso a regra do seu negocio for que um funcionário pode ter 1 ou mais chefes

    temos um relacionamento 1 para N (logo precisamos fazer uma tabela associativa

    segue o exemplo

    CREATE TABLE Chefe
        (
          Codigo INT NOT NULL PRIMARY KEY IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
          Setor VARCHAR(MAX)
        );
    
    CREATE TABLE Funcionario
        (
          Codigo INT NOT NULL
                     PRIMARY KEY
                     IDENTITY(1, 1) ,
          Nome VARCHAR(MAX) NOT NULL ,
          email VARCHAR(MAX) ,
         
        );
    
    
    CREATE TABLE ChefesFuncionarios
    (
       IdChefeFuncionario UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
       IdChefe INT FOREIGN KEY REFERENCES dbo.Chefe(Codigo),
       IdFuncionario INT FOREIGN KEY REFERENCES dbo.Funcionario(Codigo)
    )
    
    
    INSERT INTO dbo.Chefe
            ( Nome, email, Setor )
    VALUES  ( 'Gerente de Infra', -- Nome - varchar(max)
              'gerenciaTi@gerenciaTi', -- email - varchar(max)
              'Infra'  -- Setor - varchar(max)
              )
    
    
    INSERT INTO dbo.Chefe
            ( Nome, email, Setor )
    VALUES  ( 'Gerente de Desenvolvimento', -- Nome - varchar(max)
              'gerenciaTi@gerenciaDesenvolvimento', -- email - varchar(max)
              'Desenvolvimento'  -- Setor - varchar(max)
              )
    		  
    
    /*Realiza o primeiro insert de funcionario*/
    
    INSERT INTO dbo.Funcionario
            ( Nome, email )
    VALUES  ( 'Wesley Neves', -- Nome - varchar(max)
              'wesley.si.neves@gmail.com'-- email - varchar(max)
            
              )
    
    /*Realiza a associação para o chefe 1*/
    INSERT INTO dbo.ChefesFuncionarios
            ( IdChefeFuncionario ,
              IdChefe ,
              IdFuncionario
            )
    VALUES  ( NEWID() , -- IdChefeFuncionario - uniqueidentifier
              1 , -- IdChefe - int
              1  -- IdFuncionario - int
            )
    
    
    
    /*Realiza a associação para o chefe 2*/
    INSERT INTO dbo.ChefesFuncionarios
            ( IdChefeFuncionario ,
              IdChefe ,
              IdFuncionario
            )
    VALUES  ( NEWID() , -- IdChefeFuncionario - uniqueidentifier
              2 , -- IdChefe - int
              1  -- IdFuncionario - int
            )
    

    para juntas as tabelas basta fazer um Join

    SELECT * FROM dbo.Funcionario AS F
    JOIN dbo.ChefesFuncionarios AS CF ON CF.IdFuncionario = F.Codigo
    JOIN dbo.Chefe AS C ON C.Codigo = CF.IdChefe


    Wesley Neves


    sexta-feira, 23 de dezembro de 2016 01:15
  • Deleted
    sexta-feira, 23 de dezembro de 2016 09:40