문제

내 작업을위한 간단한 문서 관리 시스템을 작성하고 있습니다. 나는 애호가 일뿐 아니라 한동안 프로그래밍 해 왔습니다. 내 문제는 이것입니다. 앱을 통해 여러 문서를 삭제하면 관련 데이터베이스 레코드를 제거해야합니다. 데이터베이스 레코드가없는 파일이나 예외가 발생한 경우 존재하지 않는 파일을 가리키는 레코드로 끝나지 않고이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

도움이 되었습니까?

해결책

파일을 데이터베이스에 저장하십시오. 그런 다음 응용 프로그램에 복잡성 (MSMQ 등)을 추가하지 않고 참조 무결성을 가질 수 있습니다. 예, 이것은 DB의 크기를 증가시킵니다. 그러나 파일은 이미 서버에 있으므로 다른 장소에서 같은 비트입니다.

다른 팁

이것은 일종의 "분산 거래"시스템입니다. 당신은 아마도 통합 루틴을 작성하고 가끔씩 실행하고 싶을 것입니다. ~ 할 것이다 어느 시점에서 불일치가 있습니다.

당신은 "내 앱을 통해"라고 말했습니다. 이것은 응용 프로그램 인터페이스를 통해서만 파일을 제거 할 수 있다는 것을 의미합니까? 그렇다면 파일을 제거하고 DB 레코드를 제거하기 위해 삭제를 사용자 정의 트랜잭션으로 마무리하십시오. 한쪽이 실패하면 다른 쪽을 롤백하십시오.

파일 디렉토리에서 파일을 제거한 다음 DB 레코드를 자동으로 제거하려면 정기적 인 정리 및/또는 디렉토리에서 활동을 모니터링하는 파일 디렉토리 Watcher Windows 서비스를 포함하여 많은 작업을 수행 할 수 있습니다. 그런 다음 청소를 시작합니다.

귀하의 답변에 감사드립니다. 나는 이미 Blob Route에 갈 생각을하고 있었지만 내 상사가 그것을 갈 것인지 확신하지 못했습니다. 그는 좋은 디렉토리 구조를 좋아합니다. 분산 거래에 관해서는, 나는 그들에 대해 아무것도 몰랐지만 그것에 접근하는 가장 전문적인 방법처럼 보입니다. 그러나 나는 애호가이고 모든 것이 너무 관여 해 보이기 때문에 나는 Blob Front에서 내 상사를 이길 것입니다. 건배.

데이터베이스 및 MSMQ (MS Messaging Deue)를 포함하는 분산 트랜잭션을 사용해야합니다. 데이터베이스가 DTC (Microsoft Distributed Transaction Coordinator)와의 분산 거래에 등록 할 수 있는지 확인하십시오.

MSMQ로 모든 파일 작업을 프로그래밍하십시오.

이것 링크 도움이 될 수 있습니다

일부 앱에서 비슷한 기능이 있습니다.

내가하는 일은 AP를 통해 먼저 파일을 삭제 한 다음 파일에 대한 링크/포인터가있는 데이터베이스 레코드를 삭제하는 것입니다. 사용자가 문서를 요청하면 (이는 파일에 대한 링크가 데이터베이스에 여전히 존재 함을 의미 함), 앱이 파일을 먼저 확인하고 어떤 이유로 든 예상되는 경우에도 데이터베이스 레코드를 정리합니다. 그 시점에서 "오류"를 우아하게 사용자에게 알립니다.

"고아"문서는 어쨌든 많이 발생하지 않지만이 방법을 사용하면 데이터베이스가 앱 실행의 일반적인 부분으로 지속적으로 정리됩니다.

이것을 처리하는 다른 방법이 많이 있지만, 이것은 저에게 효과적입니다.

데이터베이스 레코드를 먼저 삭제하고 가끔 감사 리포지토리를 감사합니다. 리포지토리를 감사한다는 것은 데이터베이스 레코드가없는 파일을 찾습니다. 먼저 DB 레코드를 삭제하면 코드가 실제로없는 문서를 찾지 않습니다.

몇 개의 문서와 어떤 유형의 문서를 저장하고 있습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top