2010-05-28 2 views
0

두 테이블이 있습니다 A, B. 두 테이블 모두 100 만 개가 넘는 레코드가 있습니다.테이블에 고유 한 열이있는 경우 ID 열이 있어야합니까?

A에는 두 개의 열, 즉 id, photo_id이 있습니다. id이 기본 키이고 photo_id이 고유합니다.

AB으로 참조해야합니다.

3 질문 :

  1. 내가 Aid 무시하고 두 테이블을 연결하는 photo_id를 사용할 수 있습니까?
  2. B에서 고유 한 열을 사용하는 대신 기본 열을 사용하면 어떤 이점이 있습니까?
  3. 외래 키를 갖게되면 어떤 차이가 있습니까? 외래 키는 사용중인 서버에서 지원되지 않기 때문에 아마 사용하지 않을 것입니다. 1 백만 개 이상의 레코드가있을 때 이것이 중요한 차이점이 있습니까?
+0

해당 photo_id 키는 무엇입니까? 예를 들어 줄 수 있습니까? –

+0

사진 ID : 3154991407, 4606886418 등. 고유성이 보장됩니다. – Yeti

답변

4

id-column을 건너 뛰십시오. 이미 고유 한 photo_id가있는 경우이를 대신 사용해야합니다. 기본 키 (MySQL InnoDB)가 자동으로 클러스터링됩니다. 즉, 데이터가 인덱스에 저장되므로 기본 키를 참조로 사용하면 전체 행을 매우 효율적으로 검색 할 수 있습니다.

  1. 예 :

    귀하의 질문에 대답합니다. 그리고 id-column을 제거하십시오. 인공 키이며 photo_id를 사용하는 것보다 이점이 없습니다.
  2. 예. 기본 키 인덱스는 클러스터되어 정확한 쿼리와 범위 쿼리 모두에 대해 매우 효율적인 쿼리를 수행합니다. (즉, select * from photos where 2 < id AND id < 10)
  3. 외래 키는 데이터베이스 테이블에 제약 조건을 넣고 테이블의 데이터가 일관된 상태인지 확인합니다. 외래 키가 없으면 일관성을 보장하기 위해 일부 응용 프로그램 수준 논리가 있어야합니다.
+1

사진 ID를 기본 키로 만드시겠습니까? – Yeti

+0

. 사진 ID가 더 적절한 기본 키가됩니다. – PatrikAkerstrand

+0

좋습니다. 그러나 ID가 제거되면 최신 photo_ids (주문되지 않음)를보고 싶다면 표를 정렬 할 수있는 방법이 없을 것이라고 생각합니다. photo_id를 기본으로 만들고 id auto_increment를 작성합니까? – Yeti

0

사진 ID 값이 변경되지 않는다고 확신하는 경우에만 ID 열을 제거합니다. B 테이블의 여러 행이 특정 A 행을 참조하고 해당 행의 photo_id를 업데이트해야하는 경우 B 테이블의 id 열을 참조해야합니다.

+0

아니요. 사진 ID가 변경되지 않습니다. – Yeti

+0

또는 외래 키 사용 : ON UPDATE CASCADE ... ID 열에 대한 필요가 없습니다. – PatrikAkerstrand

관련 문제