2012-03-27 3 views
1

외래 키의 참조를 변경하여 필드의 이름을 변경했습니다. 이제 동일한 필드에서 다른 테이블을 가리키는 2 개의 제약이 있습니다. 내 모델이외래 키 마이 그 레이션 Django 남쪽을 사용하여

class Activity(models.Model): 
    ... 
    source = models.ForeignKey(FSObject) 

같았다 및

class Activity(models.Model): 
    ... 
    source = models.ForeignKey(FreezedRef) 

되었다 그리고 내 테스트를 실행할 때 지금은이 메시지를 받고 :

나는 분명히,이 오래된 참조를 삭제하는 방법을
IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`test_tcf_api`.`storage_activity`, CONSTRAINT `source_id_refs_id_fc96b4b044ceb88` FOREIGN KEY (`source_id`) REFERENCES `storage_fsobject` (`id`))') 

, 남쪽은 그것을 건너 뛰었습니다.

답변

-1
  1. 만 좀 할까 데이터베이스 인에 의한이 같은 innane 문제를 야기 MySQL은 같은 나쁜 데이터베이스를 사용하여 정지 (죄송 저항 할 수 없었다,하지만 그건 사실이야) MySQL의 문서에서 직선
  2. ALTER TABLE tbl_name DROP FOREIGN KEY fk_symbol; : http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
+0

왜 MySQL이 좋지 않다고 생각하십니까? – Andrew

+1

실제로 ACID를 준수하지 않는 것은 기본적으로 ACID를 준수하지 않습니다. ForeignKey 제약 조건, 트랜잭션 없음, 1k 이상의 필드를 인덱싱 할 수 없습니다. (어쨌든 이것이 나쁜 디자인이라고 주장 할 수는 있지만 여전히 300ish 유니 코드 문자입니다.), 인덱스 할 수 없습니다. 함수 결과, EXPLAIN ANALYZE의 구현 없음, 스키마 변경 명령 ​​중 트랜잭션 없음, 쿼리는 테이블 당 쿼리 당 하나의 인덱스 만 사용합니다 (즉, 인덱스를 결합하는 대신 다중 열 인덱스를 사용하도록 강요합니다). 나는 약간의 시간을 보냈다면 더 많은 것을 생각할 수 있다고 확신한다. 근본적으로 나는 매주 새로운 것을 발견한다. – John

+1

분명히 나는 ​​이들 중 몇 명 (아무런 fk도없고 거래도 없음)이 innodb로 도울 수 있다는 것을 알지만, 할 수 있었다. MyoAM으로 바꾸어야하는 약간의 성능을 얻으려면 느리고 느슨한 플레이를 원한다면 InnoDB가 기본값이되어야합니다. MySQL IMO에 대해 정말 좋은 점은 이것이 처음으로 널리 채택 된 오픈 소스 DB 였고 웹에 많은 옵션을 제공한다는 것입니다. 비슷한 점이 PHP에 관해서 말할 수 있습니다. 많은 사람들이 PHP가 훌륭하거나 최고의 도구라고 주장하지 않을 것입니다. – John

0

동일한 마이그레이션에서 다른 것을 업데이트 했습니까? 그들은 일 했느냐, 깨었다? 나는 마이 그 레이션을 실행할 때 사우스를 깨뜨리지 않았기 때문에 물어 본다. 문제가 발생하면 예외 처리를하는 것이 일반적이다.

+1

그는 mysql의 특이성을 가장 잘 다루고 있습니다. 나는 하나의 테이블이 myISAM이고 다른 테이블이 InnoDB 인 곳으로 들어가기 전에 이것을 실행했습니다. South/django는 myISAM이 외래 키를 지원하지 않기 때문에 물론 실패한 제약을 만들었습니다. 정확하게 그 길에 끝내는 방법을 명확히하지 않지만, 전에 정확한 문제를 보았습니다. – John

+0

그건 ... 너트예요. – Todd

+0

그러므로 첫 번째 제안은 쓰레기 데이터베이스를 삭제하고 너무 빨지 않는 것으로 이동하는 것입니다. 이것은 mysql을 사용하는 많은 문제 중 하나 일 뿐이다. – John

관련 문제