2012-12-06 6 views
2

표 A에서 기본 키로 3 개의 필드가 합성되어 있고 표 B에 합성 중 하나가 있습니다. 독특한). 삭제를 쉽게하기 위해 테이블 ​​A를 참조하고 싶습니다 (ON DELETE CASCADE 사용).외래 키로 복합 기본 키의 한 열을 참조하십시오.

그래서 다른 두 필드를 테이블 B에 배치하고이 합성을 사용하거나 다른 해결책이 있습니까?

답변

2

두 테이블 사이에 외래 키 제약 조건을 만들려면 자식 테이블이 부모 테이블의 기본 키 제약 조건을 구성하는 모든 열을 가져야합니다 (이는 내가 복합 기본 키 사용). 상위 행을 삭제할 때 Oracle 행에서 자동으로 하위 행을 삭제하도록하려면 ON DELETE CASCADE과 같은 외래 키 제약 조건이 필요합니다. 따라서 귀하의 옵션은 다음과 같습니다.

  • 상위의 기본 키를 구성하는 모든 열을 하위에 추가하십시오.
  • 단일 열 기본 키 (아마도 약식 키)가 있도록 하위 테이블을 다시 디자인하고 하위 테이블에서 사용하십시오.
  • 직접 삭제 기능을 구현하는 코드를 작성하십시오.
+0

MySQL은 외래 키가 기본 키의 열 중 하나를 참조하도록 허용합니까? 나는 그렇게 들었다. – Jasir

+0

@Jasir - 잘 모르겠습니다 (MySQL에 익숙한 사람이 대답 할 수있는 새로운 질문을 자유롭게하십시오). 그렇다면 잠금과 같은 일에 불행한 결과를 초래할 수있는 다소 끔찍한 설계 결정이 될 것입니다. –

+0

나는 [여기] (https://stackoverflow.com/questions/38094819/using-one-of-the-columns-in-a-composite-key-as-a-foreign-key)했다. MySQL에서는 외래 키가 모든 인덱스 키를 참조 할 수 있습니다. 그래서 복합 키의 가장 왼쪽 열을 참조 할 수 있습니다. – Jasir

1

테이블 A에 새로운 단일 열 (아마 시퀀스 생성) 기본 키를 만들고 기존 복합 키를 기본 키가 아닌 고유 키로 만들 수 있습니다. 그런 다음 테이블 B의 새로운 기본 키를 참조하십시오.

관련 문제