2016-06-04 2 views
0

감사 테이블, 상태 유형 등의 참조 테이블이 있습니다.이 테이블에는 표준 ENUM 데이터가 들어 있습니다. 내 의도는 데이터베이스 변경 사항을 배포 할 때마다 이러한 테이블의 데이터를 다시 작성하는 것입니다. 즉,이 테이블은 ID를 사용할 수 없습니다.참조 데이터 테이블 참조 무결성

그러나 이러한 테이블은 다른 트랜잭션 테이블과 외래 키 관계를 가질 수 있습니다. 문제는 이러한 (참조) 테이블의 데이터를 다시 작성하려고하지만 이미 참조 된 데이터를 삭제할 수 없다는 것입니다.

트랜잭션 테이블에 외래 키 관계가있는 것이 맞습니까? 이 시나리오를 어떻게 다룰 수 있을까요?

미리 감사드립니다.

+0

은 정적 데이터가있는 참조 테이블입니까? – Rahul

+0

정적 데이터 란 무엇입니까? – Immortal

답변

2

외부 키 참조가 거꾸로있는 것처럼 보입니다 - 또는 적어도 역방향으로 설명되어 있습니다. 트랜잭션 테이블은 기본 키를 사용하여 참조 테이블에 대한 외부 키 참조를 가져야합니다.

데이터베이스 생성시 이러한 테이블을 채우고 insertdelete을 사용하여 변경해야합니다.

일단 외래 키가 있으면 데이터베이스는 관계형 무결성을 적용합니다. 일반적으로 데이터베이스는 트랜잭션 테이블의 값이 올바른 행을 참조하는지 확인합니다. 이것은 좋은 일입니다. 그것은 데이터베이스의 ACID 속성에서 "C"입니다.

변경하려는 경우 데이터를 삭제하지 마십시오. 새 행을 추가하려면 insert을 사용하십시오.

+1

Gordons 솔루션은 수년 동안 당신에게 엄청난 이익을 안길 것입니다. 이 상황에서 실제로 열거 형을 소유 한 것은 컴파일 된 클라이언트 코드입니다. 그것이 DB에서하기 쉽다해도 결코 바꿀 수없는 이유입니다. –

+1

주의해야 할 또 하나의주의 사항은 열거 형을 사용하여 트랜잭션 테이블을로드하는 저장 프로 시저가 있지만 실제로 열거 형을 소유하고 있지 않은 경우 런타임에 자동으로 부모 열에 새 열거 형을 삽입해야 할 수 있습니다 거래를 수락합니다. 이것은 트랜잭션 테이블이 실제로 이미 완료된 트랜잭션의 로그 인 경우가 많으므로 열거 형이 없기 때문에 참조 무결성 관점에서 실패하는 대신 실제 트랜잭션을 기록하는 것이 좋습니다. –

+0

@ Gordon, 대답 해 주셔서 감사합니다. 유감스럽게 생각합니다. 모든 것을 설명하는 방식이었습니다. 참조는 실제로 언급 한 방식이며, 트랜잭션 테이블에는 실제로 참조 테이블에 대한 외래 키가 있습니다. 나는 당신이 생각해 낸 답에 정말 기뻐하고 실제로 다른 몇 가지를 보는 방식을 (좋은 방향으로) 바 꾸었습니다. – Immortal