2013-09-25 3 views
0

테이블에 행을 삽입하는 데이터베이스에 저장 프로 시저가 있다고 가정합니다. 테이블의 기본 키 제약 조건을 위반하는 행을 삽입하려고하면 데이터베이스에서 분명히 예외가 발생합니다. 자, 데이터베이스 수준에서이 예외 권한을 처리해야합니까, 아니면 예외를 클라이언트에 보내고 처리 할 수 ​​있습니까? 어느 쪽이 선호되고 더 나은 관행인가?데이터베이스 측 또는 클라이언트 측에서 예외를 잡아야합니까?

+0

중복 : http://stackoverflow.com/questions/464042/should-you-enforce-constraints-at-the-database-level-as-well-as-the-application – rags

답변

1

넝마에 의해 링크 된 질문이 데이터베이스에있는 추론을 다루는 데 동의하지만, 생성 된 예외와 관련해서는 다루지 않기 때문에 특정 질문에 완전히 응답하지 않는다고 생각합니다. 데이터베이스에서.

그래서 대답은 "의존적"이라고 생각합니다.

클라이언트에서 입력을 받아들이고 SP 내부에서 추가 데이터를 생성하지 않고이 SP를 사용하여 삽입하려고하면 SP가이 문제를 처리 할 수 ​​없으므로 클라이언트에 예외를 던져야합니다 예외이며 잘못된 데이터는 클라이언트에서 가져온 것입니다.

처리 할 수없는 예외를 catch하지 않습니다.

한편

SP가 문제의 원인 일 수 있었다 경우, -의는이 INSERT의 일부를 형성하는 데이터의 일부를 생성하는 말을하자 그것은이 데이터는 문제와 원인 했다 실제로 그것을 복구 할 수 있습니다 - 그 다음 그것을 잡아라, 회복해라. 그러면 클라이언트는 그것에 관해 무엇인가를 알 필요가 없다. 만약 당신이 그때 당신이 그것에 대해 더 이상 아무것도 할 수 없기 때문에 당신은이 시점에서 클라이언트에게 다시 예외를 던져 버릴 수 있습니다.

덧붙여 말하자면, 스키마의 변경에 매핑 된 객체를 변경해야하므로 어쨌든 데이터베이스 스키마에있는 것과 동일한 제약 조건의 "소프트"버전을 갖는 것이 잘못되었습니다. (어쨌든 나에게) 매핑 된 객체 모델을 준수해야하는 계약으로 데이터베이스에서 정의한 관계형 및 구조적 제약 조건을 처리해야합니다.

관련 문제