2012-03-27 5 views
2

관계형 데이터베이스에서 참조 무결성을 유지하면서 객체 그래프에서 객체를 제거하는 가장 좋은 방법은 무엇입니까? 어느 시점에서 이러한 일이 발생해야합니다. 소프트 또는 하드 삭제 중 하나를 선택하십시오.무결성을 유지하면서 객체 그래프에서 객체 제거

예를 들어, 제품을 제거 할 때 해당 제품이 포함 된 주문이 여전히 관련성이 있는지 또는 해당 제품이 포함 된 주문을 포함하는 인보이스가 여전히 관련이 있는지 확인하는 최선의 방법은 무엇입니까? 당신은 (때문에 그것을 참조하는 송장의 귀하의 경우처럼) 제품을 필요

해결 방법 1

:

+0

이 질문은 중요하며 일부 문제는 신뢰할만한 출처로 인정됩니다. –

답변

2

는 기본적으로 3 "표준 용액"이 있습니다. 즉, 데이터가 유효 함을 의미하며 유일한 변경 사항은 "재고 없음"또는 "포트폴리오 부족"이라는 것입니다. 어떤 경우 든 비즈니스 프로세스에서 RMA 상황 또는 일부 IRS 관련 문제를 처리해야하는 경우가 종종 있습니다. 즉, 제품을 삭제하면 안됩니다. 이것은 DB 데이터 모델 등에서 반영해야하는 제품의 다른 "상태"일뿐입니다.

성능에 관심이있는 경우 몇 가지 프로파일 링이 필요합니다. 최적화 옵션이 다양 할 경우 필요합니다. .. 다음은 일반적으로 RDBMS에 의존 한 방법 인 "파티션"입니다 - 모든 RDBMS는

이 솔루션은 2

당신의 데이터가 필요없는 등 유연성에 차이가 자신의 역학을 가지고 모두 ... 단지 계단식 삭제를 수행하고 그걸로 처리하십시오 ...

솔루션 3

이전 데이터 만 필요하지만 '향후 비즈니스 프로세스'에는이 엔티티 (예 : 제품) 다시 ...이 경우 일반적인 해결책은 "활성/생산적인 테이블"에서 종속 삭제를 수행하기 전에 채워지는 보관 테이블을 갖는 것입니다. 이 스키마의 약간의 변형은 필요한 정보를 '종속 행'(사례의 인보이스)에 복사하고 활성/생산 행 (즉, 귀하의 경우에는 제품)을 삭제하는 것입니다.

결론

복잡한 시스템의 서로 다른 비즈니스 프로세스/사용 사례의 많은 거래 따라서 위의 기술을 모두 사용하는 경향이있다 - 각 관련된 특정 비즈니스 프로세스/사용 사례에 depeding 그 자리가 있습니다. ..

0

다음은 이름이 지정되지 않은 출처에서받은 답변입니다. 나는이 말을 할 것이고, 그는 꽤 존경 받고 존경받을 만하다. 그의 이름을 올리지 않을 것이다.

저는 여기에 제 대답을 수락하지 않거나 현상금을 우회하지 않지만 그의 대답을 보여주고 있습니다.

"완전한 기능을 갖춘 RDBMS를 사용하면"deleted_or_not "열에서 테이블을 분할 할 수 있으며 이로 인해 모든 실제 프로덕션 행이 압축되어 저장됩니다. 사용되지 않는 데이터가 표시되지 않도록하려면 보고서에는 customers_including_deleted_rows와 같이 모호한 이름을 전체 테이블에 제공하고 대부분의 응용 프로그램 코드가 쿼리하는 뷰 "고객"(실제 행만 포함)을 작성하면됩니다. 주변의 오래된 데이터."