Fórum Data como PK #398396
29/03/2011
0
Marcelo Itapirema.
Curtir tópico
+ 0Posts
31/03/2011
Anthony Accioly
Deveria aceitar sim. Apesar de, como todo lobo velho de web, eu preferir ter um ID numérico com AUTO_INCREMENT e um índice no campo DATETIME. Tem uma série de complicações em usar campos temporais como primary key, entre eles, fuso-horário, precisão, etc. (De uma olhada nesse artigo http://billauer.co.il/blog/2009/03/mysql-datetime-epoch-unix-time/).
Cola o código SQL aí para que eu possa dar uma olhada.ps: Você está usando a engine InnoDB? Está tendo problemas em criar a primary key ou a foreign key?
Gostei + 0
31/03/2011
Marcelo Itapirema.
Estou usando InnoDB. Criei as tabelas pelo Query Browser mesmo para fins didáticos, segue a query.
ALTER TABLE `gerente`.`tbl_item_emprestimo` ADD CONSTRAINT `FK_tbl_item_emprestimo_1` FOREIGN KEY `FK_tbl_item_emprestimo_1` (`DT_emprestimo`)
REFERENCES `tbl_emprestimo` (`DT_emprestimo`)
ON DELETE CASCADE
ON UPDATE CASCADE
Retorna esse erro: MySQL Error Number 1005
A estrutura é essa:
Emprestimo (CODEMP_cliente, CODEMP_Acevo, DT_Emprestimo, DT_Devolucao)
Item_Emprestimo (CODEMP_Acervo, DT_Emprestimo)
O artigo que eu sigo esta nesse endereço:
https://www.devmedia.com.br/articles/post-7146-Artigo-SQL-Magazine-6-Projeto-de-Banco-Dados-parte-V--Modelo-Fisico.html
Grato pela ajuda!
Gostei + 0
07/04/2011
Anthony Accioly
Desculpe pela demora.
Acho que o problema está na sintaxe de criação da foreign key (você está repetindo o nome duas vezes).
O `gerente` é seu schema?
Tenta o seguinte:
ALTER TABLE `gerente`.`tbl_item_emprestimo` ADD CONSTRAINT `FK_tbl_item_emprestimo_1` FOREIGN KEY (`DT_emprestimo`) REFERENCES `gerente`.`tbl_emprestimo` (`DT_emprestimo`) ON DELETE CASCADE ON UPDATE CASCADE;
Se não der certo tenta sem a declaração do schema `gerente`, se também não der certo cola para mim o SQL das tabelas.
Abraços,
Gostei + 0
23/04/2011
Marcelo Itapirema.
Agora eu que pesso desculpa pela demora.
Testei como você sugeriu, mas retornou o seguinte erro:
Can't create table '.\gerente\#sql-65c_10.frm' (errno: 150) Erro 1005
Talvez seja a forma como criei o banco. Percebi que usando a data como FK não funcionaria e reformulei o modelo.
Mas mesmo assim agradeço imensamente pela ajuda!
Abraço!
Gostei + 0
24/04/2011
Anthony Accioly
Abraços,
Gostei + 0
26/04/2011
Carlos Mazzi
Gostei + 0
26/04/2011
Marcelo Itapirema.
Tentei remover o nome do schema como o sugerido mas continua o erro.
o nome do schema é kanririn que significa gerente, é um sistema para controle de coleção de HQs e Livros. Tentei facilitar usando a tradução, mas nos teste garanto que tive o cuidado de usar o nome original.
Como consigo obter a ddl das tabelas? não conheço o mysqldumps.
Peço perdão pelo amadorismo, mas estou estudando BD e criei esse schema adaptando um artigo com uma ideia própia para aprender na prática os conceitos.
Grato pela atenção e ajuda!
Gostei + 0
27/04/2011
Anthony Accioly
Dá uma olhada aqui: http://dev.mysql.com/doc/refman/4.1/pt/mysqldump.html
Basicamente:
mysqldump nome_do_banco > schema.sql
Abraços,
Gostei + 0
08/05/2011
Marcelo Itapirema.
Consegui usar mysqldump, obrigado pelas dicas!
Segue o script que ele criou:
-- MySQL dump 10.10 -- -- Host: localhost Database: kanririn -- ------------------------------------------------------ -- Server version 5.0.15-nt /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Dumping data for table `tbl_item_emprestimo` -- /*!40000 ALTER TABLE `tbl_item_emprestimo` DISABLE KEYS */; LOCK TABLES `tbl_item_emprestimo` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `tbl_item_emprestimo` ENABLE KEYS */; -- -- Dumping data for table `tbl_emprestimo` -- /*!40000 ALTER TABLE `tbl_emprestimo` DISABLE KEYS */; LOCK TABLES `tbl_emprestimo` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `tbl_emprestimo` ENABLE KEYS */; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
Grato pela atenção!
Gostei + 0
09/05/2011
Anthony Accioly
Só que faltou as tabelas :D.
Acho que você passou alguma opção para o mysqldump: Veja a sintaxe aqui:
http://dev.mysql.com/doc/refman/5.5/en/mysqldump.html
Abraços,
Gostei + 0
01/06/2011
Marcelo Itapirema.
Desculpa a trapalhada...seguem as tabelas de fato, para não ocupar muito a tela e seu tempo, postei apenas as tabelas que fazem parte do problema, mas caso precise eu posto as outras também e sem demora.
-- MySQL dump 10.10 -- -- Host: localhost Database: kanririn -- ------------------------------------------------------ -- Server version 5.0.15-nt /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `tbl_emprestimo` -- DROP TABLE IF EXISTS `tbl_emprestimo`; CREATE TABLE `tbl_emprestimo` ( `COD_amigo` int(11) NOT NULL default '0', `DT_emprestimo` date NOT NULL, `DT_devolucao` date default NULL, PRIMARY KEY USING BTREE (`COD_amigo`,`DT_emprestimo`), CONSTRAINT `tbl_emprestimo_ibfk_1` FOREIGN KEY (`COD_amigo`) REFERENCES `tbl_amigo` (`COD_amigo`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `tbl_emprestimo` -- /*!40000 ALTER TABLE `tbl_emprestimo` DISABLE KEYS */; LOCK TABLES `tbl_emprestimo` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `tbl_emprestimo` ENABLE KEYS */; -- -- Table structure for table `tbl_item_emprestimo` -- DROP TABLE IF EXISTS `tbl_item_emprestimo`; CREATE TABLE `tbl_item_emprestimo` ( `CODEMP_amigo` int(11) NOT NULL default '0', `COD_acervo` int(11) NOT NULL, `DT_emprestimo` datetime NOT NULL, PRIMARY KEY USING BTREE (`CODEMP_amigo`,`COD_acervo`,`DT_emprestimo`), KEY `FK_tbl_item_emprestimo_2` (`COD_acervo`), CONSTRAINT `FK_tbl_item_emprestimo_1` FOREIGN KEY (`CODEMP_amigo`) REFERENCES `tbl_emprestimo` (`COD_amigo`) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT `FK_tbl_item_emprestimo_2` FOREIGN KEY (`COD_acervo`) REFERENCES `tbl_acervo` (`COD_acervo`) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1; -- -- Dumping data for table `tbl_item_emprestimo` -- /*!40000 ALTER TABLE `tbl_item_emprestimo` DISABLE KEYS */; LOCK TABLES `tbl_item_emprestimo` WRITE; UNLOCK TABLES; /*!40000 ALTER TABLE `tbl_item_emprestimo` ENABLE KEYS */;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)