0

한 테이블의 외래 키를 다른 테이블의 기본 키로 사용하기위한 일반적인 설계 고려 사항 (좋음/나쁨/중립)이 있습니까? ,외래 키를 기본 키로 사용하기위한 설계 고려 사항

titles 
------ 
id 


episodes 
-------- 
title_id (PK/FK) 

에피소드는 분명히 ID와 ID가 UNIQUE 될 것 PK와 title_id를 할 것 title_id를 모두와 함께 할 수있다 :

예를 들어, 필름 카탈로그의 일환으로 다음과 같은 테이블을 가정 title_id는 이미 고유하고 기술적으로 에피소드를 식별하므로 PK로 사용하는 데 고려해야 할 사항이 있습니까? 일반적으로는 어떨까요? 어떤 디자인 고려 사항이 이것을 볼 수 있습니까?

의견을 보내 주셔서 감사합니다.

+0

제목이 같은 여러 개의 에피소드 (예 : 제목이 시리즈 제목으로 사용됨)를 가질 수 있습니까? 최소한 하나의 에피소드가없는 제목이있을 수 있습니까? –

+0

동일한 제목의 에피소드가 여러 개있을 수 없습니다. 예, 에피소드가없는 제목이있을 수 있습니다. 다른 유형의 제목이 있습니다. 에피소드 유형의 타이틀에는 에피소드 기록이 있습니다. –

+0

그러면 적절한 것으로 보입니다. 실제로 상속 형식을 구현하고 있습니다 ([this post] (http://stackoverflow.com/a/12037398/533120)의 "물리적 표현"섹션 참조). 이 경우 대용 키를 추가하는 것이 도움이되지 않습니다. –

답변

0

질문에 대한 대답은 기본적으로 "공유 기본 키"라고하는 기술에 대한 설명입니다. 따라서 필자는 기본 키와 외래 키에 대한 두 개의 태그를 단일 태그 공유 기본 키로 대체했습니다.

공유 기본 키는 한 테이블의 PK도 다른 테이블의 PK를 참조하는 FK 인 디자인입니다. shared-primary-key에 대한 태그 위키가 나타내는 바와 같이, 이것은 일대 일 관계에 대해 필수적이든 선택적이든 관계없이 유용합니다. 이러한 관계는 "자동차는 차량"에서처럼 IS-A 관계라고도합니다. 차량과 자동차 사이의 관계는 클래스/하위 클래스 또는 유형/하위 유형 관계라고도합니다.

모든 디자인 기법과 마찬가지로 이점과 비용이 있습니다. 회신

편집 댓글을 :

공유 기본 키에 가장 큰 장점은 관계의 1 대 1 본질을 적용한다는 것입니다. 이 규칙을 데이터베이스에 적용하면 일반적으로 모든 응용 프로그램 코드가 규칙을 따르는 것보다 더 생산적입니다.

두 번째 이점은 두 테이블 간의 조인이 쉽고 빠르다는 것입니다. PK를 지원하기 위해 작성된 인덱스로 인해 옵티마이 저가 조인 속도를 높이기 때문에 빠릅니다 (일부 데이터베이스 시스템의 경우).

세 번째 이점은 동일한 FK로 두 테이블 모두를 참조 할 수 있다는 것입니다.

비용은 두 테이블에 새 항목을 추가 할 때 프로그래밍이 필요하다는 것입니다. 기본 테이블의 PK를 보조 테이블에 복사해야하며 시스템에서 일반적으로이 작업을 수행하지 않습니다. 또한 조인은 빠르지 만 무료는 아닙니다.

+0

음, 그게 내가 원하는거야. 어떤 종류의 혜택과 비용? (샤드 - 프라이 머리 - 키 태그를 가르쳐 주셔서 감사합니다.) –

관련 문제