2014-04-11 4 views
0

테이블 A가 테이블 B를 참조하고 테이블 B가 테이블 C 열을 참조하는 시나리오가 있습니다.TSQL에서 전문가의 제안이 필요합니다.

프로젝트에서 업데이트 작업을 구현하려면 2 단계 로직 에서 구현해야합니다. 즉, 먼저 행을 삭제하고 최신 항목을 다시 추가해야합니다.

하지만 불행히도 테이블 A의 행을 삭제하려고하면 다른 테이블을 참조하는 참조가 생깁니다. 따라서 삭제와 추가에 대한 나의 논리는 항상 적절한 방식으로 작동하지 않습니다. 그것이 삭제되고 다시 추가 되더라도, 그것이 추가되는 순서는 마지막으로, 즉 새로운 레코드로서 존재한다. 따라서 이전의 모든 참조 트랙을 이전과 동일한 순서로 잃어 버리고 있습니다.

따라서 테이블에서 레코드를 삭제하고 싶습니다. 즉, 참조를 무시하도록 허용해야하는 시간에 대한 참조 즉, 레코드를 다시 추가하면 레코드를 업데이트 한 다음 참조를 다시 적용하거나 다시 활성화해야합니다. .

이렇게 할 수 있습니까? 또는 다른 논리가 유사한 방식으로 작동하거나 원래의 의도를 대체 할 수 있습니까? 아무도 이것에 당신의 전문 기술 통보를 제공 할 수 있 었는가?

Windows 서비스 팩의 일반적인 논리는 어떻게 작동합니까? 어느 누구도 그것에 대해 자세히 설명 할 수 있습니까? 같은 정보에 관한 정보 나 의사 또는 블로그를 공유 하시겠습니까?

정말 고마워요. 감사합니다, Shyam

+0

최상위 테이블의 레코드가 활성화 또는 비활성화 (1 또는 0)되었음을 나타내는 비트 열을 추가 할 수 있습니다. 그런 다음 몇 시간 후에 예약 된 작업을 실행하면 다른 테이블의 해당 하위 레코드와 함께 해당 레코드를 정리할 수 있습니다. 이를 위해서는 아래에서 위로 시작하고, 가장 낮은 수준의 테이블에서 시작하여 외래 키 제약 조건에 부딪치지 않도록해야합니다. –

+0

"프로젝트에서 업데이트 작업을 구현하려면 2 단계 논리로 구현해야합니다. 즉, 먼저 행을 삭제하고 최신 항목을 다시 추가해야합니다."일반적으로 나쁜 생각처럼 들립니다. 정말 좋은 생각이고, 사람들이 이것을 지원하는 답변을 제공하기를 원한다면, 왜 이런 일을하는지 설명하기 위해 게시물에 더 많은 세부 사항을 추가해야하며 다른 사람들에게 이것이 최선의 방법이라고 확신시켜야합니다. – mbeckish

답변

1

당신이하고 싶은 것은 나쁜 습관입니다. 나는 당신의 디자인을 재고 할 것입니다. 하위 레코드가 있으므로 상위 레코드를 삭제할 수 없습니다. 그것이 데이터베이스를 우회하려고 시도한 것이고 나쁜 데이터를 100 % 보장한다는 것입니다.

달성하려는 작업은 새 레코드로 새 레코드를 이동하는 것이지만 수행 할 수 있지만 새 레코드를 먼저 추가 한 다음 업데이트하십시오. 연관된 이전 레코드를 정의 할 수있는 필드 또는 많은 변경을 수행하는 데 사용할 매핑 테이블을 가지고있는 것이 가장 좋습니다. 그런 다음 모든 하위 테이블에 대한 업데이트를 실행해야합니다. 이런 종류의 일은 정기적 인 연습이 아니라 한 번의 변화입니다. 확실히 응용 프로그램에서 결코 발생하지 않으며, 자격있는 데이타베이스 개발자 만이 수행 할 수 있습니다.

부모님을 비활성화하려는 경우 (새로운 주문 생성과 같은) 더 이상 사용할 수 없으며보고를 위해 세부 정보를 남겨 두십시오 (예전의 피날레를 잃고 싶지는 않을 것입니다. 주문), 테이블에 활성 플래그를 넣고 레코드를 필터링하는 대신 사용해야합니다. 흔히 활성 레코드 만보기로 만들고 코드를 테이블에 직접 연결된보기로 향하게하는 것을 의미합니다.

관련 문제