2017-11-23 17 views
0

저는 U라는 테이블과 P라는 테이블이 관련된 데이터베이스를 가지고 있습니다.M : N 데이터베이스 관계에서 복합 PK 또는 두 개의 외래 키로 참조하는 것이 더 좋습니다

table U 
    U_Id primary key. 

table P 
P_Id primary key 

두 테이블 간에는 많은 관계가 있습니다.

2) 참조를 포함하는 새 테이블을 만들

1) 복합 기본 키 (U_Id, P_Id)를 포함하는 새 테이블을 만들 :

나는 두 테이블 사이의 관계를 만드는 두 가지 방법이 있습니다 U 테이블과 P 테이블에서 외래 키로.

(U_id 및 P_id 등 외래 키)

Third_Table 

U_id FK not null 

P_Id FK not null 

무엇을 더 나은 옵션?

+0

: 많은 테이블 : http://mysql.rjweb.org/doc.php/index_cookbook_mysql#many_to_many_mapping_table –

답변

1

옵션 1과 2는 반대가 아닙니다. 관계 테이블에는 U_IdP_Id이 외래 키로 포함되며이 두 열의 조합은 기본 키가 아닌 경우 고유 키로 표시되어야합니다.

일부 DB 설계자는 대리 식별자를 기본 키로 사용하는 것을 선호합니다. 다른 사람들 (나 자신 포함)은 외래 키의 조합을 기본 키로 사용하는 것을 선호합니다.

0

2) U 테이블과 P 테이블의 참조를 외래 키로 포함하는 새 테이블을 만듭니다.

참조 무결성을 위해 필요한 것입니다. 그렇지 않으면 세 번째 테이블은 아무 것도 참조하지 않는 값을 가질 수 있습니다. (만세에 대한 많은 - 투 - 아무것도 행!)

1) 복합 기본 키 (U_Id, P_Id)를 포함하는 새 테이블을 만들

당신이하지 않으면, 세 번째 테이블의 기본 키는 무엇입니까? 그것은 하나, 맞죠?

기본 키는 고유 제한 조건의 한 형태입니다. 테이블에 둘 이상의 고유 제한 조건이있는 경우, 기본 키를 호출하는 선택 항목은 임의적입니다. 귀하의 경우에는 단 하나뿐입니다.

중복 행을 방지하려면 세 번째 테이블에 고유 한 제한 조건이 필요합니다. Primary Key (U_Id,P_Id){U_Id,P_Id} 쌍이 고유하고 그 관계를 식별한다고 말합니다. 당신이 말한대로, 그것이 당신이 원하는 것입니다.

0

두 개의 외래 키로 구성된 복합 키가 필요합니다. 예제 코드 (테스트되지 않은) :

많은 성능을 위해
CREATE TABLE Q 
(u_id INT NOT NULL FOREIGN KEY REFERENCES U (u_id), 
p_id INT NOT NULL FOREIGN KEY REFERENCES P (u_id), 
PRIMARY KEY (u_id, pi_id));