Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

feliper

chave estrangeira - FOREIGN KEY

Recommended Posts

Fala pessoal, estou com uma dificuldade em setar uma chave estrangeira, não sei qual a configuração está errada na tabela que é exibido o seguinte erro: Error creating foreign key on controleID (check data types) segue as configurações da tabela e o comando:

 

ALTER TABLE `empresas` ADD FOREIGN KEY ( `controleID` ) REFERENCES `sys`.`usuarios` (

`id`

) ON DELETE CASCADE ON UPDATE CASCADE ;

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `nome` varchar(50) CHARACTER SET latin1 NOT NULL,
  `usuario` varchar(25) CHARACTER SET latin1 NOT NULL,
  `senha` varchar(40) CHARACTER SET latin1 NOT NULL,
  `email` varchar(100) CHARACTER SET latin1 NOT NULL,
  `nivel` int(1) unsigned NOT NULL DEFAULT '1',
  `ativo` tinyint(1) NOT NULL DEFAULT '1',
  `cadastro` datetime NOT NULL,
  `telefone` varchar(13) COLLATE latin1_general_ci DEFAULT NULL,
  `profissao` varchar(50) COLLATE latin1_general_ci NOT NULL,
  `sobre` text COLLATE latin1_general_ci NOT NULL,
  `site` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT 'http://',
  `twitter` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT 'https://twitter.com/',
  `facebook` varchar(50) COLLATE latin1_general_ci NOT NULL DEFAULT 'https://facebook.com/',
  `imagem` varchar(70) COLLATE latin1_general_ci NOT NULL,
  `recupera_senha` varchar(40) COLLATE latin1_general_ci NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `usuario` (`usuario`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `empresas` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `razaoSocial` varchar(70) COLLATE latin1_general_ci NOT NULL,
  `nomeFantasia` varchar(70) COLLATE latin1_general_ci NOT NULL,
  `telefone` varchar(13) COLLATE latin1_general_ci NOT NULL,
  `email` varchar(100) COLLATE latin1_general_ci NOT NULL,
  `cnpj` varchar(18) COLLATE latin1_general_ci NOT NULL,
  `info` text COLLATE latin1_general_ci NOT NULL,
  `estoque` int(1) NOT NULL,
  `controleID` int(15) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `controleID` (`controleID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

desde já agradeço a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipos diferentes:

`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,

 

`controleID` int(15) NOT NULL,

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por andreygsantos
      Pessoal, normalmente faço modelagem de banco de dados usando o CA ErWin, mas precisei utilizar a ferramenta de modelagem do MySQL Workbench 8.0 Community.
      O problema ocorre quando a ferramenta começa a "enfeitar o pavão" quando se trata de FK. Vou mostrar um exemplo básico:

      Temos aqui 3 tabelas representando condomínio, unidades e vagas. As vagas pertencem ao condomínio, assim como as unidades. As vagas podem pertencer a unidades diferentes no decorrer do tempo porque não são vagas fixas, portanto não posso pendurar vaga na unidade.
      Problema 1: FK recebe o nome da tabela origem automaticamente.
      Até aqui posso renomear o atributo ou alterar as configurações de modelagem.
       

      Atributos renomeados, temos o seguinte modelo representado acima. Agora vamos levar a PK da entidade UNIDADE para ser FK não identificação na entidade VAGA.
       

      E agora temos o Problema 2: a ferramenta não entende que o atributo CondomínioID já existe e cria novamente com o prefixo da entidade origem. Parece um problema besta e fácil de resolver apagando o atributo duplicado e mantendo apenas UnidadeID, mas ao sincronizar com o banco de dados, começam a surgir erros com índices.
      Abaixo mostro como fica a modelagem no ERWin sem qualquer interferência:
       

      Como podem ver, a modelagem fica perfeita. O ErWin entende que o atributo já existe na entidade e leva apenas o atributo que vai diferenciar para fazer o relacionamento.
       
      Vocês devem estar se perguntando por que eu não uso o ErWin então... Mas a versão do ErWin que tenho não suporta MySQL após a versão 5.x e uma licença nova dessa ferramenta vai me custar 1 rim, senão os 2... Teoricamente, o Workbench deveria fazer essa modelagem sem problemas, mas eu não conheço bem e talvez possa ser alguma configuração. Alguém teria uma luz?
      Obrigado.
       
    • Por phfmiranda
      Bom dia,
       
      Tenho um BD com 3 tabelas
       
      tb_cliente - Chave primaria id_cliente
      tb_dados - chave estrangeira id_cliente
      tb_crediario - chave estrangeira id_cliente
       
      O que acontece é que como já temos dados nas mesmas não estou conseguindo criar a chave estrangeira abaixo, tem alguma ideia de como criar a mesma sem alterar os dados??
       
      ALTER TABLE `tb_dados` ADD FOREIGN KEY (`id_cliente`) REFERENCES `tb_cliente`(`id_cliente`) ON DELETE CASCADE  
      Obrigado.
    • Por Hamilcar
      Bom dia a todos!
      Estou tentando fazer uma base de dados onde tenho 3 tabelas, usuario, requerimento e escala. Onde um usuario faz um requerimento e deste requerimento geraria uma escala.
      Gostaria de preparar a base de dados para que quando cadastrar um requerimento, esse requerimento só seja incluído se houver um usuario ligado a este requerimento, e quando cadastrar uma escala, esta seja ligada ao requerimento que a gerou, e quando for editar ou excluir, não exclua um requerimento sem excluir a escala.
      Tentei aqui um modelo com chave estrangeira, mas quando incluo um requerimento que não esteja vinculado a um usuario, dá um "warning" e inclue assim mesmo, e para excluir também faz da mesma forma. abaixo as tabelas.
       
      CREATE TABLE `usuario` (
        `nome_usuario` varchar(100) DEFAULT NULL,
        `id_usuario` int(11) NOT NULL,
        `telefone_usuario` varchar(20) DEFAULT NULL,
        `data_cadastro_usuario` datetime DEFAULT NULL,
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
       
      CREATE TABLE `requerimento` (
        `id_requerimento` int(11) NOT NULL,
        `data_requerimento` datetime NOT NULL,
        `status_requerimento` enum('0','1') NOT NULL DEFAULT '0',
        `id_usuario` int(11) NOT NULL
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
       
      CREATE TABLE `escala` (
        `id_escala` int(11) NOT NULL,
        `local_escala` varchar(100) NOT NULL,
        `horário_escala` varchar(100) NOT NULL,
        `data_escala` date NOT NULL,
        `id_requerimento` int(11) NOT NULL
      ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4;
       
      --
      -- Índices para tabela `escala`
      --
      ALTER TABLE `escala`
        ADD PRIMARY KEY (`id_escala`),
        ADD KEY `fk_requerimento_escala` (`id_requerimento`);
      --
      -- Índices para tabela `requerimento`
      --
      ALTER TABLE `requerimento`
        ADD PRIMARY KEY (`id_requerimento`),
        ADD KEY `fk_usuario_requerimento` (`id_usuario`);
      --
      -- Índices para tabela `usuarios`
      --
      ALTER TABLE `usuario`
        ADD PRIMARY KEY (`id_usuario`);
      COMMIT;
    • Por tupinikin
      Bom dia senhores.
      Estou dando manutenção em uma banco de dados que não estava normalizado, sem chaves estrangeiras etc etc
      depois de cria-las, quando vou importar os dados, acontecem vários erros, pq tem chaves primárias que foram excluidas
      e no caso da estrangeira, fica ausente.
      No phpmyadmin tem a opção de não checar as chaves, mas não gostaria de manter dados que não existem.
       
      Qual a forma mais fácil de eu encontrar os registros que estão referenciados á um chave primária que não existe?
       
      grato
    • Por Marcosvn
      Bom dia turma !
       
      já procurei na internet e até encontrei muito artigo relacionado, mas ainda estou com muito dificuldade para exibir os dados da tabela principal (usuario) com a tabela (empresas - estrangeira)
       
      o usuário do site, ao se cadastrar, vai inserir seus dados e a empresa em que trabalha. Em seguida, a página referente aquela empresa (ex: atento.php) deve exibir todos os usuários daquela empresa entenderam ?
       
       -  o nome do Banco de Dados "TrocaEmpresas"
      a tabela é essa: 

       
      supondo que na tabela empresas esteja assim: 
      id: 1
      Nome: Atento
       
      Considerando que preciso exibir apenas o "nome ", "sobrenome" , "email" e "Empresa", como faço para exibir todos os usuários cadastrados nessa empresa na página atento.php ?
       
      encontrei muita coisa sobre INNER JOIN, mas não consigo de jeito nenhum fazer funcionar, eu não estou entendendo muito bem o funcionamento, agradeço a disposição dos que me ajudarem a esclarecer essa dificuldade.
       
      um abraço, vlw
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.