2013-03-16 3 views
1

두 개의 동일한 것을 서로 연결하는 조회 테이블을 갖고 싶습니다. 'Person'테이블이 있고 두 사람의 관계를 조회하고 싶다고 가정 해보십시오. 조회의 열 1은 'PersonId1'이고 열 2는 'PersonId2'이고 세 번째 열은 '관계'입니다. 관계는 두 가지 방식으로 진행되므로 PlayerId가 전환 된 상태에서 중복 레코드가 필요하지 않습니다. mysql이 어떤 순서에 관계없이 PlayerId1과 PlayerId2 조합에 고유성을 적용 할 수있는 방법이 있습니까?Mysql 복합 기본 키

의미가 있습니까?

답변

0

PersonID1PersonID2 열 (Relationship 열과 관계 없음)의 고유 한 행 레코드를 갖고 싶다는 의미입니까? 그렇다면 복합 키 (다중 열 키)를 사용할 수 있습니다. 여기

은 예입니다 :

CREATE TABLE Person (
    PersonId1 INT, 
    PersonId2 INT, 
    PRIMARY KEY (PersonId1, PersonId2) 
) 
+0

예 그러나 PersonId1 9 것입니다 경우 PersonId2는 10 하나의 레코드에 있지만 다른 PersonId1에서는 10이고 personId2 9.에서는 동일한 관계를 재정의합니다. 나는 그것을 방지 할 수있는 방법이 있는지 궁금해하고있었습니다. – ForeverNoobie

+0

주문하시는 경우'varchar' 데이터 타입을 가진 단일 필드를 사용하신 후'PersonId1'과'PersonId2'를 연결할 수 있습니다. 그리고 그것을 기본 키로 만드는 것을 잊지 마십시오. –

+0

쌍으로 삽입하거나 삽입해야합니다. 그렇지 않으면 작동하지 않습니다. INSERT INTO 관계 (PersonId1, PersonId2) VALUES (9,10), (10,9)'그리고 그 쌍 중 하나 이상이 충돌하면 트랜잭션이 실패합니다. – tadman

2

짧은 답변 : 제

긴 답 : 두 번째는 첫 번째보다 작다면 당신은 두 사람의 ID의 순서를 교환하는 트리거를 설정할 수 있습니다 그런 다음 작성하고 복합 키를 사용하십시오.

심지어 더 긴 대답 : 모든 대인 관계가 교환 적이지는 않습니다 (모든 관계가 양방향으로 이어지는 것은 아닙니다). "직원"또는 "어머니"관계는 어떻습니까? 아마도 "친구"관계 (아마도 피어 투 피어)는 A가 B의 친구이고 B가 A의 친구라는 별도의 행이 있다면 더 잘 표현 될 수 있습니다. 어쩌면이 테이블에 3 필드 복합 키를 원할 수도 있습니다.

+0

+1'3 필드 복합 키 ' –

0

+1 복합 pk. 또한

참조 ... 중복 조합, 해결책이 될 수있다 그것에 고유 제한 조건을 가진 예를 personid1 + personid2에 대한에 추가 VARCHAR 컬럼을 방지하려면 person data model example