0

안녕하세요.이 외래 키 딜레마가 있습니다. 표 A와 표 B와 표 C가 있다고 가정 해 보겠습니다.외래 키 딜레마

표 A는 수퍼 테이블 B의 하위이며 레코드는 외래 키를 통해 A에서 B (편도)로 연결됩니다. 이제 테이블 C는 A와 B에 적용 할 수있는 정보를 포함하고 있습니다. 테이블 B에이 정보를 가지고 있으면 편리 할 것이지만 기술적으로 정보는 테이블 A에 속할 수 있습니다.

이제 내 질문은, 테이블 A에서 테이블 B의 상위 행을 통해 테이블 ​​A 액세스 정보를 얻거나 테이블 A에서 테이블 C 및 참조 테이블 C까지 "바로 가기"를 만드는 것이 더 좋을까요?

옵션 1 : 표 A를 참조 테이블 B + 테이블 B 참조 테이블 C

옵션 2 : 테이블 A 참조 테이블 B + 테이블 B 참조 테이블 C + 표 A 참조

이 두 옵션을 간소화 테이블 C

옵션 1에서 동일한 정보가 한 테이블 떨어져 있기 때문에 옵션 2를 수행하면 어떤 이점이 있습니까?

답변

1

FOREIGN KEY는 (데이터 무결성) (성능)

  • 내재적 생성 지수
  • 제약이고;

FK는 간접적으로 "다른 테이블을 참조하는 방법"입니다. 그래서 저는 단순히 컬럼에 대해 이야기하기를 좋아합니다. (모든 열 을 사용하여 다른 테이블을 '참조'할 수 있습니다.)

많은 교과서 원칙 중 하나는 DRY - Do not Repeat Yourself입니다. 결국 무언가가 잘못되고 반복되는 데이터가 일치하지 않기 때문에 현명한 원칙입니다. A에서 C까지 여분의 링크가 중복됩니다.

거대한 데이터 세트에서는 필요한 모든 성능을 제공하기 위해 모든 종류의 교과서 원칙을 위반합니다. ("거대한"은 수십억 개의 행을 의미하지만 수천이 아닌 수백만을 의미합니다.)

처음 시작한 것 같아서 문제가 발생했을 때 성능에 대해 걱정하지 않아도됩니다. 예, 추가 비용은 JOIN입니다.

초보자의 경우 성능 문제는 일반적으로 곧 발생하지만 바로 가기가 없기 때문에 발생하지는 않습니다. 먼저 배울 다른 많은 교훈이 있습니다. 힌트 : "종합 지수"에 대해 알아보십시오. 초보자가 배울 수없는 최고의 성능 기술이라고 생각합니다. (FK에 집중하면 INDEXes에 집중하지 못합니다.)