문제

우리는 FK (외국 키) 제약 조건을 고려해야하는 데이터베이스를 설계하고 있습니다.그러나 공식적인 구조화 및 정규화에만 국한되지 않습니다.우리는 그것이 성능 또는 확장 성 혜택을 제공하는 경우에만 사용합니다.

나는 몇 가지 흥미로운 기사를 살펴보고 실용적인 이점을 찾기 위해 인터넷 검색을 해왔습니다.다음은 몇 가지 링크입니다:

http://www.mssqltips.com/tip.asp?tip=1296

저는 FK의 이점에 대해 더 알고 싶었습니다(정식 구조화 및 유명한 계단식 삭제\업데이트 제외).

  • FK는 기본적으로 '인덱싱'되지 않으므로 FK를 인덱싱하는 동안 고려해야 할 사항은 무엇입니까?

  • 외래 키로 매핑된 null 허용 필드를 처리하는 방법 - 이것이 허용됩니까?

  • 인덱싱 외에도 SQL-Server의 쿼리 실행 계획을 최적화하는 데 도움이 됩니까?

더 많은 것이 있다는 것을 알고 있지만 이에 대해 전문가가 말하는 것을 선호합니다.안내해주세요.

도움이 되었습니까?

해결책

  • 외국 키는 성능 또는 확장 성 이점을 제공하지 않습니다.
  • 외국 키는 참조 무결성을 시행합니다. 누군가가 상위 테이블에서 오류로 행을 삭제하려고 시도한 경우 오류를 제기함으로써 실질적인 이점을 제공 할 수 있습니다.
  • 외국 키는 기본적으로 색인되지 않습니다. 부모 행을 삭제/업데이트 할 때 하위 테이블의 테이블 스캔을 피하기 때문에 외래 키 열을 색인해야합니다.
  • 외국 키 열을 널리 잡을 수 있고 널을 삽입 할 수 있습니다.

다른 팁

가장 큰 이점은 버그가 있는 클라이언트 코드가 뭔가 잘못된 작업을 시도하더라도 데이터베이스가 일관성을 잃게 되지 않는다는 것입니다.외래 키는 일종의 '제약'이므로 그렇게 사용해야 합니다.

"기능적" 이점이 없으며 어떤 것도 최적화하지 않습니다.여전히 색인 등을 직접 만들어야 합니다.그리고 그렇습니다. 외래 키인 열에 NULL 값을 가질 수 있습니다.

FK 제약 조건은 데이터를 일관되게 유지합니다. 그게 다야. 이것이 주요 이점입니다. FK 제약 조건은 성능 이득을 제공하지 않습니다.

그러나 DB 구조에서 정규화되지 않았다면 FK 제약 조건을 사용하는 것이 좋습니다. 주된 이유 - 일관성.

나는 그물에 대한 한 가지 예를 읽었습니다. 하다 FK로 인해 이미 데이터가 이미 특정 기준을 충족한다는 것을 알고 있기 때문에 Optimiser가 테이블 전체에 추가 점검을 수행 할 필요가 없기 때문에 성능 향상. 죄송합니다 링크가 없지만 블로그는 쿼리 계획을 자세히 설명하기위한 자세한 출력을 제공했습니다.

언급했듯이, 그들은 데이터 무결성을위한 것입니다. 모든 성능 "손실"은 깨진 데이터를 수정하는 데 필요한 시간으로 완전히 삭제됩니다.

그러나 간접적 인 성능 혜택이있을 수 있습니다.

SQL Server의 경우 적어도 FK의 열에는 양쪽에 동일한 데이터 유형이 있어야합니다. FK가 없으면 Nvarchar 부모와 Varchar Child를 가질 수 있습니다. 2 개의 테이블에 가입하면 성능을 죽일 수있는 데이터 유형 변환이 발생합니다.

예 : 문제를 일으키는 다른 바르 차량 길이

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top