개발/테스트 데이터를 조작 할 때 고통이 될 수 있지만 제작 과정에서 많은 번거 로움을 덜어 줬습니다.
데이터 무결성을 유지하는 방법으로 특히 고아 레코드에 대한 보호책으로 생각하십시오. 당신이 Person
많은 PhoneNumber
기록을 관련 데이터베이스를 가지고있는 경우 Person
레코드가 어떤 이유에서 삭제 될 때
예를 들어, 어떤 일이 PhoneNumber
기록은 어떻게됩니까? 그들은 여전히 데이터베이스에 존재하지만 관련된 Person
의 ID는 관련 Person
테이블에 더 이상 존재하지 않으며 고아 레코드가 있습니다.
예, Person
이 제거 될 때마다 PhoneNumber
을 삭제하는 트리거를 작성할 수 있지만 우연히 Person
을 삭제하고 롤백해야하는 경우 지저분해질 수 있습니다.
예, 수동으로 PhoneNumber
개의 레코드를 제거하는 것을 기억할 수도 있지만, 9 개월 동안 다른 개발자 나 방법을 작성하면 어떨까요?
PhoneNumber
이 기존 Person
과 관련이 있음을 보장하는 외래 키를 생성하면이 관계를 파괴하지 않도록하고 의도 한 데이터 구조에 대해 '단서'도 추가 할 수 있습니다.
외래 키 관계는 데이터 계층에서 데이터 무결성을 유지함으로써 시스템에 들어오는 불량 데이터를 줄입니다. 아니 정말. 예를 들어 성별 테이블과 FK 관계가있는 사람 테이블이있는 경우 개발자는 성별이 'whocares'인 사람에게 레코드를 삽입 할 수 있습니다. 자, 당신은 이것에 신경 쓰지 않을 수 있습니다. 그러나 논리가 유효한 항목을 만들고 남성/여성만을 기대한다면, 그러면 ... 당신은 문제가 생길 것입니다. ERD를 얻기 위해 DB를 리버스 엔지니어링하려는 경우에도 문제가 발생할 수 있습니다. 그리고 스 캐 폴딩 및 기타 기술은이 수준의 디자인에서 중계합니다 ... – xQbert
매우 관련이 있습니다 : [왜 외래 키가 실제로 연습보다 이론에 사용됩니까?] (http://stackoverflow.com/questions/1876013/why-are-foreign -keys-more-in-in-practice) –
우리는 일하던 곳에서 비슷한 시나리오를 보였습니다. 하나의 앱에는 외래 키가 없었습니다. 왜냐하면 ORM이 이러한 모든 문제를 처리했기 때문입니다. 중요한 고객은 중요한 데이터 손실을 발견했으며 결국 ORM의 버그로 추적되었습니다. ORM 개발자를 비난하는 것은 도움이되지 않는다. 외국 열쇠는 곧 추가되었습니다! – onedaywhen