Programming

SQL-다 대다 테이블 기본 키

procodes 2020. 7. 17. 22:12
반응형

SQL-다 대다 테이블 기본 키


이 질문은이 질문에 대한 의견을 읽은 후에 나옵니다.

데이터베이스 디자인

다 대다 테이블을 생성 할 때 두 개의 외래 키 열에 복합 기본 키를 생성하거나 자동 증분 대리 "ID"기본 키를 생성하고 두 FK 열에 인덱스를 추가해야합니다. 독특한 제약)? 각각의 경우에 새 레코드 삽입 / 재색 인화 성능에 어떤 영향을 미칩니 까?

기본적으로 이것은 :

PartDevice
----------
PartID (PK/FK)
DeviceID (PK/FK)

이 대

PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)

논평자는 말한다 :

두 개의 ID를 PK로 만들면 테이블이 디스크에서 물리적으로 해당 순서대로 정렬됩니다. 따라서 (Part1 / Device1), (Part1 / Device2), (Part2 / Device3)을 삽입하면 (Part 1 / Device3) 데이터베이스는 테이블을 분리하고 항목 2와 3 사이에 마지막 테이블을 삽입해야합니다. 많은 레코드를 추가 할 때마다 수백, 수천 또는 수백만 개의 레코드를 추가 할 때마다 매우 문제가됩니다. 반대로 자동 증가 PK를 사용하면 새 레코드를 끝까지 고정시킬 수 있습니다.

내가 묻는 이유는 항상 대리 자동 증가 열이없는 복합 기본 키를 수행하는 경향이 있었기 때문에 대리 키가 실제로 더 성능이 있는지 확실하지 않기 때문입니다.


간단한 2 열 다 대다 매핑을 사용하면 대리 키를 사용하는 것이 실질적인 이점이 없습니다. 기본 키를 사용하는 (col1,col2)것은 고유하며 ( 참조 된 테이블의 값 col1col2값이 고유하다고 가정 ) 별도의 인덱스를 사용 (col2,col1)하면 반대 순서가 더 빨리 실행되는 경우를 잡을 수 있습니다. 서로 게이트는 공간 낭비입니다.

테이블은 참조 된 두 테이블을 함께 결합하는 데만 사용해야하므로 개별 열에 인덱스가 필요하지 않습니다.

당신이 질문에서 언급 한 그 의견은 그것이 사용하는 전자의 가치가 없다고 생각합니다. 저자는 테이블이 고성능 균형 잡힌 다 방향 트리 구조가 아닌 배열에 저장되어 있다고 생각하는 것 같습니다.

처음 에는 인덱스 만 정렬 된 테이블 에 저장하거나 가져올 필요가 없습니다 . 그리고 색인은 순차적으로 저장 되지 않으며 , 신속하게 검색 할 수 있도록 효율적인 방식으로 저장됩니다.

또한, 대부분의 데이터베이스 테이블은 기록 된 것보다 훨씬 자주 읽 힙니다 . 이렇게하면 인서트 측의 작업보다 선택 측에서 수행하는 작업이 훨씬 더 관련성이 있습니다.


링크 테이블에는 대리 키가 필요하지 않습니다.

하나의 PK (col1, col2)와 다른 고유 인덱스 (col2, col1) 만 있으면됩니다.

당신이 당신을 위해 당신의 DB 디자인에 대처하고 지시 할 수없는 ORM을 사용하지 않는다면 ...

편집 : 나는 여기에 똑같이 대답했다 : SQL : Many-Many 테이블에 자동 증분 기본 키가 필요합니까?


테이블이 참조되면 증분 기본 키가 필요할 수 있습니다. 다 대다 테이블에 증분 기본 키를 사용하여 다른 테이블에서 가져와야하는 세부 사항이있을 수 있습니다.

예를 들어

PartDevice
----------
ID (PK/auto-increment)
PartID (FK)
DeviceID (FK)
Other Details

PartDevice.ID를 FK로 사용하여 '기타 세부 사항'을 쉽게 가져올 수 있습니다. 따라서 증분 기본 키를 사용해야합니다.


귀하의 질문에 대답 할 수있는 가장 짧고 직접적인 방법은 연결하는 두 테이블에 순차적 인 기본 키가 없으면 성능에 영향을 줄 것이라고 말하는 것입니다. 언급했거나 인용 한대로 링크 테이블에 대한 인덱스는 조각화되거나 링크 테이블에 고유 한 순차 기본 키가없는 경우 DBMS는 레코드를 삽입하기 위해 더 열심히 노력합니다. 이것이 대부분의 사람들이 순차적으로 증가하는 기본 키를 링크 테이블에 두는 이유입니다.


따라서 두 테이블을 연결하는 것이 유일한 작업 인 경우 가장 좋은 PK는 이중 열 PK입니다.

그러나 다른 용도로 사용되는 경우 외래 키와 두 번째 고유 인덱스가있는 다른 NDX를 PK로 추가하십시오.

중복이 없는지 확인하는 가장 좋은 방법은 인덱스 또는 PK입니다. PK를 사용하면 Microsoft Management Studio와 같은 도구가 일부 작업 (보기 작성)을 수행 할 수 있습니다.

참고 URL : https://stackoverflow.com/questions/2190272/sql-many-to-many-table-primary-key

반응형