외래 키 삭제 / 업데이트 제약 조건에서 SET NULL의 목적은 무엇입니까?


15

아마 마음이 좁을 수도 있지만 외래 키 제약 조건을 만들고 행을 업데이트하거나 삭제하면 자식 테이블의 열이 NULL로 설정되면 연결이 끊어집니다.

고아 행을 의도적으로 유지하는 목적은 무엇입니까?


유스 케이스를 찾고 있는데, 데이터베이스에 따라
Derek Downey

나는 ... 중 하나 이것에 대한 사용 사례를 본 적이 없다
a_horse_with_no_name

답변:


13

set null유용한 지 여부 는 null특정 상황에서 선택한 내용에 따라 달라집니다. nullIMO에 대한 모든 혼란과 의견과 함께 현명한 접근 방식은 DBA가

  1. 각 널 입력 가능 필드의 의미를 선택하고 문서화하십시오.
  2. 만들기는 확실히 그것은 의미 것은 단지

이러한 규칙을 사용하여 다음 사용 사례를 고려하십시오.

  • '숍'테이블이 있습니다 (예 : 개별 구내)
  • '소매 업체'테이블 (예 : 체인)이 있습니다.
  • '샵'테이블에는 '소매 업체'의 키를 나타내는 조회 필드가 있습니다.
  • null독립 상점 (즉, 체인의 일부가 아닌 상점)을 나타내도록 정의 했습니다.
  • '소매점'은 상점이 독립적이라고 생각하는 지점까지 지점을 닫습니다.

이 경우에는 on delete set null의미가 있습니다. 이러한 비즈니스 규칙을 모델링하는 다른 방법이 있지만 이것이 가장 간단하며 실제 세계에서 관심이있는 사실에 정확하게 맞다면 완벽하게 괜찮습니다.


엄격한 null 의미의 좋은 점과 예제를 통해 이것이 왜 기능인지 분명합니다.
데릭 다우니

1

내가 일반적으로 생각할 수있는 대부분의 유스 케이스는 "글쎄, 우리는 다른 것을 할 수 있지만 대신 이것을하고 싶다"고 생각합니다.

owner회사의 문제 추적 시스템의 버그에 대한 필드를 고려하십시오 . John이 종료되면 계정을 제거 할 때 모든 문제를 삭제해서는 안됩니다. 그럼에도 불구하고 일부 데이터베이스 SET DEFAULT는 작업으로 허용 하거나 트리거가 동일한 작업을 수행 하도록 허용 하고 Nobody직원을 기본 이슈 소유자로 두는 것이 옵션이 될 수 있습니다. 또는 disabledJohn의 레코드를 삭제하지 않고 필드를 만들 수도 있습니다 .


3
이 경우 나는 RESTRICT무언가 잘못되었을 때 늙은 직원에게 책임을 지적 할 다른 이유가 없다면 삭제 ( ) 를 허용하지 않을 것이라고 주장 합니다!
데릭 다우니
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.