2012-01-24 5 views
1

가정하자 나는 두 테이블, 테이블 A와 테이블 B, 그 테이블 A가 다음과 같은 열이 있습니다SQL 외래 키

COLUMNS (id INT PRIMARY KEY, name VARCHAR(200) UNIQUE) 

내가 테이블 B의 열을 생성 할을하는 외래 키를 사용하여 테이블 A의 행을 참조합니다. 테이블 B에서 행을 조회 할 때 대부분 참조하는 테이블 A 행의 이름 필드를 검색하려고합니다. 조회 속도 (삽입이 아닌)가 중요합니다.

외부 키로 테이블 A의 기본 키를 사용하고 JOIN을 사용하여 이름 필드의 값을 가져 오는 것이 더 좋을까요 아니면 이름 필드를 외래 키로 사용하는 것이 좋습니다 테이블 B에서 행을 검색 할 때 데이터가 이미 존재하는지?

+0

TableB에 이름 값을 저장하는 경우 TableA를 처음 사용하는 데 필요한 점은 무엇입니까? – JNK

+0

이름은 테이블 A와 테이블 B에서 서로 다른 의미를가집니다. 테이블 A에서 테이블 B의 행과 연관된 다른 객체의 이름입니다. – mskel

+0

그래도 내가 뭘하는지 알아 보려면 id를 사용해야합니다. 그렇지 않으면 조회 테이블을 갖지 않으면 무의미합니다. – JNK

답변

4

일반적으로 이름이 변경 될 수 있습니다. 누군가가 더 나은 이름을 찾거나 수정해야하는 이름에 오타가있을 수 있습니다. 반면에 PK는 절대로 바뀌지 않아야합니다. ID는 항상 FK로 사용하십시오. 이것은 조회 테이블이 작동하는 방법입니다.

ID 열을 PK로 사용하면 ID가 자동으로 생성되어 변경할 수 없습니다. 무의미한 PK를 갖는 것이 대부분의 좋은 생각입니다. 의미있는 열은 편집의 대상이되는 경향이 있습니다.

2

가입 이름 필드 당신의 예에서

0

테이블 B의 다른 현명한 바로 넣어 모든 "의 값을 가지고 외부 키로 테이블 A의 기본 키를 사용하고 사용하는 것이 더 좋을 것이다 이름 "은 널 (NULL) 입력 가능 C 럼이므로 후보 키가 아 U니다. 외래 키 제약 조건은 후보 키 (예 :이 경우 "Id")를 참조하도록되어 있습니다. "이름"을 nullable로 만들지 않거나 참조 ID를 대신 사용하도록 테이블을 변경하는 것이 좋습니다.

SQL의 Nullable UNIQUE 및 FOREIGN KEY 제약 조건은 다른 데이터베이스 제품에서 다양한 방식으로 구현할 수 있습니다. 그들의 의미는 때로는 모호하며 사용 결과는 종종 모순이며 현실과 일치하지 않을 수 있습니다.

(null 허용은 CREATE TABLE 문에서의 감시 일 뿐이므로 사용자가 질문을 수정하는 것이 좋습니다).