2014-09-12 2 views
1

나는 여러 개의 테이블 : company, customer, company_has_customertransaction이 있습니다.MySQL 접합 테이블 외래 키

company_has_customercompanycustomer의 PK를 PK로 사용하는 다 대다 접합 테이블입니다.

데이터베이스의 거의 모든 상황에서 companycustomer은 레코드를 식별하는 데 사용됩니다 (예 : transaction 표).

내 질문은 company_has_customer 또는 두 테이블 (company, customer)을 개별적으로 가리 키도록 transaction 테이블에서 외래 키를 생성해야하는지 여부입니다.

회사와 고객간에 관계가있는 경우에만 transaction 레코드가 삽입되도록하려면 참조 무결성이 company_has_customer을 통해 해당 FK를 보내는 것이 가장 좋습니다. 내 직감을 지원하는 기준이나 규칙이 있습니까?

+0

이렇게 독창적 인 디자인 토론에는 적합하지 않습니다. – Barmar

+0

Barmar에게 감사 드린다. 나는이 상황에서 베스트 프랙티스를 찾고 있지만 강한 성향이있다. –

+0

아마도 dba.stackexchange.com에서 더 나은 행운을 누릴 수 있습니다. – Barmar

답변

0

다음은 문제를 생각하는 방법입니다. 거래가 회사 및 고객과 별도의 관계가 있습니까? 또는 회사/고객 관계에 대한 거래가 영원합니까?

나는 첫 번째 경우를 추측 할 것이다.

생각할 구체적인 상황은 다음과 같습니다. 트랜잭션이 발생한 후 고객과 회사 간의 관계가 변경되면 어떻게됩니까? 거래가 원래 회사를 유지합니까? 아니면 새로운 회사로 전환합니까? 아니면 무효화 되었습니까?

company_has_customer 테이블을 참조하면 관계가 사라질 수 있습니다. 실제로 트랜잭션이 발생했을 때의 관계를 그대로 유지하기를 원할 것입니다. 따라서 두 가지 외래 키 관계가 필요합니다.

+0

많은 제안 된 테이블에 회사와 고객 간의 관계가 있습니다. 기본적으로 고객과 회사 간의 데이터는 항상 해당 회사/고객 조합에 속합니다. 회사 ID가있는 고객 테이블에 FK를 추가하는 것이 더 간단 할 수 있습니다. M2M은 미래 수준의 옵션을 보장합니다. –

+0

@KyleJohnson. . . 이 경우, 관계는 '고객'에게 있으며, 당신은 그곳에서 회사를 찾을 수 있습니다. –

+0

예, 실제 경계가있는 곳에서 방영 중입니다. 일부 고객은 여러 회사에 소속되거나 여러 고객이 동일한 고객을 관리 할 수 ​​있습니다. 그런 모든 작은 세부 사항에서 일하기가 어렵습니다. –