나는 내가 DB를제약을 두 번 검사
. 내가에서 일하고 있어요 DB에 대한 몇 가지 조언이 필요하고, 지금은 프로 시저, 함수 및 트리거 (PL/SQL에서 일하고 있어요). 세 개의 엔티티가 있으며 두 개는 세 번째 엔티티 (개념적 데이터 모델 당)를 상속합니다. 따라서 세 번째 엔티티를 참조하는 두 개의 테이블이 있음을 의미합니다. 부모 테이블과 자식 테이블에 동시에 데이터를 삽입해야하므로 부모 테이블에 삽입 된 프로 시저를 작성하고 이전 프로 시저를 호출 할 수있는 자식 프로 시저에 삽입 한 프로 시저를 작성해야합니다.
내 문제는 부모 테이블에 삽입 한 다음 하위 테이블에 삽입하려고했는데 어떤 이유로 제약 조건을 충족시키지 않는 자식 테이블에 데이터를 삽입하면 어떻게됩니까? 즉, 제약 조건에도 불구하고 여전히은 함수에서 입력 데이터를 확인해야합니까? 당신의 제안은 무엇입니까?
예, 외래 키 제약 조건이 있습니다. 그러나 이는 중요한 것이 아니라 나머지 테이블 제약 조건입니다. 예를 들어,이 테이블을 가지고 특정 CHECK 제약 조건이 있다고 가정 해 봅시다. 두 번째 테이블에 데이터를 삽입 한 경우 (첫 번째 테이블에 데이터를 성공적으로 삽입 한 후) 제약 조건을 위반했기 때문에 어떤 이유로 예외가 발생했습니다. 두 번째 테이블에는 데이터가 기록되지만 첫 번째 테이블에는 데이터가 기록됩니다 . 그것이 저를 걱정하는 것입니다. –
@ user1231958 - 이것이 바로 트랜잭션 경계입니다. 자식 테이블에 대한 삽입이 실패하고 두 삽입 작업이 성공하지 않는 한 부모 테이블에 대한 삽입을 커밋하지 않으려면 하위 테이블에 삽입하는 프로 시저가 커밋을 발행합니다. –
롤백 명령어를 발행해야합니까, 아니면 자동입니까? 프로 시저 내에서 하나의 테이블에 하나의 삽입을 삽입 한 다음 다른 프로 시저에서 호출하면 어떻게됩니까? 프로 시저 A -> 프로 시저 B 호출 -> 프로 시저 B는 프로 시저 A 삽입을 삽입하고 리턴합니다. –